Workaround broken AVI files from DC-XZ6.
authorMichael Niedermayer <michaelni@gmx.at>
Mon, 25 May 2009 18:28:26 +0000 (18:28 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Mon, 25 May 2009 18:28:26 +0000 (18:28 +0000)
Fixes issue897.

Originally committed as revision 18942 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavformat/avidec.c

index 671a27b..10f9417 100644 (file)
@@ -955,19 +955,30 @@ static int guess_ni_flag(AVFormatContext *s){
     int i;
     int64_t last_start=0;
     int64_t first_end= INT64_MAX;
+    int64_t oldpos= url_ftell(s->pb);
 
     for(i=0; i<s->nb_streams; i++){
         AVStream *st = s->streams[i];
         int n= st->nb_index_entries;
+        unsigned int size;
 
         if(n <= 0)
             continue;
 
+        if(n >= 2){
+            int64_t pos= st->index_entries[0].pos;
+            url_fseek(s->pb, pos + 4, SEEK_SET);
+            size= get_le32(s->pb);
+            if(pos + size > st->index_entries[1].pos)
+                last_start= INT64_MAX;
+        }
+
         if(st->index_entries[0].pos > last_start)
             last_start= st->index_entries[0].pos;
         if(st->index_entries[n-1].pos < first_end)
             first_end= st->index_entries[n-1].pos;
     }
+    url_fseek(s->pb, oldpos, SEEK_SET);
     return last_start > first_end;
 }