diff options
author | Limin Wang <lance.lmwang@gmail.com> | 2020-06-24 14:07:22 +0800 |
---|---|---|
committer | Limin Wang <lance.lmwang@gmail.com> | 2020-06-28 21:00:52 +0800 |
commit | acca2aecb05cf254262969ced5e5dfd1c9be7a73 (patch) | |
tree | 60d43a86d45670b27836f682a587caa31c96bf16 /libavcodec | |
parent | 79723c2a878b13110ce3e86db68c33f4f71f6da7 (diff) | |
download | ffmpeg-acca2aecb05cf254262969ced5e5dfd1c9be7a73.tar.gz |
avcodec/h264_slice: use av_timecode_get_smpte()
Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/h264_slice.c | 33 |
1 files 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; } |