From fad459b5a6461bf2ce2c232d5e251dd486bbdc0d Mon Sep 17 00:00:00 2001 From: Nicolas Gaullier Date: Fri, 10 Sep 2021 11:34:08 +0200 Subject: avcodec/h264_parser: Set AVCodecContext.framerate Signed-off-by: Nicolas Gaullier Signed-off-by: James Almer --- libavcodec/h264_parser.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'libavcodec') diff --git a/libavcodec/h264_parser.c b/libavcodec/h264_parser.c index cff801f613..bb84cea821 100644 --- a/libavcodec/h264_parser.c +++ b/libavcodec/h264_parser.c @@ -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 */ -- cgit v1.2.3