summaryrefslogtreecommitdiff
path: root/libavcodec/h264_parser.c
diff options
context:
space:
mode:
authorNicolas Gaullier <nicolas.gaullier@cji.paris>2021-09-10 11:34:08 +0200
committerJames Almer <jamrial@gmail.com>2021-09-23 10:35:08 -0300
commitfad459b5a6461bf2ce2c232d5e251dd486bbdc0d (patch)
tree1f80b640860467229dc1fffacdfef4d5377d5593 /libavcodec/h264_parser.c
parent447cf537746cd9969674ebbd60411b6093603c59 (diff)
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.c11
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 */