Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZane van Iperen <zane@zanevaniperen.com>2020-09-19 05:35:42 +0300
committerZane van Iperen <zane@zanevaniperen.com>2020-09-20 12:20:53 +0300
commit101ac40f69c51605347fa2b7f5c76481592acd28 (patch)
tree68300cfd4ef421fcbf394314289a1cff82c5fb60 /libavformat/argo_asf.c
parentef29e5bf42660396daa624bed58e88378326d478 (diff)
avformat/argo_asf: fix enforcement of chunk count
Enforcing num_chunks == 1 only makes sense when demuxing from an ASF file. When embedded in a BRP file, an ASF stream can have multiple chunks. Signed-off-by: Zane van Iperen <zane@zanevaniperen.com>
Diffstat (limited to 'libavformat/argo_asf.c')
-rw-r--r--libavformat/argo_asf.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/libavformat/argo_asf.c b/libavformat/argo_asf.c
index 048e5441d6..eb0c18601d 100644
--- a/libavformat/argo_asf.c
+++ b/libavformat/argo_asf.c
@@ -59,11 +59,6 @@ int ff_argo_asf_validate_file_header(AVFormatContext *s, const ArgoASFFileHeader
if (hdr->magic != ASF_TAG || hdr->num_chunks == 0)
return AVERROR_INVALIDDATA;
- if (hdr->num_chunks > 1) {
- avpriv_request_sample(s, ">1 chunk");
- return AVERROR_PATCHWELCOME;
- }
-
if (hdr->chunk_offset < ASF_FILE_HEADER_SIZE)
return AVERROR_INVALIDDATA;
@@ -139,8 +134,12 @@ int ff_argo_asf_fill_stream(AVStream *st, const ArgoASFFileHeader *fhdr,
avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate);
st->start_time = 0;
- st->duration = ckhdr->num_blocks * ckhdr->num_samples;
- st->nb_frames = ckhdr->num_blocks;
+
+ if (fhdr->num_chunks == 1) {
+ st->duration = ckhdr->num_blocks * ckhdr->num_samples;
+ st->nb_frames = ckhdr->num_blocks;
+ }
+
return 0;
}
@@ -199,6 +198,10 @@ static int argo_asf_read_header(AVFormatContext *s)
if ((ret = ff_argo_asf_validate_file_header(s, &asf->fhdr)) < 0)
return ret;
+ /* This should only be 1 in ASF files. >1 is fine if in BRP. */
+ if (asf->fhdr.num_chunks != 1)
+ return AVERROR_INVALIDDATA;
+
if ((ret = avio_skip(pb, asf->fhdr.chunk_offset - ASF_FILE_HEADER_SIZE)) < 0)
return ret;