From 115e8ae5779262449e16b8d8d79b46c48b836daf Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Wed, 1 Mar 2006 15:42:07 +0000 Subject: [PATCH] support seeking in RenderAvi.avi (audio stream == single huge chunk) Originally committed as revision 5087 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/avidec.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/libavformat/avidec.c b/libavformat/avidec.c index aee27ec506..8f321fadc9 100644 --- a/libavformat/avidec.c +++ b/libavformat/avidec.c @@ -147,6 +147,31 @@ static int read_braindead_odml_indx(AVFormatContext *s, int frame_num){ return 0; } +static void clean_index(AVFormatContext *s){ + int i, j; + + for(i=0; inb_streams; i++){ + AVStream *st = s->streams[i]; + AVIStream *ast = st->priv_data; + int n= st->nb_index_entries; + int max= ast->sample_size; + int64_t pos, size, ts; + + if(n != 1 || ast->sample_size==0) + continue; + + while(max < 1024) max+=max; + + pos= st->index_entries[0].pos; + size= st->index_entries[0].size; + ts= st->index_entries[0].timestamp; + + for(j=0; jsample_size, FFMIN(max, size-j), 0, AVINDEX_KEYFRAME); + } + } +} + static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) { AVIContext *avi = s->priv_data; @@ -419,6 +444,8 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap) avi_load_index(s); avi->index_loaded = 1; avi->non_interleaved |= guess_ni_flag(s); + if(avi->non_interleaved) + clean_index(s); return 0; }