From ad8e3304f701820f927527d8f0d11679738636df Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Thu, 5 Jan 2012 00:49:02 +0100 Subject: [PATCH] lavf: use avg_frame_rate and packet number to exit find_stream_info qatar does this too but clobbers the AVPacket.duration by approximate values. Signed-off-by: Michael Niedermayer --- libavformat/utils.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/libavformat/utils.c b/libavformat/utils.c index 73f24eff8f..84dfd6a8bc 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -2510,8 +2510,13 @@ int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options) st = ic->streams[pkt->stream_index]; if (st->codec_info_nb_frames>1) { - int64_t t; - if (st->time_base.den > 0 && (t=av_rescale_q(st->info->codec_info_duration, st->time_base, AV_TIME_BASE_Q)) >= ic->max_analyze_duration) { + int64_t t=0; + if (st->time_base.den > 0) + t = av_rescale_q(st->info->codec_info_duration, st->time_base, AV_TIME_BASE_Q); + if (st->avg_frame_rate.num > 0) + t = FFMAX(t, av_rescale_q(st->codec_info_nb_frames, (AVRational){st->avg_frame_rate.den, st->avg_frame_rate.num}, AV_TIME_BASE_Q)); + + if (t >= ic->max_analyze_duration) { av_log(ic, AV_LOG_WARNING, "max_analyze_duration %d reached at %"PRId64"\n", ic->max_analyze_duration, t); break; }