summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLimin Wang <lance.lmwang@gmail.com>2020-06-24 14:07:22 +0800
committerLimin Wang <lance.lmwang@gmail.com>2020-06-28 21:00:52 +0800
commitacca2aecb05cf254262969ced5e5dfd1c9be7a73 (patch)
tree60d43a86d45670b27836f682a587caa31c96bf16
parent79723c2a878b13110ce3e86db68c33f4f71f6da7 (diff)
avcodec/h264_slice: use av_timecode_get_smpte()
Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
-rw-r--r--libavcodec/h264_slice.c33
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;
}