1 Index: libavformat/avidec.c
2 ===================================================================
3 --- ffmpeg.orig/libavformat/avidec.c (revision 22950)
4 +++ ffmpeg/libavformat/avidec.c (working copy)
6 AVIContext *avi = s->priv_data;
10 + int64_t pos, min_pos;
13 if (!avi->index_loaded) {
19 for(i = 0; i < s->nb_streams; i++) {
20 AVStream *st2 = s->streams[i];
21 AVIStream *ast2 = st2->priv_data;
22 @@ -1129,10 +1130,20 @@
25 if(!avi->non_interleaved){
26 - while(index>0 && st2->index_entries[index].pos > pos)
28 - while(index+1 < st2->nb_index_entries && st2->index_entries[index].pos < pos)
30 + if (flags & AVSEEK_FLAG_BACKWARD) {
31 + while(index+1 < st2->nb_index_entries && st2->index_entries[index].pos < pos)
33 + while(index>0 && st2->index_entries[index].pos > pos)
35 + if (st2->index_entries[index].pos < min_pos)
36 + min_pos = st2->index_entries[index].pos;
39 + while(index>0 && st2->index_entries[index].pos > pos)
41 + while(index+1 < st2->nb_index_entries && st2->index_entries[index].pos < pos)
46 // av_log(s, AV_LOG_DEBUG, "%"PRId64" %d %"PRId64"\n", timestamp, index, st2->index_entries[index].timestamp);
51 - url_fseek(s->pb, pos, SEEK_SET);
52 + url_fseek(s->pb, min_pos, SEEK_SET);
53 avi->stream_index= -1;