| 
				
				
					
				
				
				 | 
			
			 | 
			@@ -296,6 +296,7 @@ static int wv_read_packet(AVFormatContext *s, AVPacket *pkt) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    pkt->stream_index = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    pkt->pos          = pos; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    wc->block_parsed  = 1; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    pkt->pts          = wc->header.block_idx; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    block_samples     = wc->header.samples; | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -305,41 +306,6 @@ static int wv_read_packet(AVFormatContext *s, AVPacket *pkt) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    else | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        pkt->duration = block_samples; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    av_add_index_entry(s->streams[0], pos, pkt->pts, 0, 0, AVINDEX_KEYFRAME); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			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 && | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        timestamp <= st->index_entries[st->nb_index_entries - 1].timestamp) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        wc->block_parsed = 1; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        avio_seek(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 AVERROR(EINVAL); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    pos = avio_tell(s->pb); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    do { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        ret = av_read_frame(s, pkt); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (ret < 0) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            avio_seek(s->pb, pos, SEEK_SET); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return ret; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        pts = pkt->pts; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        av_free_packet(pkt); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } while(pts < timestamp); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -350,5 +316,5 @@ AVInputFormat ff_wv_demuxer = { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .read_probe     = wv_probe, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .read_header    = wv_read_header, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .read_packet    = wv_read_packet, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .read_seek      = wv_read_seek, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    .flags          = AVFMT_GENERIC_INDEX, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			}; |