avcodec/h264_parser: Set AVCodecContext.framerate

Signed-off-by: Nicolas Gaullier <nicolas.gaullier@cji.paris>
Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
Nicolas Gaullier 2021-09-10 11:34:08 +02:00 • committed by James Almer
parent 447cf53774
commit fad459b5a6
3 changed files with 139 additions and 128 deletions

View file

@ -247,6 +247,7 @@ static inline int parse_nal_units(AVCodecParserContext *s,
const uint8_t * const buf, int buf_size)
{
H264ParseContext *p = s->priv_data;
H264Context *h = avctx->priv_data;
H2645RBSP rbsp = { NULL };
H2645NAL nal = { NULL };
int buf_index, next_avc;
@ -264,6 +265,7 @@ static inline int parse_nal_units(AVCodecParserContext *s,
ff_h264_sei_uninit(&p->sei);
p->sei.frame_packing.arrangement_cancel_flag = -1;
p->sei.unregistered.x264_build = -1;
if (!buf_size)
return 0;
@ -551,6 +553,15 @@ static inline int parse_nal_units(AVCodecParserContext *s,
p->last_picture_structure = s->picture_structure;
p->last_frame_num = p->poc.frame_num;
}
if (h && sps->timing_info_present_flag) {
int64_t den = sps->time_scale;
if (p->sei.unregistered.x264_build >= 0)
h->x264_build = p->sei.unregistered.x264_build;
if (h->x264_build < 44U)
den *= 2;
av_reduce(&avctx->framerate.den, &avctx->framerate.num,
sps->num_units_in_tick * avctx->ticks_per_frame, den, 1 << 30);
}
av_freep(&rbsp.rbsp_buffer);
return 0; /* no need to evaluate the rest */