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 <[email protected]> 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 [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
