mirror of
				https://github.com/nyanmisaka/ffmpeg-rockchip.git
				synced 2025-10-31 12:36:41 +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->stream_index   = st->index; | ||||||
|     pkt->duration       = asf->ckhdr.num_samples * (ret / st->codecpar->block_align); |     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); |     asf->blocks_read   += (ret / st->codecpar->block_align); | ||||||
|  |  | ||||||
|     pkt->flags &= ~AV_PKT_FLAG_CORRUPT; |     pkt->flags &= ~AV_PKT_FLAG_CORRUPT; | ||||||
|     return 0; |     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. |  * Not actually sure what ASF stands for. | ||||||
|  * - Argonaut Sound File? |  * - Argonaut Sound File? | ||||||
| @@ -255,7 +277,8 @@ AVInputFormat ff_argo_asf_demuxer = { | |||||||
|     .priv_data_size = sizeof(ArgoASFDemuxContext), |     .priv_data_size = sizeof(ArgoASFDemuxContext), | ||||||
|     .read_probe     = argo_asf_probe, |     .read_probe     = argo_asf_probe, | ||||||
|     .read_header    = argo_asf_read_header, |     .read_header    = argo_asf_read_header, | ||||||
|     .read_packet    = argo_asf_read_packet |     .read_packet    = argo_asf_read_packet, | ||||||
|  |     .read_seek      = argo_asf_seek, | ||||||
| }; | }; | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Zane van Iperen
					Zane van Iperen