set wrong_dts for iMovie created files which has huge ctts delay, fix ffmpeg_sample.m4v
authorBaptiste Coudurier <baptiste.coudurier@gmail.com>
Wed, 25 Mar 2009 06:07:13 +0000 (06:07 +0000)
committerBaptiste Coudurier <baptiste.coudurier@gmail.com>
Wed, 25 Mar 2009 06:07:13 +0000 (06:07 +0000)
Originally committed as revision 18181 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavformat/mov.c

index 0f17c6e..5dd7928 100644 (file)
@@ -1281,6 +1281,12 @@ static void mov_build_index(MOVContext *mov, AVStream *st)
         int rescaled = sc->time_offset < 0 ? av_rescale(sc->time_offset, sc->time_scale, mov->time_scale) : sc->time_offset;
         assert(sc->time_offset % sc->time_rate == 0);
         current_dts = - (rescaled / sc->time_rate);
+        if (sc->ctts_data && sc->ctts_data[0].duration / sc->stts_data[0].duration > 16) {
+            /* more than 16 frames delay, dts are likely wrong
+               this happens with files created by iMovie */
+            sc->wrong_dts = 1;
+            st->codec->has_b_frames = 1;
+        }
     }
 
     /* only use old uncompressed audio chunk demuxing when stts specifies it */