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:
parent
79723c2a87
commit
acca2aecb0
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user