From patchwork Sat Sep 26 02:38:45 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zane van Iperen X-Patchwork-Id: 22594 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 5BFBA44B3D5 for ; Sat, 26 Sep 2020 05:38:58 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2C9B168AAFD; Sat, 26 Sep 2020 05:38:58 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-40133.protonmail.ch (mail-40133.protonmail.ch [185.70.40.133]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CA090689C54 for ; Sat, 26 Sep 2020 05:38:51 +0300 (EEST) Date: Sat, 26 Sep 2020 02:38:45 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=zanevaniperen.com; s=protonmail2; t=1601087930; bh=m8fZe/nxpNYV9IvTyLtRmqq/tNz77/t837AJTRqsRy0=; h=Date:To:From:Cc:Reply-To:Subject:From; b=CV2DS6bf08gV+BGXx0cucQ7tnR5wTJjoUY566/5d1NYxLyo4ktdi0KatY5joxBMb+ 2NRuHqOCMwAGZOmq950VAJIm1vf6lv1YoKNoYbQ4uU6WQm+PMW/k5nyq9cLEpXZEdH m0D9AZ+utU+wqsXnkifsH3mg1Jfw8WBRo7ldSxYZoI5RrqkD0mOUsqiuaJhmZdqeHi i/VlE4/t7c8yedd+efZB5mTGQWOkTb/1VmIu+XRr5jBenVXi6UVBIQ3CJ455kFv2ji E+jbiqqfWvOcurMBY35ALPdU9dKA3k5ygh9rZXQnBfDe6V5aA0xygKEjnM5YcxS32w z5tRYTSTxiEIg== To: ffmpeg-devel@ffmpeg.org From: Zane van Iperen Message-ID: <20200926023817.7891-1-zane@zanevaniperen.com> MIME-Version: 1.0 X-Spam-Status: No, score=-1.2 required=10.0 tests=ALL_TRUSTED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF shortcircuit=no autolearn=disabled version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on mailout.protonmail.ch Subject: [FFmpeg-devel] [PATCH 1/6] avformat/argo_{asf, brp}: fix potential segfault in ff_argo_asf_fill_stream() X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Zane van Iperen Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Zane van Iperen --- libavformat/argo_asf.c | 10 +++++----- libavformat/argo_asf.h | 2 +- libavformat/argo_brp.c | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/libavformat/argo_asf.c b/libavformat/argo_asf.c index de941caeac..8e2bf21c71 100644 --- a/libavformat/argo_asf.c +++ b/libavformat/argo_asf.c @@ -75,17 +75,17 @@ void ff_argo_asf_parse_chunk_header(ArgoASFChunkHeader *hdr, const uint8_t *buf) hdr->flags = AV_RL32(buf + 16); } -int ff_argo_asf_fill_stream(AVStream *st, const ArgoASFFileHeader *fhdr, +int ff_argo_asf_fill_stream(AVFormatContext *s, AVStream *st, const ArgoASFFileHeader *fhdr, const ArgoASFChunkHeader *ckhdr) { if (ckhdr->num_samples != ASF_SAMPLE_COUNT) { - av_log(st, AV_LOG_ERROR, "Invalid sample count. Got %u, expected %d\n", + av_log(s, AV_LOG_ERROR, "Invalid sample count. Got %u, expected %d\n", ckhdr->num_samples, ASF_SAMPLE_COUNT); return AVERROR_INVALIDDATA; } if ((ckhdr->flags & ASF_CF_ALWAYS1) != ASF_CF_ALWAYS1 || (ckhdr->flags & ASF_CF_ALWAYS0) != 0) { - avpriv_request_sample(st, "Nonstandard flags (0x%08X)", ckhdr->flags); + avpriv_request_sample(s, "Nonstandard flags (0x%08X)", ckhdr->flags); return AVERROR_PATCHWELCOME; } @@ -116,7 +116,7 @@ int ff_argo_asf_fill_stream(AVStream *st, const ArgoASFFileHeader *fhdr, if (st->codecpar->bits_per_raw_sample != 16) { /* The header allows for these, but I've never seen any files with them. */ - avpriv_request_sample(st, "Non 16-bit samples"); + avpriv_request_sample(s, "Non 16-bit samples"); return AVERROR_PATCHWELCOME; } @@ -212,7 +212,7 @@ static int argo_asf_read_header(AVFormatContext *s) ff_argo_asf_parse_chunk_header(&asf->ckhdr, buf); - return ff_argo_asf_fill_stream(st, &asf->fhdr, &asf->ckhdr); + return ff_argo_asf_fill_stream(s, st, &asf->fhdr, &asf->ckhdr); } static int argo_asf_read_packet(AVFormatContext *s, AVPacket *pkt) diff --git a/libavformat/argo_asf.h b/libavformat/argo_asf.h index eb2669a63f..e65125fb79 100644 --- a/libavformat/argo_asf.h +++ b/libavformat/argo_asf.h @@ -65,7 +65,7 @@ enum { void ff_argo_asf_parse_file_header(ArgoASFFileHeader *hdr, const uint8_t *buf); int ff_argo_asf_validate_file_header(AVFormatContext *s, const ArgoASFFileHeader *hdr); void ff_argo_asf_parse_chunk_header(ArgoASFChunkHeader *hdr, const uint8_t *buf); -int ff_argo_asf_fill_stream(AVStream *st, const ArgoASFFileHeader *fhdr, +int ff_argo_asf_fill_stream(AVFormatContext *s, AVStream *st, const ArgoASFFileHeader *fhdr, const ArgoASFChunkHeader *ckhdr); #endif /* AVFORMAT_ARGO_ASF_H */ diff --git a/libavformat/argo_brp.c b/libavformat/argo_brp.c index c417818639..a60de59f64 100644 --- a/libavformat/argo_brp.c +++ b/libavformat/argo_brp.c @@ -289,7 +289,7 @@ static int argo_brp_read_header(AVFormatContext *s) ff_argo_asf_parse_chunk_header(&brp->basf.ckhdr, buf); - if ((ret = ff_argo_asf_fill_stream(st, &hdr->extradata.basf, &brp->basf.ckhdr)) < 0) + if ((ret = ff_argo_asf_fill_stream(s, st, &hdr->extradata.basf, &brp->basf.ckhdr)) < 0) return ret; /* Convert ms to samples. */ From patchwork Sat Sep 26 02:38:52 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zane van Iperen X-Patchwork-Id: 22595 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 947A044B3E8 for ; Sat, 26 Sep 2020 05:39:08 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 74C2568AD4C; Sat, 26 Sep 2020 05:39:08 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail2.protonmail.ch (mail2.protonmail.ch [185.70.40.22]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D1EB268ACEC for ; Sat, 26 Sep 2020 05:39:02 +0300 (EEST) Date: Sat, 26 Sep 2020 02:38:52 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=zanevaniperen.com; s=protonmail2; t=1601087942; bh=N7GD8VBhEMGiC6BXFVRjRRiqRJUkr/g/rbEAIECf2nc=; h=Date:To:From:Cc:Reply-To:Subject:In-Reply-To:References:From; b=B/DJ10F1SWlr7+70PhvPKdD9/R/wWxG2viS/X67YbaBFco2hhrOxy3y2Z0hI8VTZk V7yVjxnKS5joboN52Vt1hsIy+qzruJ7+uj0R5ncmirj9wTV44R9ymffMt8rEv9FKco Uqu/v/w7DBhbYonI7KL/lTo6zq9uLVldoXQvHXZuSIK02GkrnioRcXeIRDUvoCbHbc yHfFObp1IYxR+H5ImPEYrPOJhEAn7lhomRWX5uXYpQciu6MvPHTD8uroekOKlkJppO ec0JFjvWuBysotjW0blfDnZ4wJ5vVxdIsx9Abo85yynFjCJKrpZIx90YhjoFWZRrjV PCR51admNzPkw== To: ffmpeg-devel@ffmpeg.org From: Zane van Iperen Message-ID: <20200926023817.7891-2-zane@zanevaniperen.com> In-Reply-To: <20200926023817.7891-1-zane@zanevaniperen.com> References: <20200926023817.7891-1-zane@zanevaniperen.com> MIME-Version: 1.0 X-Spam-Status: No, score=-1.2 required=10.0 tests=ALL_TRUSTED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF shortcircuit=no autolearn=disabled version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on mailout.protonmail.ch Subject: [FFmpeg-devel] [PATCH 2/6] avformat/argo_brp: support MASK streams X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Zane van Iperen Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" We can't actually use them though. Signed-off-by: Zane van Iperen --- libavformat/argo_brp.c | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/libavformat/argo_brp.c b/libavformat/argo_brp.c index a60de59f64..613f04aef2 100644 --- a/libavformat/argo_brp.c +++ b/libavformat/argo_brp.c @@ -33,13 +33,16 @@ #define BRP_STREAM_HEADER_SIZE 20 #define BRP_MAX_STREAMS 32 /* Soft cap, but even this is overkill. */ #define BVID_HEADER_SIZE 16 -#define BRP_MIN_BUFFER_SIZE FFMAX(FFMAX3(BRP_FILE_HEADER_SIZE, \ +#define MASK_HEADER_SIZE 12 +#define BRP_MIN_BUFFER_SIZE FFMAX3(FFMAX3(BRP_FILE_HEADER_SIZE, \ BRP_BLOCK_HEADER_SIZE, \ BRP_STREAM_HEADER_SIZE), \ - BVID_HEADER_SIZE) + BVID_HEADER_SIZE, \ + MASK_HEADER_SIZE) #define BRP_CODEC_ID_BVID MKTAG('B', 'V', 'I', 'D') #define BRP_CODEC_ID_BASF MKTAG('B', 'A', 'S', 'F') +#define BRP_CODEC_ID_MASK MKTAG('M', 'A', 'S', 'K') typedef struct ArgoBRPFileHeader { uint32_t magic; @@ -60,6 +63,12 @@ typedef struct ArgoBVIDHeader { uint32_t depth; } ArgoBVIDHeader; +typedef struct ArgoMASKHeader { + uint32_t num_frames; + uint32_t width; + uint32_t height; +} ArgoMASKHeader; + typedef struct ArgoBRPStreamHeader { uint32_t codec_id; uint32_t id; @@ -72,6 +81,8 @@ typedef struct ArgoBRPStreamHeader { ArgoBVIDHeader bvid; /* If codec_id == BRP_CODEC_ID_BASF */ ArgoASFFileHeader basf; + /* If codec_id == BRP_CODEC_ID_MASK */ + ArgoMASKHeader mask; } extradata; } ArgoBRPStreamHeader; @@ -106,6 +117,9 @@ static int read_extradata(AVFormatContext *s, const ArgoBRPStreamHeader *hdr, } else if (hdr->codec_id == BRP_CODEC_ID_BASF) { name = "BASF"; size = ASF_FILE_HEADER_SIZE; + } else if (hdr->codec_id == BRP_CODEC_ID_MASK) { + name = "MASK"; + size = MASK_HEADER_SIZE; } else { avpriv_request_sample(s, "BRP codec id 0x%x", hdr->codec_id); @@ -240,7 +254,16 @@ static int argo_brp_read_header(AVFormatContext *s) if ((ret = ff_argo_asf_validate_file_header(s, &hdr->extradata.basf)) < 0) return ret; + } else if (hdr->codec_id == BRP_CODEC_ID_MASK) { + ArgoMASKHeader *mask = &hdr->extradata.mask; + + st->codecpar->codec_type = AVMEDIA_TYPE_DATA; + + mask->num_frames = AV_RL32(buf + 0); + mask->width = AV_RL32(buf + 4); + mask->height = AV_RL32(buf + 8); + st->nb_frames = mask->num_frames; } else { av_assert0(0); /* Caught above, should never happen. */ } From patchwork Sat Sep 26 02:39:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zane van Iperen X-Patchwork-Id: 22596 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id AA53F44B3E8 for ; Sat, 26 Sep 2020 05:39:16 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8CF5668AEBC; Sat, 26 Sep 2020 05:39:16 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-40136.protonmail.ch (mail-40136.protonmail.ch [185.70.40.136]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 468D5689AA2 for ; Sat, 26 Sep 2020 05:39:10 +0300 (EEST) Date: Sat, 26 Sep 2020 02:39:00 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=zanevaniperen.com; s=protonmail2; t=1601087949; bh=Nkknyk2ZmLMAEZ41D9xK7BLBK0+vIYmFybtIIOisDqw=; h=Date:To:From:Cc:Reply-To:Subject:In-Reply-To:References:From; b=SAbUWzSghRrKDO8VHMMYXapQO2E+86sA16xeQB0gH5Z97ajzQXJunFtn3GAPoZah/ qTKqY4xszzMEC7lljcGzWYhGD3Y8K4O824KiRwnsgeA0YrGRU8y0mgu5Xlv16qaUJu 6B7hDpEB2zTPJGFeoDjnJ8PMOxbNSLe/6l7WXa7HztcnXgTbOTgT+b9n9KOpVQVbb6 5B/JrPeU5dE64p1Qdwx+Bs4JyBrWrQZ1YoaXbNE6JOopwpiBKfaSC0yHdyq+EfsdqR Dg5LPtKcLpSC4jeKQP25pwu668olLUIm1QtRRy5ZQEHgXO8ch4VJa3fpjeOUn+Wt9h +jbeCKrigzPRw== To: ffmpeg-devel@ffmpeg.org From: Zane van Iperen Message-ID: <20200926023817.7891-3-zane@zanevaniperen.com> In-Reply-To: <20200926023817.7891-1-zane@zanevaniperen.com> References: <20200926023817.7891-1-zane@zanevaniperen.com> MIME-Version: 1.0 X-Spam-Status: No, score=-1.2 required=10.0 tests=ALL_TRUSTED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF shortcircuit=no autolearn=disabled version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on mailout.protonmail.ch Subject: [FFmpeg-devel] [PATCH 3/6] avformat/argo_brp: handle the case where the BASF block isn't the first X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Zane van Iperen Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Zane van Iperen --- libavformat/argo_brp.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/libavformat/argo_brp.c b/libavformat/argo_brp.c index 613f04aef2..d3aab92af0 100644 --- a/libavformat/argo_brp.c +++ b/libavformat/argo_brp.c @@ -32,6 +32,7 @@ #define BRP_BLOCK_HEADER_SIZE 12 #define BRP_STREAM_HEADER_SIZE 20 #define BRP_MAX_STREAMS 32 /* Soft cap, but even this is overkill. */ +#define BRP_BASF_LOOKAHEAD 10 /* How many blocks to search for the first BASF one. */ #define BVID_HEADER_SIZE 16 #define MASK_HEADER_SIZE 12 #define BRP_MIN_BUFFER_SIZE FFMAX3(FFMAX3(BRP_FILE_HEADER_SIZE, \ @@ -269,16 +270,13 @@ static int argo_brp_read_header(AVFormatContext *s) } } - /* - * This is nasty. BASF streams have their chunk header in each block, - * so the first one needs to be read to get the stream info. It should - * always be the first one. - */ + /* Try to find the first BASF chunk. */ if (brp->basf.index >= 0) { AVStream *st = s->streams[brp->basf.index]; ArgoBRPStreamHeader *hdr = brp->streams + brp->basf.index; ArgoBRPBlockHeader blk; int64_t offset; + int i; av_assert0(st->codecpar->codec_id == AV_CODEC_ID_ADPCM_ARGO); av_assert0(brp->streams[brp->basf.index].extradata_size == ASF_FILE_HEADER_SIZE); @@ -288,6 +286,9 @@ static int argo_brp_read_header(AVFormatContext *s) offset = ret; + av_log(s, AV_LOG_TRACE, "Searching %d blocks for BASF...", BRP_BASF_LOOKAHEAD); + + for (i = 0; i < BRP_BASF_LOOKAHEAD; i++) { if ((ret = avio_read(pb, buf, BRP_BLOCK_HEADER_SIZE)) < 0) return ret; else if (ret != BRP_BLOCK_HEADER_SIZE) @@ -297,11 +298,21 @@ static int argo_brp_read_header(AVFormatContext *s) blk.start_ms = AV_RL32(buf + 4); blk.size = AV_RL32(buf + 8); - if (blk.stream_id != brp->basf.index) { - avpriv_request_sample(s, "first block not BASF"); - return AVERROR_PATCHWELCOME; + if (blk.stream_id == brp->basf.index || blk.stream_id == -1) + break; + + if ((ret = avio_skip(pb, blk.size)) < 0) + return ret; + } + + if (i == BRP_BASF_LOOKAHEAD || blk.stream_id == -1) { + /* Don't error here, as there may still be a valid video stream. */ + av_log(s, AV_LOG_TRACE, "not found\n"); + goto done; } + av_log(s, AV_LOG_TRACE, "found at index %d\n", i); + if (blk.size < ASF_CHUNK_HEADER_SIZE) return AVERROR_INVALIDDATA; @@ -319,6 +330,7 @@ static int argo_brp_read_header(AVFormatContext *s) st->start_time = av_rescale_rnd(blk.start_ms, st->codecpar->sample_rate, 1000, AV_ROUND_UP); st->duration = av_rescale_rnd(hdr->duration_ms, st->codecpar->sample_rate, 1000, AV_ROUND_UP); +done: if ((ret = avio_seek(s->pb, offset, SEEK_SET)) < 0) return ret; } From patchwork Sat Sep 26 02:39:08 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zane van Iperen X-Patchwork-Id: 22597 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id B794A44B3E8 for ; Sat, 26 Sep 2020 05:39:22 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 996DA68AF26; Sat, 26 Sep 2020 05:39:22 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-40134.protonmail.ch (mail-40134.protonmail.ch [185.70.40.134]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9F04368ACEC for ; Sat, 26 Sep 2020 05:39:16 +0300 (EEST) Date: Sat, 26 Sep 2020 02:39:08 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=zanevaniperen.com; s=protonmail2; t=1601087955; bh=9e9wNsZN+FRX+AzQoKJdgKvY8tvtacQjLb2VsJ99geI=; h=Date:To:From:Cc:Reply-To:Subject:In-Reply-To:References:From; b=k2TaYmcsPwbSlfL6ffjYvw7WpDt9fCM/LdL/j9MC6fGPhq0/Ka6tjpfw8fCG213I8 yWZ/wU+Usln6vn2FPe1ozFk5QEiRkaIEj5XcH37m8f3QHxyIyy/Jg02MetrYNrCdRL A/2oG4aYbC+/lrRuOjP3kgSfeooxennwNtJ8d8PMVeo5nsWJKysIs97Xw2Mkblkp87 ilCXtn9i9XgWajhfQUhj1dufrh+rs6RnoBHVzQrqnajo7HRMchSFT6hdah9SQVPAZt U112dIHpc+w8/wY077yTtODOYKojpn6mVUos7roz41GINPDz5cLxylirAx7ZUai4dI 0OHSRVXiVl9Lw== To: ffmpeg-devel@ffmpeg.org From: Zane van Iperen Message-ID: <20200926023817.7891-4-zane@zanevaniperen.com> In-Reply-To: <20200926023817.7891-1-zane@zanevaniperen.com> References: <20200926023817.7891-1-zane@zanevaniperen.com> MIME-Version: 1.0 X-Spam-Status: No, score=-1.2 required=10.0 tests=ALL_TRUSTED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF shortcircuit=no autolearn=disabled version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on mailout.protonmail.ch Subject: [FFmpeg-devel] [PATCH 4/6] avformat/argo_brp: cosmetics X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Zane van Iperen Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Zane van Iperen --- libavformat/argo_brp.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/libavformat/argo_brp.c b/libavformat/argo_brp.c index d3aab92af0..4041183011 100644 --- a/libavformat/argo_brp.c +++ b/libavformat/argo_brp.c @@ -36,8 +36,8 @@ #define BVID_HEADER_SIZE 16 #define MASK_HEADER_SIZE 12 #define BRP_MIN_BUFFER_SIZE FFMAX3(FFMAX3(BRP_FILE_HEADER_SIZE, \ - BRP_BLOCK_HEADER_SIZE, \ - BRP_STREAM_HEADER_SIZE), \ + BRP_BLOCK_HEADER_SIZE, \ + BRP_STREAM_HEADER_SIZE), \ BVID_HEADER_SIZE, \ MASK_HEADER_SIZE) @@ -289,14 +289,14 @@ static int argo_brp_read_header(AVFormatContext *s) av_log(s, AV_LOG_TRACE, "Searching %d blocks for BASF...", BRP_BASF_LOOKAHEAD); for (i = 0; i < BRP_BASF_LOOKAHEAD; i++) { - if ((ret = avio_read(pb, buf, BRP_BLOCK_HEADER_SIZE)) < 0) - return ret; - else if (ret != BRP_BLOCK_HEADER_SIZE) - return AVERROR(EIO); + if ((ret = avio_read(pb, buf, BRP_BLOCK_HEADER_SIZE)) < 0) + return ret; + else if (ret != BRP_BLOCK_HEADER_SIZE) + return AVERROR(EIO); - blk.stream_id = AV_RL32(buf + 0); - blk.start_ms = AV_RL32(buf + 4); - blk.size = AV_RL32(buf + 8); + blk.stream_id = AV_RL32(buf + 0); + blk.start_ms = AV_RL32(buf + 4); + blk.size = AV_RL32(buf + 8); if (blk.stream_id == brp->basf.index || blk.stream_id == -1) break; From patchwork Sat Sep 26 02:39:16 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zane van Iperen X-Patchwork-Id: 22598 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id A13A144B3E8 for ; Sat, 26 Sep 2020 05:39:26 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8464A68B497; Sat, 26 Sep 2020 05:39:26 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-40131.protonmail.ch (mail-40131.protonmail.ch [185.70.40.131]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 552FB68B31D for ; Sat, 26 Sep 2020 05:39:25 +0300 (EEST) Date: Sat, 26 Sep 2020 02:39:16 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=zanevaniperen.com; s=protonmail2; t=1601087964; bh=BKGot589Kf2bo6XQcWkH5USt8dWnWcT+oQT8J+pghSA=; h=Date:To:From:Cc:Reply-To:Subject:From; b=j3f33Ow9CU7PbKBbYHWb1m9slB325gh7gVlm0BMQa4+Bzz6D5LT+mf5+KYu5hSgcL hfWdzcLEz9EpWL3kDwBeH2OMF21daHKNzrZpGPzp7ZZ0OUwpK3XsQlajLuR15QqynF /JjTuTd0D1REUOEbFuE7eOLhX+c0hzBIYSAVTVztoeuRdi/L5rX06BLZt6e9tGUHK5 s81KYzh8stCFquTwair2zXE89HwAh2O73HiG8qyasXwPeM0av80UK1lsNm1Tq+C7CF TK9smath3pDVNFmswM/pXnk9Au9MKKPnpllFdDsFweqge9mYkrxSoEzdrg3BHC8SW/ 3Gr9QHruleSNg== To: ffmpeg-devel@ffmpeg.org From: Zane van Iperen Message-ID: <20200926023817.7891-5-zane@zanevaniperen.com> MIME-Version: 1.0 X-Spam-Status: No, score=-1.2 required=10.0 tests=ALL_TRUSTED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF shortcircuit=no autolearn=disabled version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on mailout.protonmail.ch Subject: [FFmpeg-devel] [PATCH 5/6] avformat/argo_brp: allow v1.1 ASF streams to have a non-22050 sample rate in certain circumstances X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Zane van Iperen Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" It seems that in files where the BASF block isn't first, v1.1 ASF streams are allowed to be non-22050. Either this format is really inconsistent, or FX Fighter and Croc just ignored the sample rate field, requiring the v1.1 restriction in the first place. This bumps the version to 1.2 in these streams so they're not "corrected". Found in Alien Odyssey games files in: ./GRAPHICS/COMMBUNK/{{COMADD1,COMM2_{1,2,3E},COMM3_{2,3,4,5,6}},FADE{1,2}}.BRP Signed-off-by: Zane van Iperen --- libavformat/argo_brp.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/libavformat/argo_brp.c b/libavformat/argo_brp.c index 4041183011..af64a0d6dc 100644 --- a/libavformat/argo_brp.c +++ b/libavformat/argo_brp.c @@ -323,6 +323,20 @@ static int argo_brp_read_header(AVFormatContext *s) ff_argo_asf_parse_chunk_header(&brp->basf.ckhdr, buf); + /* + * Special Case Hack. It seems that in files where the BASF block isn't first, + * v1.1 streams are allowed to be non-22050... + * Bump the version to 1.2 so ff_argo_asf_fill_stream() doesn't "correct" it. + * + * Found in Alien Odyssey games files in: + * ./GRAPHICS/COMMBUNK/{{COMADD1,COMM2_{1,2,3E},COMM3_{2,3,4,5,6}},FADE{1,2}}.BRP + * + * Either this format really inconsistent, or FX Fighter and Croc just ignored the + * sample rate field... + */ + if (i != 0 && hdr->extradata.basf.version_major == 1 && hdr->extradata.basf.version_minor == 1) + hdr->extradata.basf.version_minor = 2; + if ((ret = ff_argo_asf_fill_stream(s, st, &hdr->extradata.basf, &brp->basf.ckhdr)) < 0) return ret; From patchwork Sat Sep 26 02:39:25 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zane van Iperen X-Patchwork-Id: 22599 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 73119448F0E for ; Sat, 26 Sep 2020 05:39:39 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5976268B5EE; Sat, 26 Sep 2020 05:39:39 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail2.protonmail.ch (mail2.protonmail.ch [185.70.40.22]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 40FC068B5B0 for ; Sat, 26 Sep 2020 05:39:38 +0300 (EEST) Date: Sat, 26 Sep 2020 02:39:25 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=zanevaniperen.com; s=protonmail2; t=1601087977; bh=4akLTv+CV2a1MjFrF0rKospjZEsf9jApTAXQURhvOho=; h=Date:To:From:Cc:Reply-To:Subject:From; b=yxC3VK2SznIOrzB+RqJT7AQVm9Bjp1KNVGbDnoA6+ppCvLjtDZh2gDo00mhFOycyc yg7xoYQKB9R/rRThn3/mxywFFKhEINxpY+Jx/jrkw7zFUofNPsViqVavXJ26SqFBZa tmssw80fgyt2hyNzHdVqxU6qfXrORtjlo+NZKAMw0GCnLDNrltvk3g3NVwQP2LIEDE 78g92AVM7XV98pmoE3XM35oUQh04bHicD9ryDGMGu0Sl1xWHuU0C6z3wM/3ZgCaGjG GePr+HP+Smy7toegyXbfIv8IwZvOzJ1n4BENt6jgEq+lgrpTJAHMTA2G7ZxBgpXWDo DRyyJ/yUHnMNA== To: ffmpeg-devel@ffmpeg.org From: Zane van Iperen Message-ID: <20200926023817.7891-6-zane@zanevaniperen.com> MIME-Version: 1.0 X-Spam-Status: No, score=-1.2 required=10.0 tests=ALL_TRUSTED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF shortcircuit=no autolearn=disabled version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on mailout.protonmail.ch Subject: [FFmpeg-devel] [PATCH 6/6] avformat/argo_brp: use header frame counts X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Zane van Iperen Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Zane van Iperen --- libavformat/argo_brp.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libavformat/argo_brp.c b/libavformat/argo_brp.c index af64a0d6dc..76b4da2e66 100644 --- a/libavformat/argo_brp.c +++ b/libavformat/argo_brp.c @@ -237,6 +237,8 @@ static int argo_brp_read_header(AVFormatContext *s) avpriv_request_sample(s, "depth == %u", bvid->depth); return AVERROR_PATCHWELCOME; } + + st->nb_frames = bvid->num_frames; } else if (hdr->codec_id == BRP_CODEC_ID_BASF) { /* * It would make the demuxer significantly more complicated @@ -255,6 +257,8 @@ static int argo_brp_read_header(AVFormatContext *s) if ((ret = ff_argo_asf_validate_file_header(s, &hdr->extradata.basf)) < 0) return ret; + + st->nb_frames = hdr->extradata.basf.num_chunks; } else if (hdr->codec_id == BRP_CODEC_ID_MASK) { ArgoMASKHeader *mask = &hdr->extradata.mask;