mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-24 00:02:52 +00: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:
parent
904ab5365c
commit
003b5c800f
@ -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
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user