diff options
author | Nicolas Gaullier <nicolas.gaullier@cji.paris> | 2021-09-10 11:34:08 +0200 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2021-09-23 10:35:08 -0300 |
commit | fad459b5a6461bf2ce2c232d5e251dd486bbdc0d (patch) | |
tree | 1f80b640860467229dc1fffacdfef4d5377d5593 /libavcodec/h264_parser.c | |
parent | 447cf537746cd9969674ebbd60411b6093603c59 (diff) | |
download | ffmpeg-fad459b5a6461bf2ce2c232d5e251dd486bbdc0d.tar.gz |
avcodec/h264_parser: Set AVCodecContext.framerate
Signed-off-by: Nicolas Gaullier <nicolas.gaullier@cji.paris>
Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavcodec/h264_parser.c')
-rw-r--r-- | libavcodec/h264_parser.c | 11 |
1 files changed, 11 insertions, 0 deletions
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 */ |