Vladimir Pantelic wrote:

atm the asf logic is:

if( index_exists ) {
        index = search_by_index()       
        if( index<  0 ) {
                return -1;
        }
        // index success
} else {
        try binary search
        ...
}

maybe it should be:

if( index_exists ) {
        index = search_by_index()       
        if( index>= 0 ) {
                // index success
                ...
                return ...;
        }
}
// no index or index search fail, try binary
try binary search
...

patch attached
>From 15f02f4decb7fa1a330bd322f001bcf744183064 Mon Sep 17 00:00:00 2001
From: Vladimir Pantelic <vlado...@gmail.com>
Date: Thu, 12 May 2011 10:21:19 +0200
Subject: [PATCH] make asfdec fallback to binary search internally

lavf will do that anyway in case seek by index fails
---
 libavformat/asfdec.c |   15 ++++++++-------
 1 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/libavformat/asfdec.c b/libavformat/asfdec.c
index 77c8449..e2161fd 100644
--- a/libavformat/asfdec.c
+++ b/libavformat/asfdec.c
@@ -1269,21 +1269,22 @@ static int asf_read_seek(AVFormatContext *s, int stream_index, int64_t pts, int
     if (!asf->index_read)
         asf_build_simple_index(s, stream_index);
 
-    if(!(asf->index_read && st->index_entries)){
-        if(av_seek_frame_binary(s, stream_index, pts, flags)<0)
-            return -1;
-    }else{
+    if((asf->index_read && st->index_entries)){
         index= av_index_search_timestamp(st, pts, flags);
-        if(index<0)
-            return -1;
-
+        if(index >= 0) {
         /* find the position */
         pos = st->index_entries[index].pos;
 
         /* do the seek */
         av_log(s, AV_LOG_DEBUG, "SEEKTO: %"PRId64"\n", pos);
         avio_seek(s->pb, pos, SEEK_SET);
+        asf_reset_header(s);
+        return 0;
+        }
     }
+    /* no index or seeking by index failed */
+    if(av_seek_frame_binary(s, stream_index, pts, flags)<0)
+        return -1;
     asf_reset_header(s);
     return 0;
 }
-- 
1.6.0.2

_______________________________________________
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to