Commit 3102d180 authored by Michael Niedermayer's avatar Michael Niedermayer

Fix large timebases.

Fixed issue1633

Originally committed as revision 21636 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent ed3e9148
...@@ -1781,11 +1781,11 @@ static int decode_slice_header(H264Context *h, H264Context *h0){ ...@@ -1781,11 +1781,11 @@ static int decode_slice_header(H264Context *h, H264Context *h0){
} }
if(h->sps.timing_info_present_flag){ if(h->sps.timing_info_present_flag){
s->avctx->time_base= (AVRational){h->sps.num_units_in_tick, h->sps.time_scale}; int64_t den= h->sps.time_scale;
if(h->x264_build > 0 && h->x264_build < 44) if(h->x264_build > 0 && h->x264_build < 44)
s->avctx->time_base.den *= 2; den *= 2;
av_reduce(&s->avctx->time_base.num, &s->avctx->time_base.den, av_reduce(&s->avctx->time_base.num, &s->avctx->time_base.den,
s->avctx->time_base.num, s->avctx->time_base.den, 1<<30); h->sps.num_units_in_tick, den, 1<<30);
} }
s->avctx->pix_fmt = s->avctx->get_format(s->avctx, s->avctx->codec->pix_fmts); s->avctx->pix_fmt = s->avctx->get_format(s->avctx, s->avctx->codec->pix_fmts);
s->avctx->hwaccel = ff_find_hwaccel(s->avctx->codec->id, s->avctx->pix_fmt); s->avctx->hwaccel = ff_find_hwaccel(s->avctx->codec->id, s->avctx->pix_fmt);
......
...@@ -176,7 +176,7 @@ static inline int decode_vui_parameters(H264Context *h, SPS *sps){ ...@@ -176,7 +176,7 @@ static inline int decode_vui_parameters(H264Context *h, SPS *sps){
if(sps->timing_info_present_flag){ if(sps->timing_info_present_flag){
sps->num_units_in_tick = get_bits_long(&s->gb, 32); sps->num_units_in_tick = get_bits_long(&s->gb, 32);
sps->time_scale = get_bits_long(&s->gb, 32); sps->time_scale = get_bits_long(&s->gb, 32);
if(sps->num_units_in_tick-1 > 0x7FFFFFFEU || sps->time_scale-1 > 0x7FFFFFFEU){ if(!sps->num_units_in_tick || !sps->time_scale){
av_log(h->s.avctx, AV_LOG_ERROR, "time_scale/num_units_in_tick invalid or unsupported (%d/%d)\n", sps->time_scale, sps->num_units_in_tick); av_log(h->s.avctx, AV_LOG_ERROR, "time_scale/num_units_in_tick invalid or unsupported (%d/%d)\n", sps->time_scale, sps->num_units_in_tick);
return -1; return -1;
} }
......
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