1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-23 12:43:46 +02:00

Workaround broken AVI files from DC-XZ6.

Fixes issue897.

Originally committed as revision 18942 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Michael Niedermayer 2009-05-25 18:28:26 +00:00
parent 80704c47c4
commit 8c68f25b20

View File

@ -955,19 +955,30 @@ static int guess_ni_flag(AVFormatContext *s){
int i; int i;
int64_t last_start=0; int64_t last_start=0;
int64_t first_end= INT64_MAX; int64_t first_end= INT64_MAX;
int64_t oldpos= url_ftell(s->pb);
for(i=0; i<s->nb_streams; i++){ for(i=0; i<s->nb_streams; i++){
AVStream *st = s->streams[i]; AVStream *st = s->streams[i];
int n= st->nb_index_entries; int n= st->nb_index_entries;
unsigned int size;
if(n <= 0) if(n <= 0)
continue; 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) if(st->index_entries[0].pos > last_start)
last_start= st->index_entries[0].pos; last_start= st->index_entries[0].pos;
if(st->index_entries[n-1].pos < first_end) if(st->index_entries[n-1].pos < first_end)
first_end= st->index_entries[n-1].pos; first_end= st->index_entries[n-1].pos;
} }
url_fseek(s->pb, oldpos, SEEK_SET);
return last_start > first_end; return last_start > first_end;
} }