|
|
|
@ -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; |
|
|
|
|
} |
|
|
|
|