[FFmpeg-devel] [PATCH 3/5] avformat/argo_asf: read multiple blocks at once
Zane van Iperen
zane at zanevaniperen.com
Wed Sep 16 10:39:14 EEST 2020
Signed-off-by: Zane van Iperen <zane at 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
More information about the ffmpeg-devel
mailing list