From 52e5461288ba54d2bbeb76bba863ae6d970ce90d Mon Sep 17 00:00:00 2001
From: Michael Niedermayer <michaelni@gmx.at>
Date: Wed, 23 Aug 2006 20:24:58 +0000
Subject: [PATCH] fix fallback if theres no index fix index less seeking

Originally committed as revision 6055 to svn://svn.ffmpeg.org/ffmpeg/trunk
---
 libavformat/asf.c | 7 ++++---
 libavformat/asf.h | 1 +
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/libavformat/asf.c b/libavformat/asf.c
index 587c1394106..000308576c0 100644
--- a/libavformat/asf.c
+++ b/libavformat/asf.c
@@ -823,7 +823,7 @@ static int64_t asf_read_pts(AVFormatContext *s, int stream_index, int64_t *ppos,
             assert((asf_st->packet_pos - s->data_offset) % asf->packet_size == 0);
             pos= asf_st->packet_pos;
 
-            av_add_index_entry(s->streams[i], pos, pkt->size, pts, pos - start_pos[i] + 1, AVINDEX_KEYFRAME);
+            av_add_index_entry(s->streams[i], pos, pts, pkt->size, pos - start_pos[i] + 1, AVINDEX_KEYFRAME);
             start_pos[i]= asf_st->packet_pos + 1;
 
             if(pkt->stream_index == stream_index)
@@ -868,6 +868,7 @@ static void asf_build_simple_index(AVFormatContext *s, int stream_index)
 
             av_add_index_entry(s->streams[stream_index], pos, index_pts, asf->packet_size, 0, AVINDEX_KEYFRAME);
         }
+        asf->index_read= 1;
     }
     url_fseek(&s->pb, current_pos, SEEK_SET);
 }
@@ -882,10 +883,10 @@ static int asf_read_seek(AVFormatContext *s, int stream_index, int64_t pts, int
     if (asf->packet_size <= 0)
         return -1;
 
-    if (!st->index_entries)
+    if (!asf->index_read)
         asf_build_simple_index(s, stream_index);
 
-    if(!st->index_entries){
+    if(!(asf->index_read && st->index_entries)){
         if(av_seek_frame_binary(s, stream_index, pts, flags)<0)
             return -1;
     }else{
diff --git a/libavformat/asf.h b/libavformat/asf.h
index 476a089d569..5f0bf9adfc1 100644
--- a/libavformat/asf.h
+++ b/libavformat/asf.h
@@ -100,6 +100,7 @@ typedef struct {
     uint64_t data_offset; /* begining of the first data packet */
     uint64_t data_object_offset; /* data object offset (excl. GUID & size)*/
     uint64_t data_object_size;   /* size of the data object */
+    int index_read;
 
     ASFMainHeader hdr;
 
-- 
GitLab