From patchwork Thu Aug 27 22:48:35 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul B Mahol X-Patchwork-Id: 21954 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 0CD9A449E7F for ; Fri, 28 Aug 2020 01:48:58 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D3DE268AB96; Fri, 28 Aug 2020 01:48:57 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ed1-f66.google.com (mail-ed1-f66.google.com [209.85.208.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0945F68A9D5 for ; Fri, 28 Aug 2020 01:48:52 +0300 (EEST) Received: by mail-ed1-f66.google.com with SMTP id v8so6371367edl.7 for ; Thu, 27 Aug 2020 15:48:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=wYbO5hecRPZ2hSQ8YUmHldAxyRMormsodrjEps3XmRo=; b=mGiaxOkoadWIsjat6+Ey/jI1U/Wwx+TmGNzxwF3akJvvmtIUAkzapKvtpLFAEgDYIT ZQgzWLifi+9sORaDdd+sk8TmnujWA2XG97QZguy4EV5/WdqTh1NCk6hSFIiOlL+wiPeI YiFNwvWPtDGZI7L3FIyzJSvipuUF3kNpY1q4VLmfHqZkGCvRE/ER+cF7bgIDax5IbWtP k/j03pUEwkrbVv/sA6FTkfRJZT8OdWyCrZBmGPaYrAfpGclmqF+SfqSQRX042q6E9LSK gTvxLP/CWYRa0C7unKmXgsa0mwq8o6Bv2XSQFuLrEZF19SqnRT8aEqz1yncuVRVViaZt ErwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=wYbO5hecRPZ2hSQ8YUmHldAxyRMormsodrjEps3XmRo=; b=IxXfGia/t4GQOfit5dpz1fZXIY7UejU9o8J0LlYGEJrPsfpTgX7+hzdBBZqkMrseRD MOv2GM8aDHSkpxYXJHjGEEf4laUPLbP4Eb1x4qeKsR1Vm+2Qwlaz743ZHtrSRf+T5a+W REZXGMI7rygwH1Zm/V/iZ5H7M+Xh3RbrEh6i3c8kJw0YEUC4nFK25eahPahF9J1xWgAk ygXig2XBk4qPbL7I2Uf3DtfpzuJWixPnJCSep8S8KhmJcmkC9puranbvDz/e+W0nA2jD WKxUnQqVXN1AcWnbUkM0B9LU8pQG1382azR0cqsLAjrRDPogTGWMIm2LrO42zx5bBMGo QpSA== X-Gm-Message-State: AOAM532yqd3h/K74vIKHMTodbM9Vj2Q0nBuA5rJ3UNWOvUI0bZB3Z2kd TqbuB5WCrEwemFB3QHCUQD4vLeR4kuZkhA== X-Google-Smtp-Source: ABdhPJw/wL6hyXNpcgAwkjWkKuO1d6/q1108Blj7xv5uc5vwwIaRXxSESLLMXkrIXZByQ1F0Jd7ZfQ== X-Received: by 2002:aa7:c60a:: with SMTP id h10mr18560451edq.140.1598568531214; Thu, 27 Aug 2020 15:48:51 -0700 (PDT) Received: from localhost.localdomain ([94.250.163.64]) by smtp.gmail.com with ESMTPSA id i35sm2455640edi.41.2020.08.27.15.48.50 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 27 Aug 2020 15:48:50 -0700 (PDT) From: Paul B Mahol To: ffmpeg-devel@ffmpeg.org Date: Fri, 28 Aug 2020 00:48:35 +0200 Message-Id: <20200827224835.5358-1-onemda@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200827223738.2615-1-onemda@gmail.com> References: <20200827223738.2615-1-onemda@gmail.com> Subject: [FFmpeg-devel] [PATCH] avformat/wavdec: add support for demuxing Broadcast Wave 64Bit 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Paul B Mahol --- libavformat/wavdec.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/libavformat/wavdec.c b/libavformat/wavdec.c index c35966f970..e1b2115434 100644 --- a/libavformat/wavdec.c +++ b/libavformat/wavdec.c @@ -6,6 +6,8 @@ * RF64 demuxer * Copyright (c) 2009 Daniel Verkamp * + * BW64 demuxer + * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or @@ -140,7 +142,8 @@ static int wav_probe(const AVProbeData *p) * its own, the returned score is decreased to avoid a probe * conflict between ACT and WAV. */ return AVPROBE_SCORE_MAX - 1; - else if (!memcmp(p->buf, "RF64", 4) && + else if ((!memcmp(p->buf, "RF64", 4) || + !memcmp(p->buf, "BW64", 4)) && !memcmp(p->buf + 12, "ds64", 4)) return AVPROBE_SCORE_MAX; } @@ -330,7 +333,7 @@ static int wav_read_header(AVFormatContext *s) { int64_t size, av_uninit(data_size); int64_t sample_count = 0; - int rf64 = 0; + int rf64 = 0, bw64 = 0; uint32_t tag; AVIOContext *pb = s->pb; AVStream *st = NULL; @@ -353,6 +356,9 @@ static int wav_read_header(AVFormatContext *s) case MKTAG('R', 'F', '6', '4'): rf64 = 1; break; + case MKTAG('B', 'W', '6', '4'): + bw64 = 1; + break; default: av_log(s, AV_LOG_ERROR, "invalid start code %s in RIFF header\n", av_fourcc2str(tag)); @@ -368,7 +374,7 @@ static int wav_read_header(AVFormatContext *s) return AVERROR_INVALIDDATA; } - if (rf64) { + if (rf64 || bw64) { if (avio_rl32(pb) != MKTAG('d', 's', '6', '4')) return AVERROR_INVALIDDATA; size = avio_rl32(pb); @@ -423,7 +429,7 @@ static int wav_read_header(AVFormatContext *s) return AVERROR_INVALIDDATA; } - if (rf64) { + if (rf64 || bw64) { next_tag_ofs = wav->data_end = avio_tell(pb) + data_size; } else if (size != 0xFFFFFFFF) { data_size = size; @@ -440,7 +446,7 @@ static int wav_read_header(AVFormatContext *s) /* don't look for footer metadata if we can't seek or if we don't * know where the data tag ends */ - if (!(pb->seekable & AVIO_SEEKABLE_NORMAL) || (!rf64 && !size)) + if (!(pb->seekable & AVIO_SEEKABLE_NORMAL) || (!(rf64 && !bw64) && !size)) goto break_loop; break; case MKTAG('f', 'a', 'c', 't'):