OSDN Git Service

avformat/utils: av_guess_frame_rate() favor avg_frame_rate if r_frame_rate has a...
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 19 Feb 2014 17:20:13 +0000 (18:20 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 19 Feb 2014 17:40:27 +0000 (18:40 +0100)
Fixes Ticket3399
Fixes Ticket2958

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavformat/utils.c

index e859ad2..c4d09e9 100644 (file)
@@ -4325,10 +4325,16 @@ AVRational av_guess_sample_aspect_ratio(AVFormatContext *format, AVStream *strea
 AVRational av_guess_frame_rate(AVFormatContext *format, AVStream *st, AVFrame *frame)
 {
     AVRational fr = st->r_frame_rate;
+    AVRational codec_fr = av_inv_q(st->codec->time_base);
+    AVRational   avg_fr = st->avg_frame_rate;
+
+    if (avg_fr.num > 0 && avg_fr.den > 0 && fr.num > 0 && fr.den > 0 &&
+        av_q2d(avg_fr) < 70 && av_q2d(fr) > 210) {
+        fr = avg_fr;
+    }
+
 
     if (st->codec->ticks_per_frame > 1) {
-        AVRational codec_fr = av_inv_q(st->codec->time_base);
-        AVRational   avg_fr = st->avg_frame_rate;
         codec_fr.den *= st->codec->ticks_per_frame;
         if (   codec_fr.num > 0 && codec_fr.den > 0 && av_q2d(codec_fr) < av_q2d(fr)*0.7
             && fabs(1.0 - av_q2d(av_div_q(avg_fr, fr))) > 0.1)