aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2012-01-05 00:49:02 +0100
committerMichael Niedermayer <michaelni@gmx.at>2012-01-05 01:06:12 +0100
commit0a5bca957d0d6ee9e77150dc5a20038c178d5282 (patch)
tree974e9a3538525553a34024d071e26e1d7df4d3a5
parent0f61521f69c13b0fa1d884bf8e850f45469331db (diff)
downloadffmpeg-0a5bca957d0d6ee9e77150dc5a20038c178d5282.tar.gz
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 <michaelni@gmx.at> (cherry picked from commit ad8e3304f701820f927527d8f0d11679738636df) Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--libavformat/utils.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/libavformat/utils.c b/libavformat/utils.c
index fe67d005c7..b0d1ec3c0c 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -2499,8 +2499,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;
}