avidec: parse INFO tags at the end
Fixes Ticket1123 Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
21eafa18e6
commit
a80ce390df
@ -1376,16 +1376,19 @@ static int avi_load_index(AVFormatContext *s)
|
||||
AVIOContext *pb = s->pb;
|
||||
uint32_t tag, size;
|
||||
int64_t pos= avio_tell(pb);
|
||||
int64_t next;
|
||||
int ret = -1;
|
||||
|
||||
if (avio_seek(pb, avi->movi_end, SEEK_SET) < 0)
|
||||
goto the_end; // maybe truncated file
|
||||
av_dlog(s, "movi_end=0x%"PRIx64"\n", avi->movi_end);
|
||||
for(;;) {
|
||||
if (url_feof(pb))
|
||||
break;
|
||||
tag = avio_rl32(pb);
|
||||
size = avio_rl32(pb);
|
||||
if (url_feof(pb))
|
||||
break;
|
||||
next = avio_tell(pb) + size + (size & 1);
|
||||
|
||||
av_dlog(s, "tag=%c%c%c%c size=0x%x\n",
|
||||
tag & 0xff,
|
||||
(tag >> 8) & 0xff,
|
||||
@ -1397,11 +1400,15 @@ static int avi_load_index(AVFormatContext *s)
|
||||
avi_read_idx1(s, size) >= 0) {
|
||||
avi->index_loaded=2;
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
}else if(tag == MKTAG('L', 'I', 'S', 'T')) {
|
||||
uint32_t tag1 = avio_rl32(pb);
|
||||
|
||||
size += (size & 1);
|
||||
if (avio_skip(pb, size) < 0)
|
||||
if (tag1 == MKTAG('I', 'N', 'F', 'O'))
|
||||
ff_read_riff_info(s, size - 4);
|
||||
}else if(!ret)
|
||||
break;
|
||||
|
||||
if (avio_seek(pb, next, SEEK_SET) < 0)
|
||||
break; // something is wrong here
|
||||
}
|
||||
the_end:
|
||||
|
Loading…
x
Reference in New Issue
Block a user