[FFmpeg-cvslog] avcodec/h264_slice: use av_timecode_get_smpte()
Limin Wang
git at videolan.org
Sun Jun 28 16:57:29 EEST 2020
ffmpeg | branch: master | Limin Wang <lance.lmwang at gmail.com> | Wed Jun 24 14:07:22 2020 +0800| [acca2aecb05cf254262969ced5e5dfd1c9be7a73] | committer: Limin Wang
avcodec/h264_slice: use av_timecode_get_smpte()
Signed-off-by: Limin Wang <lance.lmwang at gmail.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=acca2aecb05cf254262969ced5e5dfd1c9be7a73
---
libavcodec/h264_slice.c | 33 ++++++---------------------------
1 file changed, 6 insertions(+), 27 deletions(-)
diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c
index 47f39173cb..2a41de287c 100644
--- a/libavcodec/h264_slice.c
+++ b/libavcodec/h264_slice.c
@@ -1304,7 +1304,6 @@ static int h264_export_frame_props(H264Context *h)
h->sei.unregistered.nb_buf_ref = 0;
if (h->sei.picture_timing.timecode_cnt > 0) {
- uint32_t tc = 0;
uint32_t *tc_sd;
AVFrameSideData *tcside = av_frame_new_side_data(cur->f,
@@ -1317,33 +1316,13 @@ static int h264_export_frame_props(H264Context *h)
tc_sd[0] = h->sei.picture_timing.timecode_cnt;
for (int i = 0; i < tc_sd[0]; i++) {
- uint32_t frames;
-
- /* For SMPTE 12-M timecodes, frame count is a special case if > 30 FPS.
- See SMPTE ST 12-1:2014 Sec 12.1 for more info. */
- if (av_cmp_q(h->avctx->framerate, (AVRational) {30, 1}) == 1) {
- frames = h->sei.picture_timing.timecode[i].frame / 2;
- if (h->sei.picture_timing.timecode[i].frame % 2 == 1) {
- if (av_cmp_q(h->avctx->framerate, (AVRational) {50, 1}) == 0)
- tc |= (1 << 7);
- else
- tc |= (1 << 23);
- }
- } else {
- frames = h->sei.picture_timing.timecode[i].frame;
- }
+ int drop = h->sei.picture_timing.timecode[i].dropframe;
+ int hh = h->sei.picture_timing.timecode[i].hours;
+ int mm = h->sei.picture_timing.timecode[i].minutes;
+ int ss = h->sei.picture_timing.timecode[i].seconds;
+ int ff = h->sei.picture_timing.timecode[i].frame;
- tc |= h->sei.picture_timing.timecode[i].dropframe << 30;
- tc |= (frames / 10) << 28;
- tc |= (frames % 10) << 24;
- tc |= (h->sei.picture_timing.timecode[i].seconds / 10) << 20;
- tc |= (h->sei.picture_timing.timecode[i].seconds % 10) << 16;
- tc |= (h->sei.picture_timing.timecode[i].minutes / 10) << 12;
- tc |= (h->sei.picture_timing.timecode[i].minutes % 10) << 8;
- tc |= (h->sei.picture_timing.timecode[i].hours / 10) << 4;
- tc |= (h->sei.picture_timing.timecode[i].hours % 10);
-
- tc_sd[i + 1] = tc;
+ tc_sd[i + 1] = av_timecode_get_smpte(h->avctx->framerate, drop, hh, mm, ss, ff);
}
h->sei.picture_timing.timecode_cnt = 0;
}
More information about the ffmpeg-cvslog
mailing list