| 
				
				
					
				
				
				 | 
			
			 | 
			@@ -757,18 +757,23 @@ static int viv_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    for (int i = 0; i < viv->n_sb_blocks; i++) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (frame >= viv->sb_blocks[i].packet_offset && frame < viv->sb_blocks[i].packet_offset + viv->sb_blocks[i].n_packets) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            // flush audio packet queue | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            viv->current_audio_subpacket = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            viv->n_audio_subpackets = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            viv->current_sb = i; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            // seek to ith sb block | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            avio_seek(s->pb, viv->sb_offset + viv->sb_blocks[i].byte_offset, SEEK_SET); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            // load the block | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            load_sb_block(s, viv, 0); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            // most problematic part: guess audio offset | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            viv->audio_sample = av_rescale_q(viv->sb_blocks[i].packet_offset, av_make_q(s->streams[1]->codecpar->sample_rate, 1), av_inv_q(s->streams[0]->time_base)); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            // hand-tuned 1.s a/v offset | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            viv->audio_sample += s->streams[1]->codecpar->sample_rate; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            if (viv->num_audio) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                const AVCodecParameters *par = s->streams[1]->codecpar; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                // flush audio packet queue | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                viv->current_audio_subpacket = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                viv->n_audio_subpackets      = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                // most problematic part: guess audio offset | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                viv->audio_sample = av_rescale_q(viv->sb_blocks[i].packet_offset, | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                 av_make_q(par->sample_rate, 1), | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                                                 av_inv_q(s->streams[0]->time_base)); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                // hand-tuned 1.s a/v offset | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                viv->audio_sample += par->sample_rate; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            viv->current_sb_entry = 0; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            return 1; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
	
		
			
				| 
				
					
				
				
				
				 | 
			
			 | 
			
  |