# HG changeset patch # User michael # Date 1265297437 0 # Node ID 4a95670ed5f12328cf53eb970b9907c8a95a8658 # Parent 2663fdcdb7694277c0a2a8d1ca985b96100bbdd5 Fix large timebases. Fixed issue1633 diff -r 2663fdcdb769 -r 4a95670ed5f1 h264.c --- a/h264.c Thu Feb 04 14:26:57 2010 +0000 +++ b/h264.c Thu Feb 04 15:30:37 2010 +0000 @@ -1781,11 +1781,11 @@ } 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) - s->avctx->time_base.den *= 2; + den *= 2; 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->hwaccel = ff_find_hwaccel(s->avctx->codec->id, s->avctx->pix_fmt); diff -r 2663fdcdb769 -r 4a95670ed5f1 h264_ps.c --- a/h264_ps.c Thu Feb 04 14:26:57 2010 +0000 +++ b/h264_ps.c Thu Feb 04 15:30:37 2010 +0000 @@ -176,7 +176,7 @@ if(sps->timing_info_present_flag){ sps->num_units_in_tick = 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); return -1; }