+static int wv_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
+{
+ AVStream *st = s->streams[stream_index];
+ WVContext *wc = s->priv_data;
+ AVPacket pkt1, *pkt = &pkt1;
+ int ret;
+ int index = av_index_search_timestamp(st, timestamp, flags);
+ int64_t pos, pts;
+
+ /* if found, seek there */
+ if (index >= 0){
+ wc->block_parsed = 1;
+ url_fseek(&s->pb, st->index_entries[index].pos, SEEK_SET);
+ return 0;
+ }
+ /* if timestamp is out of bounds, return error */
+ if(timestamp < 0 || timestamp >= s->duration)
+ return -1;
+
+ pos = url_ftell(&s->pb);
+ do{
+ ret = av_read_frame(s, pkt);
+ if (ret < 0){
+ url_fseek(&s->pb, pos, SEEK_SET);
+ return -1;
+ }
+ pts = pkt->pts;
+ av_free_packet(pkt);
+ }while(pts < timestamp);
+ return 0;
+}
+