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:
parent
447cf53774
commit
fad459b5a6
3 changed files with 139 additions and 128 deletions
|
|
@ -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 */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue