mirror of
				https://github.com/nyanmisaka/ffmpeg-rockchip.git
				synced 2025-10-31 20:42:49 +08:00 
			
		
		
		
	avformat/argo_asf: implement seeking
Causes some error as the ADPCM predictors aren't known, but the difference is negligible and not audible. Signed-off-by: Zane van Iperen <zane@zanevaniperen.com>
This commit is contained in:
		| @@ -238,12 +238,34 @@ static int argo_asf_read_packet(AVFormatContext *s, AVPacket *pkt) | ||||
|  | ||||
|     pkt->stream_index   = st->index; | ||||
|     pkt->duration       = asf->ckhdr.num_samples * (ret / st->codecpar->block_align); | ||||
|     pkt->pts            = asf->blocks_read * asf->ckhdr.num_samples; | ||||
|     asf->blocks_read   += (ret / st->codecpar->block_align); | ||||
|  | ||||
|     pkt->flags &= ~AV_PKT_FLAG_CORRUPT; | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static int argo_asf_seek(AVFormatContext *s, int stream_index, | ||||
|                          int64_t pts, int flags) | ||||
| { | ||||
|     ArgoASFDemuxContext *asf = s->priv_data; | ||||
|     AVStream *st             = s->streams[stream_index]; | ||||
|     int64_t offset; | ||||
|     uint32_t block = pts / asf->ckhdr.num_samples; | ||||
|  | ||||
|     if (block >= asf->ckhdr.num_blocks) | ||||
|         return -1; | ||||
|  | ||||
|     offset = asf->fhdr.chunk_offset + ASF_CHUNK_HEADER_SIZE + | ||||
|              (block * st->codecpar->block_align); | ||||
|  | ||||
|     if ((offset = avio_seek(s->pb, offset, SEEK_SET)) < 0) | ||||
|         return offset; | ||||
|  | ||||
|     asf->blocks_read = block; | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| /* | ||||
|  * Not actually sure what ASF stands for. | ||||
|  * - Argonaut Sound File? | ||||
| @@ -255,7 +277,8 @@ AVInputFormat ff_argo_asf_demuxer = { | ||||
|     .priv_data_size = sizeof(ArgoASFDemuxContext), | ||||
|     .read_probe     = argo_asf_probe, | ||||
|     .read_header    = argo_asf_read_header, | ||||
|     .read_packet    = argo_asf_read_packet | ||||
|     .read_packet    = argo_asf_read_packet, | ||||
|     .read_seek      = argo_asf_seek, | ||||
| }; | ||||
| #endif | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Zane van Iperen
					Zane van Iperen