Commit 09450c55 authored by Michael Niedermayer's avatar Michael Niedermayer

avcodec/h264: fix time_base and framerate

They are not just inverses of each other.
This should restore behavior to before the introduction of framerate
Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent 620e7f0f
...@@ -688,10 +688,10 @@ av_cold int ff_h264_decode_init(AVCodecContext *avctx) ...@@ -688,10 +688,10 @@ av_cold int ff_h264_decode_init(AVCodecContext *avctx)
ff_h264_reset_sei(h); ff_h264_reset_sei(h);
if (avctx->codec_id == AV_CODEC_ID_H264) { if (avctx->codec_id == AV_CODEC_ID_H264) {
if (avctx->ticks_per_frame == 1) { if (avctx->ticks_per_frame == 1) {
if(h->avctx->framerate.num < INT_MAX/2) { if(h->avctx->time_base.den < INT_MAX/2) {
h->avctx->framerate.num *= 2; h->avctx->time_base.den *= 2;
} else } else
h->avctx->framerate.den /= 2; h->avctx->time_base.num /= 2;
} }
avctx->ticks_per_frame = 2; avctx->ticks_per_frame = 2;
} }
......
...@@ -490,6 +490,8 @@ static int h264_parse(AVCodecParserContext *s, ...@@ -490,6 +490,8 @@ static int h264_parse(AVCodecParserContext *s,
parse_nal_units(s, avctx, buf, buf_size); parse_nal_units(s, avctx, buf, buf_size);
if (avctx->framerate.num)
avctx->time_base = av_inv_q(av_mul_q(avctx->framerate, (AVRational){avctx->ticks_per_frame, 1}));
if (h->sei_cpb_removal_delay >= 0) { if (h->sei_cpb_removal_delay >= 0) {
s->dts_sync_point = h->sei_buffering_period_present; s->dts_sync_point = h->sei_buffering_period_present;
s->dts_ref_dts_delta = h->sei_cpb_removal_delay; s->dts_ref_dts_delta = h->sei_cpb_removal_delay;
......
...@@ -1171,7 +1171,7 @@ static int h264_slice_header_init(H264Context *h, int reinit) ...@@ -1171,7 +1171,7 @@ static int h264_slice_header_init(H264Context *h, int reinit)
if (h->x264_build < 44U) if (h->x264_build < 44U)
den *= 2; den *= 2;
av_reduce(&h->avctx->framerate.den, &h->avctx->framerate.num, av_reduce(&h->avctx->framerate.den, &h->avctx->framerate.num,
h->sps.num_units_in_tick, den, 1 << 30); h->sps.num_units_in_tick * h->avctx->ticks_per_frame, den, 1 << 30);
} }
if (reinit) if (reinit)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment