From 8945ebb9c1fa4ae0f734676adcb7d519d4e6664b Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Wed, 1 Mar 2006 16:11:04 +0000 Subject: fixing av sync in videotest.avi (index doesnt match chunks, header doesnt indicate that) Originally committed as revision 5088 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/avidec.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'libavformat') diff --git a/libavformat/avidec.c b/libavformat/avidec.c index 8f321fadc9..b3c96211ca 100644 --- a/libavformat/avidec.c +++ b/libavformat/avidec.c @@ -87,6 +87,7 @@ static int get_riff(AVIContext *avi, ByteIOContext *pb) } static int read_braindead_odml_indx(AVFormatContext *s, int frame_num){ + AVIContext *avi = s->priv_data; ByteIOContext *pb = &s->pb; int longs_pre_entry= get_le16(pb); int index_sub_type = get_byte(pb); @@ -98,6 +99,7 @@ static int read_braindead_odml_indx(AVFormatContext *s, int frame_num){ AVStream *st; AVIStream *ast; int i; + int64_t last_pos= -1; // av_log(s, AV_LOG_ERROR, "longs_pre_entry:%d index_type:%d entries_in_use:%d chunk_id:%X base:%Ld\n", // longs_pre_entry,index_type, entries_in_use, chunk_id, base); @@ -125,12 +127,16 @@ static int read_braindead_odml_indx(AVFormatContext *s, int frame_num){ len &= 0x7FFFFFFF; //av_log(s, AV_LOG_ERROR, "pos:%Ld, len:%X\n", pos, len); - av_add_index_entry(st, pos, ast->cum_len, len, 0, key ? AVINDEX_KEYFRAME : 0); + if(last_pos == pos || pos == base - 8) + avi->non_interleaved= 1; + else + av_add_index_entry(st, pos, ast->cum_len, len, 0, key ? AVINDEX_KEYFRAME : 0); if(ast->sample_size) ast->cum_len += len / ast->sample_size; else ast->cum_len ++; + last_pos= pos; }else{ int64_t offset= get_le64(pb); int size = get_le32(pb); -- cgit v1.2.3