Signed-off-by: Zane van Iperen <z...@zanevaniperen.com> --- libavformat/argo_asf.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-)
diff --git a/libavformat/argo_asf.c b/libavformat/argo_asf.c index b1632f3ba5..deb64f7b1c 100644 --- a/libavformat/argo_asf.c +++ b/libavformat/argo_asf.c @@ -26,6 +26,9 @@ #include "libavutil/opt.h" #include "argo_asf.h" +/* Maximum number of blocks to read at once. */ +#define ASF_NB_BLOCKS 32 + typedef struct ArgoASFDemuxContext { ArgoASFFileHeader fhdr; ArgoASFChunkHeader ckhdr; @@ -125,12 +128,10 @@ int ff_argo_asf_fill_stream(AVStream *st, const ArgoASFFileHeader *fhdr, * (nchannel control bytes) + ((bytes_per_channel) * nchannel) * For mono, this is 17. For stereo, this is 34. */ - st->codecpar->frame_size = st->codecpar->channels + + st->codecpar->block_align = st->codecpar->channels + (ckhdr->num_samples / 2) * st->codecpar->channels; - st->codecpar->block_align = st->codecpar->frame_size; - st->codecpar->bit_rate = st->codecpar->channels * st->codecpar->sample_rate * st->codecpar->bits_per_coded_sample; @@ -221,15 +222,21 @@ static int argo_asf_read_packet(AVFormatContext *s, AVPacket *pkt) if (asf->blocks_read >= asf->ckhdr.num_blocks) return AVERROR_EOF; - if ((ret = av_get_packet(pb, pkt, st->codecpar->frame_size)) < 0) + ret = av_get_packet(pb, pkt, st->codecpar->block_align * + FFMIN(ASF_NB_BLOCKS, asf->ckhdr.num_blocks - asf->blocks_read)); + if (ret < 0) return ret; - else if (ret != st->codecpar->frame_size) + + /* Something real screwy is going on. */ + if (ret % st->codecpar->block_align != 0) return AVERROR_INVALIDDATA; + pkt->stream_index = st->index; - pkt->duration = asf->ckhdr.num_samples; + pkt->duration = asf->ckhdr.num_samples * (ret / st->codecpar->block_align); + asf->blocks_read += (ret / st->codecpar->block_align); - ++asf->blocks_read; + pkt->flags &= ~AV_PKT_FLAG_CORRUPT; return 0; } -- 2.25.4 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".