diff --git a/libavformat/avidec.c b/libavformat/avidec.c index 05602d8bc15a7b61ea487d9fe6d417fb650e1b4d..345d0921d985e3fa29dc9752c63bc275480ae8ab 100644 --- a/libavformat/avidec.c +++ b/libavformat/avidec.c @@ -236,7 +236,7 @@ static int read_braindead_odml_indx(AVFormatContext *s, int frame_num){ } } - avi->index_loaded=1; + avi->index_loaded=2; return 0; } @@ -756,7 +756,7 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) if(!avi->index_loaded && pb->seekable) avi_load_index(s); - avi->index_loaded = 1; + avi->index_loaded |= 1; avi->non_interleaved |= guess_ni_flag(s) | (s->flags & AVFMT_FLAG_SORT_DTS); for(i=0; i<s->nb_streams; i++){ AVStream *st = s->streams[i]; @@ -1181,7 +1181,7 @@ resync: } ast->seek_pos= 0; - if(!avi->non_interleaved && st->nb_index_entries>1){ + if(!avi->non_interleaved && st->nb_index_entries>1 && avi->index_loaded>1){ int64_t dts= av_rescale_q(pkt->dts, st->time_base, AV_TIME_BASE_Q); if(avi->dts_max - dts > 2*AV_TIME_BASE){ @@ -1317,6 +1317,7 @@ static int avi_load_index(AVFormatContext *s) if (tag == MKTAG('i', 'd', 'x', '1') && avi_read_idx1(s, size) >= 0) { + avi->index_loaded=2; ret = 0; break; } @@ -1351,7 +1352,7 @@ static int avi_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp if (!avi->index_loaded) { /* we only load the index on demand */ avi_load_index(s); - avi->index_loaded = 1; + avi->index_loaded |= 1; } assert(stream_index>= 0);