From patchwork Tue May 21 09:02:19 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Timo Rothenpieler X-Patchwork-Id: 49097 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:3a48:b0:1af:fc2d:ff5a with SMTP id zu8csp5097794pzb; Tue, 21 May 2024 02:06:13 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUYkcShje/b4D6h3/XcjmZpsIBzGsv3jwYT5i66px05bOorD7aWU+QDBhR7v/Nk3Atso9Hcb+AxFPVw+FvcEJD0qV3jfXnvTPHGbw== X-Google-Smtp-Source: AGHT+IFP8Vx7eBSvL/fBcOz8MqTZhqakZtukyO3PbVvoob1Kg4yY4DEA+LuPnyV/8TpWNwhWAyEe X-Received: by 2002:a50:d61c:0:b0:56e:2f39:c5d2 with SMTP id 4fb4d7f45d1cf-5767de62f93mr4801866a12.7.1716282373199; Tue, 21 May 2024 02:06:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1716282373; cv=none; d=google.com; s=arc-20160816; b=n2Z2hX6wurNBEzsaqJtRpg0hDsbYh+oHU3ZfBugoS/tV2GEudROC7FlTJzI5Jnb2XM YNAN3q9prtU+WMTrFIhdGIajKQbMS2DDWVDic/SnWKtb8ROLcAYRSbqbODMEs8w0LtaB +J9b9DkvGldVDCdKyfI7Czla4b3mJl8onCszg3xAVWyFLFimhJcbQMGeyzPgcYg9mNQm qcGBAIeGPkSJSyQxfJjkXjReZF1JNLTRYlW79l2DxEceeu0eb+iMuwMYuuutAkotX/VQ Ye/KGET4rnSi+isMH+liWLdrmOFlPhGnSoUlrI6EpXWyuOLCK9vwkTP1jkSWp5UEInKP 3znw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=MdXTY4e+RgSq7MuJVGREEIRf3fzecGsoTn3vCj5T+Cg=; fh=LnlYe9qYwgML7nWWXqAumr7YCmPjjpEPjQf6GasgJC0=; b=lGYx04P91cPzDSCQ7K8B2irJEPBQkoe6M0EUeq78kOaiRtCstlFTp6lizZ0T9RNfzk sgi1aBZHXLXCfzvxTOMxspZQsRbUlhJQ4L+T1AwGEnjNZE/YqFvwt/lRnGoiW3rN09AG vPusMuSPIhfLOq1YwlL1VjmQKn7Su+GVuUmOzcrH7jrab59Vn/Ar857cw97v8E4H1d7K OgdwRRuw7uVgqFN75wqHcSmnbcy7twtag9hNrlNiilgoIuebQJwNtGzop8bO2R239Kgi XJs/xEO3PCYWcE1316NbVPhhtznIEvqD3is2UKb2oEVj1bu8cTyTk0IGAbVE0yqa657N YzXw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@rothenpieler.org header.s=mail header.b=hTCelBSo; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=rothenpieler.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 4fb4d7f45d1cf-5733bec099fsi13583449a12.144.2024.05.21.02.06.12; Tue, 21 May 2024 02:06:13 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@rothenpieler.org header.s=mail header.b=hTCelBSo; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=rothenpieler.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4729968D321; Tue, 21 May 2024 12:04:00 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from btbn.de (btbn.de [144.76.60.213]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6E94C68D3B3 for ; Tue, 21 May 2024 12:03:43 +0300 (EEST) Received: from [authenticated] by btbn.de (Postfix) with ESMTPSA id 46BE227FFD2B6; Tue, 21 May 2024 11:03:39 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rothenpieler.org; s=mail; t=1716282219; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=crAwDE76BC/pGFeZJpR6iKXLZNwtRn1/591jEwjsmmA=; b=hTCelBSoVX7GWWS6qXZlM/P+Dp5D+y21G+7vwqInxAXo2Y6Kx1ZjL7Qrq4NLPSJryputX3 YQZ3OHt99Sd5+iKyXGRYXnKFqPTSCI2LFKOgB47vjGHuKu2lTyx6QSV7zqvKc8/1VifGe/ oaSOOv9K8yFwSOvhmVTGOD7blBGcxw9U0Wuc9SfzxTqxQZvGPeLEcBQxcznBhqX0mE13Eu MU0FqqK1U7sGz0wu4HhStUGrOOhSxuccYeYa64aR9oi59lJ5EpB5tnqVYqn/6MMPcEwpqn vC/IBsPIAAUTK5/4TcHll8Gc61AbZRzauOHDWokQr1z9/M0WhdSZclwdoAYsgQ== From: Timo Rothenpieler To: ffmpeg-devel@ffmpeg.org Date: Tue, 21 May 2024 11:02:19 +0200 Message-ID: <20240521090316.782-11-timo@rothenpieler.org> X-Mailer: git-send-email 2.43.2 In-Reply-To: <20240521090316.782-1-timo@rothenpieler.org> References: <20240521090316.782-1-timo@rothenpieler.org> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 10/13] avformat/flvdec: add support for reading multi track audio X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: Timo Rothenpieler Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: p1WaODV3gmbK --- libavformat/flvdec.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c index 890958351a..5877828c52 100644 --- a/libavformat/flvdec.c +++ b/libavformat/flvdec.c @@ -1336,12 +1336,26 @@ retry: pkt_type = flags & ~FLV_AUDIO_CODECID_MASK; if (pkt_type == AudioPacketTypeMultitrack) { - av_log(s, AV_LOG_ERROR, "Multitrack audio is unsupported!\n"); - return AVERROR_PATCHWELCOME; + uint8_t types = avio_r8(s->pb); + int multitrack_type = types >> 4; + pkt_type = types & 0xF; + + if (multitrack_type != MultitrackTypeOneTrack) { + av_log(s, AV_LOG_ERROR, "Audio multitrack types other than MultitrackTypeOneTrack are unsupported!\n"); + return AVERROR_PATCHWELCOME; + } + + multitrack = 1; + size--; } codec_id = avio_rb32(s->pb); size -= 4; + + if (multitrack) { + track_idx = avio_r8(s->pb); + size--; + } } } else if (type == FLV_TAG_TYPE_VIDEO) { stream_type = FLV_STREAM_TYPE_VIDEO; @@ -1438,7 +1452,8 @@ skip: st = s->streams[i]; if (stream_type == FLV_STREAM_TYPE_AUDIO) { if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO && - (s->audio_codec_id || flv_same_audio_codec(st->codecpar, flags, codec_id))) + (s->audio_codec_id || flv_same_audio_codec(st->codecpar, flags, codec_id)) && + st->id == track_idx) break; } else if (stream_type == FLV_STREAM_TYPE_VIDEO) { if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO &&