1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-23 12:43:46 +02:00

avcodec/h264_slice: use av_timecode_get_smpte()

Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
This commit is contained in:
Limin Wang 2020-06-24 14:07:22 +08:00
parent 79723c2a87
commit acca2aecb0

View File

@ -1304,7 +1304,6 @@ static int h264_export_frame_props(H264Context *h)
h->sei.unregistered.nb_buf_ref = 0; h->sei.unregistered.nb_buf_ref = 0;
if (h->sei.picture_timing.timecode_cnt > 0) { if (h->sei.picture_timing.timecode_cnt > 0) {
uint32_t tc = 0;
uint32_t *tc_sd; uint32_t *tc_sd;
AVFrameSideData *tcside = av_frame_new_side_data(cur->f, 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; tc_sd[0] = h->sei.picture_timing.timecode_cnt;
for (int i = 0; i < tc_sd[0]; i++) { for (int i = 0; i < tc_sd[0]; i++) {
uint32_t frames; 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;
/* For SMPTE 12-M timecodes, frame count is a special case if > 30 FPS. tc_sd[i + 1] = av_timecode_get_smpte(h->avctx->framerate, drop, hh, mm, ss, ff);
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;
}
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;
} }
h->sei.picture_timing.timecode_cnt = 0; h->sei.picture_timing.timecode_cnt = 0;
} }