From patchwork Mon Oct 31 21:15:49 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 39092 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8e01:b0:a3:a294:714c with SMTP id y1csp1159628pzj; Mon, 31 Oct 2022 14:16:18 -0700 (PDT) X-Google-Smtp-Source: AMsMyM5m1kOBd166tvByI/w3zV8AS/gXjWpqiHF/sWoYW3az0wVMxt6ba2Fh9IWEOsLK+hoDJ6nf X-Received: by 2002:a17:907:1c88:b0:7ad:8f76:699e with SMTP id nb8-20020a1709071c8800b007ad8f76699emr14906710ejc.114.1667250978545; Mon, 31 Oct 2022 14:16:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1667250978; cv=none; d=google.com; s=arc-20160816; b=ErtMbG5kULDj77jhMTkOqvn2lyS+L+NCpXn0MY8ObybETPhY+xWtIu4ehMQQtqCVrA /xexfZpOQO/7AAX/RONONW9WolxSlu368iaJ64MfsbxhDOncUjgIACVn6+oaborTQihT gEz3JEvsxQmlTdYLHDUc0pI/HRYp0FpLIsJ3kWYiyXvcEV0xdAvytkfqwGrMuAJojmY3 +v0kKHfCdui5Kj64akuyIKEO7bpUeFS3oLhH1yzyWhgp3EgVzMCCRQ6Ixlig/r4YdHbH e0Y2BiMAnN4omfpXpQFSHEfoFsZZPWhgWmpRoDRAdMGcQgEc1VOoyapdFsoY/aTTpzk1 4mGA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=IyA1fZH+GC/Qh90sCfjirId8s6+BYyF1TKu/1ISntPs=; b=d0iYP/yXg5ZPUZdIcNFBMCgVIseWiMcu0vbqh4fG9f9xhEHrMNq3GyGQFAH7hgVyG3 cF6AbGhefkEPW2vAXis/uFC3HXC/IlutB2CPhoV+clGp5Gkxt6JlGGwMvHHdk02q5Dtf bY089A8+vo3R+mhzoDs0K1h14lgte8fs1a9TFDcyQHINogj65YW9/gZZE2RD6n0TxH22 wKKwzCBP7Ujn3Cjq0CjbPZ1ZoZsY+tyOLbCY0HeDcfw3uxhiX7WoYsXHO1n1q9+z1Tfr TOLfT86ZvL7G/dk2rYvD6ZCSJihEYtthj5f9BqiKLTiH5PNA1gG5b762wf6fAUKiPy08 endg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=G3Wemnre; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id y10-20020a50eb0a000000b004574154f09asi8605464edp.529.2022.10.31.14.16.17; Mon, 31 Oct 2022 14:16:18 -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=@gmail.com header.s=20210112 header.b=G3Wemnre; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 96E1F68BE20; Mon, 31 Oct 2022 23:16:14 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oa1-f49.google.com (mail-oa1-f49.google.com [209.85.160.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id ECF9068BD6B for ; Mon, 31 Oct 2022 23:16:07 +0200 (EET) Received: by mail-oa1-f49.google.com with SMTP id 586e51a60fabf-1322d768ba7so14865142fac.5 for ; Mon, 31 Oct 2022 14:16:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=wXK0ITM7oCnXxT3K3ympAEgq0r+gR5JSsxccejbYp48=; b=G3Wemnree7lsYbNPNfuaAIif+GQEWs5It5yyctiSwtlctGK2FBeQKkJqGmIkfRzWde HbbLwwScc9C+Z8vis5qZ8icS9mjJmqKcWlzUkwcpzWNbYdrElbTjeL/2f9/Vf4u6Qisg sTIZiIHa3kCXbVCJ7VzPDNYRbDOZadfESnVsidfgLwbfVkjRDzzETULmHjn9dU38wQN6 4SQdcHJZqMlvg0KqoxMoFZBXgL0DIZDPUcDQDdXR1iNdO9C9jJrLjMLF5Q0+NBroZF1F a3gLIrV8VnWcpH4r+zRbogae4fcSsP37gOIHcCYHv2/H6ioFW1u0YGf19VY5D4145Xd4 gdxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=wXK0ITM7oCnXxT3K3ympAEgq0r+gR5JSsxccejbYp48=; b=OH5ddruyw0R/zcE5FO6Hgu61uroTaKhU7VZWCaYI2qeO7xGHuUfZdSlDSWKR6pnieV LnwHgBReVYkpGhmA4Nwone/nXH3ELoGrqcalQJWBh4C7s18UcB6mu3I2/azNfD70dW18 C0C3TSF14/XTXp02aS4pGl4YEz2RODAGGPb26veVwKEzrZjx/BsUQ506HPQmmMY1lkSw ho1eKspNo89qVSrSvbPsNdW3cIE0UCyQGMSRwm5U2qqGrEBltn8TRKwyeI7lS4jnGDLh ZjFEsWVqabgqRRT/3PZkK+M2IA12N7otqm1AXc8SaJLdiS+s7MpEDOuyrtrySTV4t1GX TPHw== X-Gm-Message-State: ACrzQf0JThF6RqCsOVAaAdyEBvUrUyP6jRd7+P+vBjPlIdcFoUkj/nne rbsYvV2TssxpG88EwRABVs8choI63qs= X-Received: by 2002:a05:6870:4607:b0:127:fd93:4752 with SMTP id z7-20020a056870460700b00127fd934752mr18136850oao.64.1667250966005; Mon, 31 Oct 2022 14:16:06 -0700 (PDT) Received: from localhost.localdomain ([191.97.187.183]) by smtp.gmail.com with ESMTPSA id k44-20020a9d19af000000b0063696cbb6bdsm3147091otk.62.2022.10.31.14.16.04 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Oct 2022 14:16:05 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Mon, 31 Oct 2022 18:15:49 -0300 Message-Id: <20221031211554.8176-1-jamrial@gmail.com> X-Mailer: git-send-email 2.38.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/6 v3] avcodec/aacdec: fix parsing streams with channel configuration 11 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: q631tEjHm0g5 Set the correct amount of tags in tags_per_config[]. Also, there are no channels that correspond to a side element in this configuration, so reflect this in the list of known/supported channel layouts. Signed-off-by: James Almer --- libavcodec/aacdec_template.c | 4 +--- libavcodec/aacdectab.h | 6 +++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/libavcodec/aacdec_template.c b/libavcodec/aacdec_template.c index 4a9513d53e..c10bc743b6 100644 --- a/libavcodec/aacdec_template.c +++ b/libavcodec/aacdec_template.c @@ -731,9 +731,7 @@ static ChannelElement *get_che(AACContext *ac, int type, int elem_id) return ac->tag_che_map[TYPE_CPE][elem_id] = ac->che[TYPE_CPE][2]; } case 11: - if (ac->tags_mapped == 2 && - ac->oc[1].m4ac.chan_config == 11 && - type == TYPE_SCE) { + if (ac->tags_mapped == 3 && type == TYPE_SCE) { ac->tags_mapped++; return ac->tag_che_map[TYPE_SCE][elem_id] = ac->che[TYPE_SCE][1]; } diff --git a/libavcodec/aacdectab.h b/libavcodec/aacdectab.h index e38b93a534..327efbcde0 100644 --- a/libavcodec/aacdectab.h +++ b/libavcodec/aacdectab.h @@ -35,7 +35,7 @@ #include -static const int8_t tags_per_config[16] = { 0, 1, 1, 2, 3, 3, 4, 5, 0, 0, 0, 4, 5, 16, 5, 0 }; +static const int8_t tags_per_config[16] = { 0, 1, 1, 2, 3, 3, 4, 5, 0, 0, 0, 5, 5, 16, 5, 0 }; static const uint8_t aac_channel_layout_map[16][16][3] = { { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, }, @@ -81,7 +81,7 @@ static const uint64_t aac_channel_layout[] = { AV_CH_LAYOUT_5POINT0_BACK, AV_CH_LAYOUT_5POINT1_BACK, AV_CH_LAYOUT_7POINT1_WIDE_BACK, - AV_CH_LAYOUT_6POINT1, + AV_CH_LAYOUT_6POINT1_BACK, AV_CH_LAYOUT_7POINT1, AV_CH_LAYOUT_22POINT2, 0, @@ -97,7 +97,7 @@ static const AVChannelLayout aac_ch_layout[] = { AV_CHANNEL_LAYOUT_5POINT0_BACK, AV_CHANNEL_LAYOUT_5POINT1_BACK, AV_CHANNEL_LAYOUT_7POINT1_WIDE_BACK, - AV_CHANNEL_LAYOUT_6POINT1, + AV_CHANNEL_LAYOUT_6POINT1_BACK, AV_CHANNEL_LAYOUT_7POINT1, AV_CHANNEL_LAYOUT_22POINT2, { 0 }, From patchwork Mon Oct 31 21:15:50 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 39093 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8e01:b0:a3:a294:714c with SMTP id y1csp1159707pzj; Mon, 31 Oct 2022 14:16:27 -0700 (PDT) X-Google-Smtp-Source: AMsMyM649jm5E1FbqwOfeGlf8whmv08IV0U6CsIdmMULiR3wHDpipVNSJNA40l9MAV9Jp95IrdjY X-Received: by 2002:a17:907:7e95:b0:78d:e9cf:82c7 with SMTP id qb21-20020a1709077e9500b0078de9cf82c7mr15639115ejc.724.1667250986847; Mon, 31 Oct 2022 14:16:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1667250986; cv=none; d=google.com; s=arc-20160816; b=Jm302EebsjMEyu/m7cdSLKZQ+RqeatB0zUhyOYzhITER/UHHhISsqsZexSCOEbtXR+ iBdIvs4nxxecrC8fzIgMWYrdrdvaijvly/GYsQq3FH49VWEmF5NtLIc63iTKqvTaO/Z3 RpIh61z+suKQvBekfLjlrRPhj2RUE+Xhip6C+EBVgZFr5X48GKzRV/1WaxMKd3U+8WwC S9DGt/9YlmcxQqsuqK2s6SwTiP/Mlub6ZG+Oat4IB3w3rmpLPCXgBn0gqilew+8VtQPP Jg+ZT9A2F0zWv8kCljolq1Xs7h4HpXSmVkS193kDLhxOof17x5S94gVxEstiVrJ+iX8X ftCg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding: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=2cZ6UDXke6ew3DaKXw1ghYIN6Qbd+pD1dC+8Cq+d+H4=; b=O4jhguuiYwZYKDmkWj3eGk0b0Wh6kDVty0U6fiXP9PKfEfjwBeJjlF+vr5yb1RnVQK Mwq/zgirms4tzrWDfWs7/D7r30WvBCY1kWDOEGPd1YYwBLVYK+yVi51bJHinMl6MwpwR SPOyYEPIz6FlL0JOu4EUfVcyh0Xo8+1TMLJ0HiEFpYhGyM5b8IsMhhMsrQCCJvCPVmn2 81iNdH1toQXtLN2jv7e/SYidQ/5w4Xomb0BNbgNJ582BgoboFgBSKPRgsSx/Th9L5hqk 45Xnhyqea6sCBG4ziQnCKVO+KR2QEfuFXv/v4PjMKcNV/o8HJnrssaKgzN7Y8YrTgZdm Do6Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=okVcF1ty; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id oq19-20020a170906cc9300b0079ddb52369bsi6916625ejb.61.2022.10.31.14.16.26; Mon, 31 Oct 2022 14:16:26 -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=@gmail.com header.s=20210112 header.b=okVcF1ty; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 96F7868BE30; Mon, 31 Oct 2022 23:16:15 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oi1-f179.google.com (mail-oi1-f179.google.com [209.85.167.179]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0C6E168BDFF for ; Mon, 31 Oct 2022 23:16:09 +0200 (EET) Received: by mail-oi1-f179.google.com with SMTP id p127so14049367oih.9 for ; Mon, 31 Oct 2022 14:16:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=5EIKSDccAFk5pbMwIVtgU+75tpkU6DaDouU9GCF3z4Y=; b=okVcF1tyvTvZaAed13dlfWqZDJM5Z8fj74y0D5/f9td74huv6hoGb15qji4+ROFple 9Iy/ux7jFtF59wkdKjyPx6i4f7BOY5scNs9CyOPbAK8zHJ21XD/5V8/N2FghLWtBvJkw gJQ1u87/6B3ImD8+8Egdctq1fNWXATyfPYEMfkZwFFsTBa9rkVm+TwmFIh6k9oLOO3UQ 7HxX4viSsiBKhPEqpi2ggCq1jsBqf1L91v6QfDMOfQu30ussLFH8g5hSp5yxiGgQRbay PxbjJlhRq1B2aRxFP8kEhBo8HaYcNuzwaGoJd7h2gJh9yPpg1DgQG9CeX0r1fNP6iHQ3 aLBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5EIKSDccAFk5pbMwIVtgU+75tpkU6DaDouU9GCF3z4Y=; b=WyY3gwlN/nF/HbAAsWmyjZBRVkachaCM+z/DlQR3w/VkOWchhsVotAp25NTps6qaMK pTs2Q2NkhbxWJ23pFbElEewYY5lcZ+O5cFxrsN0XsvAxt6jsMBZLKHSI72YYYAbaEzW8 kCcwQl1SFvewacDdiwQsbh8q4bNqLP1wVH77zbmHOO12nNPjmHgfSFXTR9nNcw2Ck7tJ gSHDLcaUlBikXiYCCGSmz69yj7AOkZ2bt+koSBaNMfaTN6AfidqZ/3rHMsYLtg2xgOcO MYJERwEGQEpC7F6EmzEQ8v6ZoxxuCSDUTy2XyVZXBXpX5/Lp5XCahYDNHJB/bNHns8p/ C5Xw== X-Gm-Message-State: ACrzQf3SkrRvD3WOkm3uIUL+VOIBtfDJJLhA0PDzYWfpPeBAvPDVOkXe yrK042GLD3OkluFiwsZrgR5CcnuD2tA= X-Received: by 2002:a05:6808:1247:b0:351:a271:2ada with SMTP id o7-20020a056808124700b00351a2712adamr15985837oiv.149.1667250967054; Mon, 31 Oct 2022 14:16:07 -0700 (PDT) Received: from localhost.localdomain ([191.97.187.183]) by smtp.gmail.com with ESMTPSA id k44-20020a9d19af000000b0063696cbb6bdsm3147091otk.62.2022.10.31.14.16.06 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Oct 2022 14:16:06 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Mon, 31 Oct 2022 18:15:50 -0300 Message-Id: <20221031211554.8176-2-jamrial@gmail.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221031211554.8176-1-jamrial@gmail.com> References: <20221031211554.8176-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/6 v3] avutil/channel_layout: add a 7.1(top) channel layout 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: ksdaQSThAXRM Signed-off-by: James Almer --- doc/APIchanges | 3 +++ doc/utils.texi | 2 ++ libavutil/channel_layout.c | 1 + libavutil/channel_layout.h | 2 ++ tests/ref/fate/channel_layout | 1 + 5 files changed, 9 insertions(+) diff --git a/doc/APIchanges b/doc/APIchanges index 3c86f24285..58a970328b 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -14,6 +14,9 @@ libavutil: 2021-04-27 API changes, most recent first: +2022-10-xx - xxxxxxxxxx - lavu 57.xx.xxx - channel_layout.h + Add AV_CH_LAYOUT_7POINT1_TOP_BACK and AV_CHANNEL_LAYOUT_7POINT1_TOP_BACK. + 2022-10-30 - xxxxxxxxxx - lavu 57.40.100 - channel_layout.h Add AV_CH_LAYOUT_CUBE and AV_CHANNEL_LAYOUT_CUBE. diff --git a/doc/utils.texi b/doc/utils.texi index 907a6b87cb..8e8bfa76d4 100644 --- a/doc/utils.texi +++ b/doc/utils.texi @@ -713,6 +713,8 @@ FL+FR+FC+LFE+BL+BR+SL+SR FL+FR+FC+LFE+BL+BR+FLC+FRC @item 7.1(wide-side) FL+FR+FC+LFE+FLC+FRC+SL+SR +@item 7.1(top) +FL+FR+FC+LFE+BL+BR+TFL+TFR @item octagonal FL+FR+FC+BL+BR+BC+SL+SR @item cube diff --git a/libavutil/channel_layout.c b/libavutil/channel_layout.c index 5af7ea0e01..e2f7512254 100644 --- a/libavutil/channel_layout.c +++ b/libavutil/channel_layout.c @@ -196,6 +196,7 @@ static const struct channel_layout_name channel_layout_map[] = { { "7.1", AV_CHANNEL_LAYOUT_7POINT1 }, { "7.1(wide)", AV_CHANNEL_LAYOUT_7POINT1_WIDE_BACK }, { "7.1(wide-side)", AV_CHANNEL_LAYOUT_7POINT1_WIDE }, + { "7.1(top)", AV_CHANNEL_LAYOUT_7POINT1_TOP_BACK }, { "octagonal", AV_CHANNEL_LAYOUT_OCTAGONAL }, { "cube", AV_CHANNEL_LAYOUT_CUBE }, { "hexadecagonal", AV_CHANNEL_LAYOUT_HEXADECAGONAL }, diff --git a/libavutil/channel_layout.h b/libavutil/channel_layout.h index 3e69163360..f345415c55 100644 --- a/libavutil/channel_layout.h +++ b/libavutil/channel_layout.h @@ -232,6 +232,7 @@ enum AVChannelOrder { #define AV_CH_LAYOUT_7POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) #define AV_CH_LAYOUT_7POINT1_WIDE (AV_CH_LAYOUT_5POINT1|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) #define AV_CH_LAYOUT_7POINT1_WIDE_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) +#define AV_CH_LAYOUT_7POINT1_TOP_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT) #define AV_CH_LAYOUT_OCTAGONAL (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_CENTER|AV_CH_BACK_RIGHT) #define AV_CH_LAYOUT_CUBE (AV_CH_LAYOUT_QUAD|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT) #define AV_CH_LAYOUT_HEXADECAGONAL (AV_CH_LAYOUT_OCTAGONAL|AV_CH_WIDE_LEFT|AV_CH_WIDE_RIGHT|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT|AV_CH_TOP_BACK_CENTER|AV_CH_TOP_FRONT_CENTER|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT) @@ -389,6 +390,7 @@ typedef struct AVChannelLayout { #define AV_CHANNEL_LAYOUT_7POINT1 AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1) #define AV_CHANNEL_LAYOUT_7POINT1_WIDE AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1_WIDE) #define AV_CHANNEL_LAYOUT_7POINT1_WIDE_BACK AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1_WIDE_BACK) +#define AV_CHANNEL_LAYOUT_7POINT1_TOP_BACK AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_7POINT1_TOP_BACK) #define AV_CHANNEL_LAYOUT_OCTAGONAL AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_OCTAGONAL) #define AV_CHANNEL_LAYOUT_CUBE AV_CHANNEL_LAYOUT_MASK(8, AV_CH_LAYOUT_CUBE) #define AV_CHANNEL_LAYOUT_HEXADECAGONAL AV_CHANNEL_LAYOUT_MASK(16, AV_CH_LAYOUT_HEXADECAGONAL) diff --git a/tests/ref/fate/channel_layout b/tests/ref/fate/channel_layout index 02eaad0929..b93f96dbb3 100644 --- a/tests/ref/fate/channel_layout +++ b/tests/ref/fate/channel_layout @@ -24,6 +24,7 @@ hexagonal FL+FR+FC+BL+BR+BC 7.1 FL+FR+FC+LFE+BL+BR+SL+SR 7.1(wide) FL+FR+FC+LFE+BL+BR+FLC+FRC 7.1(wide-side) FL+FR+FC+LFE+FLC+FRC+SL+SR +7.1(top) FL+FR+FC+LFE+BL+BR+TFL+TFR octagonal FL+FR+FC+BL+BR+BC+SL+SR cube FL+FR+BL+BR+TFL+TFR+TBL+TBR hexadecagonal FL+FR+FC+BL+BR+BC+SL+SR+TFL+TFC+TFR+TBL+TBC+TBR+WL+WR From patchwork Mon Oct 31 21:18:29 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 39094 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8e01:b0:a3:a294:714c with SMTP id y1csp1160852pzj; Mon, 31 Oct 2022 14:19:01 -0700 (PDT) X-Google-Smtp-Source: AMsMyM6Zpp3CJt6NHmGA/M+gElopF0nXp/uGRGZ6GKox6QseVufHJsBtFefS53+CBijEC50pX8ao X-Received: by 2002:aa7:cc90:0:b0:458:b07c:f35f with SMTP id p16-20020aa7cc90000000b00458b07cf35fmr15342017edt.310.1667251141211; Mon, 31 Oct 2022 14:19:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1667251141; cv=none; d=google.com; s=arc-20160816; b=BfTRmth9xmc1yE+ty1kgBOp+9j+ZI9V+TsqkjZRvN/QPxyE4C4r+bXkUwqY3wgadDU SYYZjqZOIAuN9lxDa42SjhSKisC1jpPVK9YXSI8lTYo7m/u7szzzGGYCzVIw9GC6xe3P zpmfukb4tpMbL/ChZF9IGOK+3U8qjZsp/1aVF1/XXqsod+lvnwCma6l36G+9+pmGM95M adBTVRREW3hA7SVg6i6AY0fPOyveTmiBieMArII74fKsaxj4282LK6tQaLB6E11k2tkP VIzABt/ccipB/lDNm+V2V647vA5zrDdqJPfEmci6i1iZlk/Xv5FHhw9ZBF5bvpLoP4to L3/g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding: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=yqLmj19ot4o8rE5fDPklteeiwXziDyXfwhGRFfRiW8c=; b=etq+wLSsr1HfMz5JczjkMpRNVSAlYrZ3htT1uXrVj1/9kZ59UFpfS2Upx5/JTO5p6i p2GnCMJrleONbpTynCWdh+kuGxpzxyUbe8Ad9VOLkKxmTL0u8kxo+SbGAuX6+fRujj+u 3ldzaWZo1XbRWJMuZVeTCkBXypXcxEW8GBD2/ZYoICyDKwTb5SFpP4eAUwC2tLQDqN/+ 5CJ99iK/WIh6r/5uCdLC7Z99sVT/4rRrlUzVmrJ8KDOIWPaJ1ftQ4azrSJQS6bj+29ik 7lQ5fqqhf7nXOT0vniDxKw8o7ptamsnNwMuYzGbpLE8oOZmLBVKRwsEhptux6ghZUxjj qaLQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=JyoIFoCk; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id t2-20020a1709066bc200b007317ad1f9a4si6683035ejs.310.2022.10.31.14.18.59; Mon, 31 Oct 2022 14:19:01 -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=@gmail.com header.s=20210112 header.b=JyoIFoCk; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D473E68BE22; Mon, 31 Oct 2022 23:18:56 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oa1-f42.google.com (mail-oa1-f42.google.com [209.85.160.42]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 30AB668BD8A for ; Mon, 31 Oct 2022 23:18:51 +0200 (EET) Received: by mail-oa1-f42.google.com with SMTP id 586e51a60fabf-13c2cfd1126so14839932fac.10 for ; Mon, 31 Oct 2022 14:18:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=hezne1Ixn8xhnLFqK1PuTCE1/nTGKX15U7vS2DJ82zE=; b=JyoIFoCkr7mj3Nlg3MqwdxjBL3AbPClDkCiM37abfBUdE5e0BMsNo7BAHUiH/Nzr+W opDCW4PWYeXqZUjBhk4SXWbiT8ufS1Ut0OFqNBwtJD3QGlOaVFVPpPmZeX+mzpPrf3zl e21AVp6wFDFJF4LRciZK+W1jldqzIlns7HN6+3BTj/Oh3wze0u59o0yjPw1XWwWuS9iK 9tQ7f2Yp/o5MB1Wwuym4JYaz6/CR7NP84KXKNM1ttYD0++d4KsA87sVm0Vq7VEy10h43 wldkCXtlewScmKF6T7JR8OOscjBIi/gmcegwwnEACwpL4SzSWXHRnw2Hd/NvzcfT9QAe 302w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hezne1Ixn8xhnLFqK1PuTCE1/nTGKX15U7vS2DJ82zE=; b=096wL+q8/V9J/sHCpf2ctshs+QPcnpBwYkb9R9GZSU89fKfCrTlxiXgT79nMfwjXff izB0q64zYhxlbZ80JuIaA+BQqGZrSSlKCGmVY6FMr2hpPPZDFHFwNwILszbsbuUMVO+I BDrFPluXjMJzIty8ks4Zj7gyVESQ1Bn6ZoCqjDmf70kZY076NPu8de2m6Tdiv0YA/esy g+adC7R/It8qjYxH7eab/5S1Syvk+yd90v/0+i/stA+/CuEBgxagk6ZpC8ECB38XioyP BFk59Kk+C67PWjjkNeqczaCITEJcfQHNU7JzVObkkqkAXDsq1XPPiAGAC61yxAFBOH/y faBA== X-Gm-Message-State: ACrzQf2GuLullJdaEnEHi7J6sEzhsf8VSnHgnB1iUTGTH75N8Kgwg/Gu 3zKR/CGZqNvQmx1dcaq5OSGOzig799U= X-Received: by 2002:a05:6871:5cb:b0:13c:6ef9:a1b6 with SMTP id v11-20020a05687105cb00b0013c6ef9a1b6mr12195029oan.48.1667251129629; Mon, 31 Oct 2022 14:18:49 -0700 (PDT) Received: from localhost.localdomain ([191.97.187.183]) by smtp.gmail.com with ESMTPSA id x26-20020a9d629a000000b006619dd066fbsm3183892otk.5.2022.10.31.14.18.48 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Oct 2022 14:18:49 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Mon, 31 Oct 2022 18:18:29 -0300 Message-Id: <20221031211832.8213-1-jamrial@gmail.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221031211554.8176-1-jamrial@gmail.com> References: <20221031211554.8176-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/6] swresample/rematrix: support mixing top front left/right channels 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: yVl5D5YGrFAN Signed-off-by: James Almer --- libswresample/rematrix.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/libswresample/rematrix.c b/libswresample/rematrix.c index fe823dc575..0c3fff6c42 100644 --- a/libswresample/rematrix.c +++ b/libswresample/rematrix.c @@ -138,6 +138,8 @@ static int sane_layout(AVChannelLayout *ch_layout) { return 0; if(!even(av_channel_layout_subset(ch_layout, (AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_FRONT_RIGHT_OF_CENTER)))) return 0; + if(!even(av_channel_layout_subset(ch_layout, (AV_CH_TOP_FRONT_LEFT | AV_CH_TOP_FRONT_RIGHT)))) + return 0; if(ch_layout->nb_channels >= SWR_CH_MAX) return 0; @@ -369,6 +371,28 @@ av_cold int swr_build_matrix2(const AVChannelLayout *in_layout, const AVChannelL }else av_assert0(0); } + + if (unaccounted & AV_CH_TOP_FRONT_LEFT) { + if (av_channel_layout_index_from_channel(&out_ch_layout, AV_CHAN_TOP_FRONT_CENTER) >= 0) { + matrix[TOP_FRONT_CENTER][TOP_FRONT_LEFT ] += M_SQRT1_2; + matrix[TOP_FRONT_CENTER][TOP_FRONT_RIGHT] += M_SQRT1_2; + if (av_channel_layout_index_from_channel(&in_ch_layout, AV_CHAN_TOP_FRONT_CENTER) >= 0) + matrix[TOP_FRONT_CENTER][TOP_FRONT_CENTER] = center_mix_level * sqrt(2); + } else if (av_channel_layout_index_from_channel(&out_ch_layout, AV_CHAN_FRONT_LEFT) >= 0) { + if (av_channel_layout_index_from_channel(&in_ch_layout, AV_CHAN_FRONT_LEFT) >= 0) { + matrix[FRONT_LEFT ][TOP_FRONT_LEFT ] += M_SQRT1_2; + matrix[FRONT_RIGHT][TOP_FRONT_RIGHT] += M_SQRT1_2; + } else { + matrix[FRONT_LEFT ][TOP_FRONT_LEFT ] += 1.0; + matrix[FRONT_RIGHT][TOP_FRONT_RIGHT] += 1.0; + } + } else if (av_channel_layout_index_from_channel(&out_ch_layout, AV_CHAN_FRONT_CENTER) >= 0) { + matrix[FRONT_CENTER][TOP_FRONT_LEFT ] += M_SQRT1_2; + matrix[FRONT_CENTER][TOP_FRONT_RIGHT] += M_SQRT1_2; + } else + av_assert0(0); + } + /* mix LFE into front left/right or center */ if (unaccounted & AV_CH_LOW_FREQUENCY) { if (av_channel_layout_index_from_channel(&out_ch_layout, AV_CHAN_FRONT_CENTER) >= 0) { From patchwork Mon Oct 31 21:18:30 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 39095 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8e01:b0:a3:a294:714c with SMTP id y1csp1160888pzj; Mon, 31 Oct 2022 14:19:09 -0700 (PDT) X-Google-Smtp-Source: AMsMyM6f1LmoJrTTrngM3ralx3aD91cfV0hjDyOT67vJesz/bpGU6HIO6RuYR4XS3/NAQGYdmE1y X-Received: by 2002:a05:6402:3408:b0:43c:2dd3:d86b with SMTP id k8-20020a056402340800b0043c2dd3d86bmr15898363edc.108.1667251149297; Mon, 31 Oct 2022 14:19:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1667251149; cv=none; d=google.com; s=arc-20160816; b=sNlC2sVIMYRvaOV/FaVoMblcenQVKZnjmKUT4eC6OgNCpyaczyD153Uw2hFcYqyPtr ga5btSOJTqwrGq6hjGIB1Z9VcNaGLWmCEBbSiiwrtu+3Ok2SZzV8Zd6cuPDY1rpzy8I4 4ORWAMm9HIrpRgbJk3r9PZ/Q2retnd6qXmQar1jdbC3xkfhHfvMZ0xzIdJjhStg6Wgsa o5eW+1D7aIkEUxZLIrQH1NLRKO3D8zaPOQCVJvt9vR+kW04CpYyfjaJn/BavDXlNTWoa wtCsvyPmYge9tri75LcbKBKrpoYB0SteUxpVzcEcs3KGmgM98mrnzerGUzmbbnc6hHsd scuw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding: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=jceeIziMoSMovp8uHXxT0UR9ZbtdUhEMbT5hH2dhHaw=; b=Tyi45+daIjPMp7cgAdkmZ+bo7bowCMXA4CySBYUnV+IA+dRl3JVWDUpBbgmSK2uZPt PBo+xd8LLjaWk1imqmzjfkJxu0HcBoPG1w1VlSZ7qJY1+9Ff1YlawrfGIrGXC7j4H1fQ LkrbtQ7b38H+tKYY22b/djj/2dGeQ4BnIWSIr2LnRTrtSEGcvOWH7W5GzuRfLnsqROoJ +JBSLa+OWXpJzBjwbhgVJlNbftnd6LR7ALKkDLOQ0e+eCcGsMRRY5ozaQjhHsyTatfQp lY2AaUhjNLAW6yoK+zpQ+xahE8oMz4F5p2g5t4uKrB14Cx+wanGFku2TIHucoMcbuyhm G+0w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=ccoNyIyK; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a21-20020a1709066d5500b0078dc3be6508si7237704ejt.192.2022.10.31.14.19.06; Mon, 31 Oct 2022 14:19:09 -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=@gmail.com header.s=20210112 header.b=ccoNyIyK; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E951468BE40; Mon, 31 Oct 2022 23:18:58 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oa1-f44.google.com (mail-oa1-f44.google.com [209.85.160.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 77EBF68BD8A for ; Mon, 31 Oct 2022 23:18:52 +0200 (EET) Received: by mail-oa1-f44.google.com with SMTP id 586e51a60fabf-13ba86b5ac0so14894861fac.1 for ; Mon, 31 Oct 2022 14:18:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=K5dOmN7P7fJ7sGzAdnabtribjvQoj8EwANxEMp28sx4=; b=ccoNyIyKOJW34g8XqBrDEypo9RsTl/v3fpOoUDlj3Jy3bmz2Uo8wKSGczMlF3aoefL nK8dwmLT1C9KPqTLmKpSe0DWo/ziz43aT+Q4qXORHu2o7oYmRoteuWOJ1Te/g2UoTQFS f19SX44CVCM9axVNOiONsdqWS+bXK4V1ZC6qVQqQSIh2CcU2Gje/Xyq+jKlecH4rOhWg 7+TuGJp8YlWYuvQiisJLMB56Geof1CZXkN2+srqfTtUYh/bFL30QcCgJiHcXe1DlcnzD It1rLrtICOv0xvdDS6NqJ68sDX+6reCoibD4toMsNL0VeYRgAfwnmSJZ2O/+zkJ4rLT0 ncUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=K5dOmN7P7fJ7sGzAdnabtribjvQoj8EwANxEMp28sx4=; b=VvtgCQ/BSIJohAbsQqsuPH0dY6nfGXJgYJclhm3DWmobgkCmTzAP5ZVkoRm48E9rW+ bo69rj/X6I9MJCa3X8jjRyS9e6DFj5oQD8eR3jZdg509iCPT04OCFfTgEadyljiSclRO KYoLydBYrKXCUWfqkA323eGTZ92zJ5nXUTZTpERApqB8WHIS3PGtEy8KLW/fPduQP7tp bsgOV4jJb9hVflnWSAGkNxJmxg8GfaWF/RMglDkWH56LGFPR/coaDcV3p5AVY/mHwjAR 2OWq7eL0eLEI8o68mMRFK7xY+JquThyZytFsiVJiB7m3uJLcjnF4UjmFdkRR0jFuha/q tybw== X-Gm-Message-State: ACrzQf1M4EiN9hrJh0TEEuDDPNfSPOyEmzoykefeUIAX50IRQLA9oUyC 8g8EGZ7HV7nlXjx2VZyqn0hmxqUpj0Q= X-Received: by 2002:a05:6870:148d:b0:13b:11ec:75ee with SMTP id k13-20020a056870148d00b0013b11ec75eemr8837245oab.64.1667251130833; Mon, 31 Oct 2022 14:18:50 -0700 (PDT) Received: from localhost.localdomain ([191.97.187.183]) by smtp.gmail.com with ESMTPSA id x26-20020a9d629a000000b006619dd066fbsm3183892otk.5.2022.10.31.14.18.49 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Oct 2022 14:18:50 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Mon, 31 Oct 2022 18:18:30 -0300 Message-Id: <20221031211832.8213-2-jamrial@gmail.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221031211554.8176-1-jamrial@gmail.com> References: <20221031211554.8176-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/6 v3] avcodec/aacdec: add support for channel configuration 14 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: M74efy3dsuk6 It corresponds to the 7.1(top) layout. Signed-off-by: James Almer --- libavcodec/aacdec_template.c | 23 ++++++++++++++++++++++- libavcodec/aacdectab.h | 6 +++--- libavcodec/mpeg4audio.c | 5 +++-- libavcodec/mpeg4audio.h | 2 +- 4 files changed, 29 insertions(+), 7 deletions(-) diff --git a/libavcodec/aacdec_template.c b/libavcodec/aacdec_template.c index c10bc743b6..9a85692069 100644 --- a/libavcodec/aacdec_template.c +++ b/libavcodec/aacdec_template.c @@ -404,6 +404,21 @@ static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags) i++; } + // The previous checks would end up at 4 at this point for chan_config 14 + if (layout == AV_CH_LAYOUT_5POINT1_BACK && tags == 5 && i == 4) { + const uint8_t (*reference_layout_map)[3] = aac_channel_layout_map[13]; + for (int j = 0; j < tags; j++) { + if (layout_map[j][0] != reference_layout_map[j][0] || + layout_map[j][2] != reference_layout_map[j][2]) + goto end_of_layout_definition; + } + + i += assign_pair(e2c_vec, layout_map, i, + AV_CH_TOP_FRONT_LEFT, + AV_CH_TOP_FRONT_RIGHT, + AAC_CHANNEL_FRONT, + &layout); + } // The previous checks would end up at 8 at this point for 22.2 if (layout == PREFIX_FOR_22POINT2 && tags == 16 && i == 8) { const uint8_t (*reference_layout_map)[3] = aac_channel_layout_map[12]; @@ -633,7 +648,7 @@ static int set_default_channel_config(AACContext *ac, AVCodecContext *avctx, int channel_config) { if (channel_config < 1 || (channel_config > 7 && channel_config < 11) || - channel_config > 13) { + channel_config > 14) { av_log(avctx, AV_LOG_ERROR, "invalid default channel configuration (%d)\n", channel_config); @@ -717,6 +732,12 @@ static ChannelElement *get_che(AACContext *ac, int type, int elem_id) /* For indexed channel configurations map the channels solely based * on position. */ switch (ac->oc[1].m4ac.chan_config) { + case 14: + if (ac->tags_mapped > 2 && ((type == TYPE_CPE && elem_id < 3) || + (type == TYPE_LFE && elem_id < 1))) { + ac->tags_mapped++; + return ac->tag_che_map[type][elem_id] = ac->che[type][elem_id]; + } case 13: if (ac->tags_mapped > 3 && ((type == TYPE_CPE && elem_id < 8) || (type == TYPE_SCE && elem_id < 6) || diff --git a/libavcodec/aacdectab.h b/libavcodec/aacdectab.h index 327efbcde0..0e5e47da64 100644 --- a/libavcodec/aacdectab.h +++ b/libavcodec/aacdectab.h @@ -68,8 +68,8 @@ static const uint8_t aac_channel_layout_map[16][16][3] = { { TYPE_SCE, 5, AAC_CHANNEL_FRONT }, // SCE6 = BtFC, { TYPE_CPE, 7, AAC_CHANNEL_FRONT }, // CPE8 = BtFL and BtFR }, + { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 1, AAC_CHANNEL_BACK }, { TYPE_LFE, 0, AAC_CHANNEL_LFE }, { TYPE_CPE, 2, AAC_CHANNEL_FRONT }, }, { { 0, } }, - /* TODO: Add 7+1 TOP configuration */ }; #if FF_API_OLD_CHANNEL_LAYOUT @@ -84,8 +84,8 @@ static const uint64_t aac_channel_layout[] = { AV_CH_LAYOUT_6POINT1_BACK, AV_CH_LAYOUT_7POINT1, AV_CH_LAYOUT_22POINT2, + AV_CH_LAYOUT_7POINT1_TOP_BACK, 0, - /* AV_CH_LAYOUT_7POINT1_TOP, */ }; #endif @@ -100,8 +100,8 @@ static const AVChannelLayout aac_ch_layout[] = { AV_CHANNEL_LAYOUT_6POINT1_BACK, AV_CHANNEL_LAYOUT_7POINT1, AV_CHANNEL_LAYOUT_22POINT2, + AV_CHANNEL_LAYOUT_7POINT1_TOP_BACK, { 0 }, - /* AV_CHANNEL_LAYOUT_7POINT1_TOP, */ }; #endif /* AVCODEC_AACDECTAB_H */ diff --git a/libavcodec/mpeg4audio.c b/libavcodec/mpeg4audio.c index e38a8c0852..fbd2a8f811 100644 --- a/libavcodec/mpeg4audio.c +++ b/libavcodec/mpeg4audio.c @@ -56,7 +56,7 @@ static int parse_config_ALS(GetBitContext *gb, MPEG4AudioConfig *c, void *logctx return 0; } -const uint8_t ff_mpeg4audio_channels[14] = { +const uint8_t ff_mpeg4audio_channels[15] = { 0, 1, // mono (1/0) 2, // stereo (2/0) @@ -70,7 +70,8 @@ const uint8_t ff_mpeg4audio_channels[14] = { 0, 7, // 3/3.1 8, // 3/2/2.1 - 24 // 3/3/3 - 5/2/3 - 3/0/0.2 + 24, // 3/3/3 - 5/2/3 - 3/0/0.2 + 8, // 3/2.1 - 2/0 }; static inline int get_object_type(GetBitContext *gb) diff --git a/libavcodec/mpeg4audio.h b/libavcodec/mpeg4audio.h index a6f71cff58..56615ef321 100644 --- a/libavcodec/mpeg4audio.h +++ b/libavcodec/mpeg4audio.h @@ -42,7 +42,7 @@ typedef struct MPEG4AudioConfig { } MPEG4AudioConfig; extern const int ff_mpeg4audio_sample_rates[16]; -extern const uint8_t ff_mpeg4audio_channels[14]; +extern const uint8_t ff_mpeg4audio_channels[15]; /** * Parse MPEG-4 systems extradata from a potentially unaligned GetBitContext to retrieve audio configuration. From patchwork Mon Oct 31 21:18:31 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 39096 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8e01:b0:a3:a294:714c with SMTP id y1csp1160912pzj; Mon, 31 Oct 2022 14:19:15 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4OvkW1eZtkEfVMqbwTGj+BN8ULrUXaNuq+cttHyAD4Lv8OcR47eoNrfZktcRRyWetBXi/q X-Received: by 2002:a17:907:a42c:b0:7aa:97e5:fac6 with SMTP id sg44-20020a170907a42c00b007aa97e5fac6mr14539640ejc.378.1667251155000; Mon, 31 Oct 2022 14:19:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1667251154; cv=none; d=google.com; s=arc-20160816; b=CrT3rEQJLB5vOM4QFZZHmqcSD/UTezrh7VkatxBd3Qsqaz3VrQSnTO70m0zxFQ3MZE Sy7h85d4rsyU9MCCrtpGVKV3f9uMSc7N0UH1nXBrDlFM8e7pa/TGl1/6U2LYiJfTHwyK h8wxm2sgW+biqwFR8vZJ37zDaXyZyqdZmhWwBN6NGfv2Wr7av76eHDLUlM0WYNCQZ3QI qtwjgR3C9FclM2Vz41rj733FsX62hbLyeuqRYJXehCWceKdnWxznBwZuvIBYvF/8fcZn 6kip8vTMktwe6eUWIKeid27czWTLSD7z9I22ciMkVnhH/nMhQUZhfi1/A068MOCVRxxE tg/Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding: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=pxMUQ+CaT6cPbUD/1i5B9m1ZDXwjV39pqIItWZOGbd0=; b=lQnJaWGuptdz1NRpLdKB87t1krfFqGqaziiDZaWV6n/ylilUPUDMQvR6Id0DAnGCSP uFg0leH+i0xUul7JkJ12ts9Gpi8mljIR44/ovIU7+kMIMkGf2IU6TpK39s1Psds8wt6j MTxNxFfXPvV36DEIu4Y4DfHvE02zH87UoO4s+8kAS6QHplxl3CnJFYxQI4uQtyBIzYuo m8pd7QwhORoA0Me8NNZXEEIY+ny9FcX6gbOzCaODYv/1e95BAFv4I3omEQaBy+yprUYq +wFWODh7qB1N4CZkqK75pP2NBbgfGQRAfKq1DZTj3dFXunMKso1HFMocNZ+l+EkCKDRQ 58XQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=HI2h+5fW; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id i10-20020a170906264a00b00741a18d4a5asi6697319ejc.994.2022.10.31.14.19.14; Mon, 31 Oct 2022 14:19:14 -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=@gmail.com header.s=20210112 header.b=HI2h+5fW; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E422168BE18; Mon, 31 Oct 2022 23:19:00 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oa1-f44.google.com (mail-oa1-f44.google.com [209.85.160.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7E29068BE18 for ; Mon, 31 Oct 2022 23:18:53 +0200 (EET) Received: by mail-oa1-f44.google.com with SMTP id 586e51a60fabf-12c8312131fso14873511fac.4 for ; Mon, 31 Oct 2022 14:18:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=Iqv48OuIziSuYbZY0Et80woXPZA4vE3HI7lt6oYyb9E=; b=HI2h+5fW2gBAW7YO9NCgMa3L9exo9SpggEVwmbVBFnBZ9tYrbZ+SpiReIUJvqk4zJz MIWwPC0gOSfgzwj114uV7vN+yjl4qR70L2a3b2IQBZaI/By5d0OVy5niuGXfnGaLJees zowEy82Njmu8p/ANga/bMYsYziNnxM6B44UldEPoy7crKbUfo5zyj8s9mep4dxrBfWBl roW0bqTX/nazwkbJLNSeIyIdCfiogzmsn9q/JNINyGZMA7MveAnwHCSTP4jATbF0Ry+c /3y3NGf3xpg7EWQAG8VhtdguYneWO/vZhZ1ZY5S/1NMMnd12Tr1omntm7iGVcm1P3Alr v0OA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Iqv48OuIziSuYbZY0Et80woXPZA4vE3HI7lt6oYyb9E=; b=V6NWw7nw23OqgvocLFUgQsZdMHtjM9NMv8M50F8y8Bl8JrWU4j22jWG5h7KQe/ZSgl EhSMyTWZqXTXww2ovvMJanW+NfWKUgIr/VTSIqg/vpItOQOMaU+PNmncoZBz2D5kamZb JYRBfzBRnGPFHuMfjVA4t3ICbDqff/g/kjlCbnWEhXANFzTDnOGCw3+UU3/s1aDWe9XS tXaZeGWYCNRVxnnq5nf5yL2444xE0PLVsqG/5d1YLjvpLVBoG49VjtM6BYRRzsEIZH+S 7aFEV9fRVbulKgrithvXjOg4M7qNRzsBwX20JsjdNwKL1H6sGvpJYh0ACl4uPg8qA67S weXw== X-Gm-Message-State: ACrzQf3eJMKu+oC6R2SkR64CHw88RVMFX18Xy5AxLmhSSg0PIk/Hr5bD DfttdU3kTIWZ2w8HXQtcndByEKx4sOs= X-Received: by 2002:a05:6870:c888:b0:12c:7f3b:d67d with SMTP id er8-20020a056870c88800b0012c7f3bd67dmr9016205oab.229.1667251132035; Mon, 31 Oct 2022 14:18:52 -0700 (PDT) Received: from localhost.localdomain ([191.97.187.183]) by smtp.gmail.com with ESMTPSA id x26-20020a9d629a000000b006619dd066fbsm3183892otk.5.2022.10.31.14.18.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Oct 2022 14:18:51 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Mon, 31 Oct 2022 18:18:31 -0300 Message-Id: <20221031211832.8213-3-jamrial@gmail.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221031211554.8176-1-jamrial@gmail.com> References: <20221031211554.8176-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/6] avcodec/aacdec: don't force a layout when a channel position is unknown 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: sOajnnxlXtuM If PCE defines channels not covered by those in the standard configurations then don't try to come up with some made up layout and just return them in the coded order. Fixes al08_44.mp4 from the conformance suite, now reporting and decoding all 48 channels instead of 10. Signed-off-by: James Almer --- libavcodec/aacdec_template.c | 27 ++++++--------------------- 1 file changed, 6 insertions(+), 21 deletions(-) diff --git a/libavcodec/aacdec_template.c b/libavcodec/aacdec_template.c index 9a85692069..4a88aeae1d 100644 --- a/libavcodec/aacdec_template.c +++ b/libavcodec/aacdec_template.c @@ -325,36 +325,19 @@ static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags) AAC_CHANNEL_FRONT, &layout); num_front_channels -= 2; } - while (num_front_channels >= 2) { - i += assign_pair(e2c_vec, layout_map, i, - UINT64_MAX, - UINT64_MAX, - AAC_CHANNEL_FRONT, &layout); - num_front_channels -= 2; - } + if (num_front_channels) + return 0; // Non standard PCE defined layout if (num_side_channels >= 2) { i += assign_pair(e2c_vec, layout_map, i, AV_CH_SIDE_LEFT, AV_CH_SIDE_RIGHT, - AAC_CHANNEL_FRONT, &layout); - num_side_channels -= 2; - } - while (num_side_channels >= 2) { - i += assign_pair(e2c_vec, layout_map, i, - UINT64_MAX, - UINT64_MAX, AAC_CHANNEL_SIDE, &layout); num_side_channels -= 2; } + if (num_side_channels) + return 0; // Non standard PCE defined layout - while (num_back_channels >= 4) { - i += assign_pair(e2c_vec, layout_map, i, - UINT64_MAX, - UINT64_MAX, - AAC_CHANNEL_BACK, &layout); - num_back_channels -= 2; - } if (num_back_channels >= 2) { i += assign_pair(e2c_vec, layout_map, i, AV_CH_BACK_LEFT, @@ -373,6 +356,8 @@ static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags) i++; num_back_channels--; } + if (num_back_channels) + return 0; // Non standard PCE defined layout if (i < tags && layout_map[i][2] == AAC_CHANNEL_LFE) { e2c_vec[i] = (struct elem_to_channel) { From patchwork Mon Oct 31 21:18:32 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 39097 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:8e01:b0:a3:a294:714c with SMTP id y1csp1160963pzj; Mon, 31 Oct 2022 14:19:23 -0700 (PDT) X-Google-Smtp-Source: AMsMyM5s4m5MJqfZ1lUC3hisiozXAPCiT1JIFZBPH09uew47m6iGepQ4dQXR/x9xhAdZFUBEPhVh X-Received: by 2002:a17:907:75fc:b0:7aa:e0b3:270 with SMTP id jz28-20020a17090775fc00b007aae0b30270mr14444188ejc.680.1667251163242; Mon, 31 Oct 2022 14:19:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1667251163; cv=none; d=google.com; s=arc-20160816; b=Rct+XwoBPH2gXmY/jxdnSBWs116TdWBlbVaIJntN3YKNpJvcd80pPXl9bfcSgJsbwb 0T8pntz6B3GJx+KbIPSLP3bWGQ7lVB0fQ1Iu5jbUnDRmj4auM6Me4lEpfWWgfBJ7iBSo EFWTIIqbSZLfLL8Ue/cAVaz2bYOVKbAZadEJGCSYCAVKuuTzefHwjIDV0WIw5PxjVwKq VaTlXXaoVkyv44HdRPx00fqHqNkVPKF4PE9zOlD3AquyQgEwxNLo2QWVUzxw3liKSBJ0 Q/unqsRgolvL3KCmcvBBNA0sA5HGok62qTCCaBgjNBJ1/f20QFHmpA4/EJNodwFwHNna hqfw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding: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=NjMynCYFxzh11JM84mt/PihOR+JFsUcVYYAgxKfXp88=; b=iIiEjIKmDeTczQvoV/JXMtDwFf9rnD3GbmGl6gomMWFyIZu1tVwG3OknCbfkTv6EyR 2Q0MGWEwrR5gkwkUi6s6/GNYXPCn4e0mOug2hdPUSkXKTPlFTaDrDD67+R3OcNqyXi4B LhcFVRUhJOcJiZpAB5y1uZ1SeRLXtipC9bextMxgb6m+29t8bpeGQGUhPSZ51cTsgfzl 3ZUf3Cdk0d067FZCgVb92vHfwWU/1GABVttcxXGAMl4aV9NqRqtjZ2AQVScq95pb174a eEmyn8c9aGUtPHTPhyarGpQcjy4vV17/Bged3dLacUmV2v5xRZJYAvF6Ru6yylUSlux/ P32A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=hb0pZHUi; 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=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id js15-20020a17090797cf00b007ade82b938asi1286932ejc.784.2022.10.31.14.19.22; Mon, 31 Oct 2022 14:19:23 -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=@gmail.com header.s=20210112 header.b=hb0pZHUi; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BD3EB68BE49; Mon, 31 Oct 2022 23:19:01 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oa1-f48.google.com (mail-oa1-f48.google.com [209.85.160.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0296C68BD8A for ; Mon, 31 Oct 2022 23:18:55 +0200 (EET) Received: by mail-oa1-f48.google.com with SMTP id 586e51a60fabf-13c2cfd1126so14840091fac.10 for ; Mon, 31 Oct 2022 14:18:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=VPN3nrXcN0g5CdqIVnQKMgVWpGWKQ4umtEc7U9GG1aA=; b=hb0pZHUikATT0sDAW7aIF5vgDA8SXl/PrN4+D6RoU/hQeQkG7JGjaIyLfvJ+nvyHH8 4JAh0bbbwVSo7t+cJXKYZFL17wbWq6xkXRr3wdu5zkI1YR8IoGRvWASbCXz8kcdP13wz /vGoTvAejfwdix7ZkbVoPwi8+6u4QZztkpnUm1fs4pwwr3rTGO0lUhR0bUAv0wAKQJXl sBboFuOX9HRQu1PuJqWzO8Uo3rAtaybAM2Lb0zXNqwiZaAPFF8PuLwHmECCOz2EYlP0I i3LdPviGZVe1WEQnLRHX75SVX17Lv+tQgCukbtxNOgN/J5egqjDpgkA4XGrLmoYjrbnp zIDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VPN3nrXcN0g5CdqIVnQKMgVWpGWKQ4umtEc7U9GG1aA=; b=OrkUrACL2EPwax9hqhqUq406E9kIV1IGyQlV9KFIHKpYFns8/s0CXXBGwqSSOAAREG OMge12yasOgch3un3oY1GIikZ0J00iX3bkKL4hVzJ1sXtF8SU/B39fPv81NF70rcClif ou7zWN0RErFbuS00b+EzEfZZ50Nz+Mw7mmJzW0nXHsUoBiDd1PmhiZ1duddupnZPGQyo JteYiU7K0gul56leyD0GVXDUQOjsPpfeI+GHkRe3iogVGE+cQX+6XYWTvh3rwVctVha+ aIYbYr1U55XJ4j/Y3GiyQRnHiPn9wBwffnYIOf/StsXp/S5n+xWC50khdkNGoh3BDXUa eJwA== X-Gm-Message-State: ACrzQf2X998Aaa/IGshk3sC5ru35krAXEKhNCN6HNx+oJgWT7/v0HBVN 3qw1cbg1OKlN+Llg5olze0+2cOSz75I= X-Received: by 2002:a05:6870:8092:b0:13c:a773:cac9 with SMTP id q18-20020a056870809200b0013ca773cac9mr8261744oab.146.1667251133257; Mon, 31 Oct 2022 14:18:53 -0700 (PDT) Received: from localhost.localdomain ([191.97.187.183]) by smtp.gmail.com with ESMTPSA id x26-20020a9d629a000000b006619dd066fbsm3183892otk.5.2022.10.31.14.18.52 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Oct 2022 14:18:52 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Mon, 31 Oct 2022 18:18:32 -0300 Message-Id: <20221031211832.8213-4-jamrial@gmail.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221031211554.8176-1-jamrial@gmail.com> References: <20221031211554.8176-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 6/6] avcodec/aacdec: refactor the channel layout derivation code 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: FeR34gHsrdDt Generalize the checks for channels in all positions, and properly support the three height groups (normal, top, bottom) instead of manually setting the relevant channels for the latter two after the normal height tags were parsed. Signed-off-by: James Almer --- libavcodec/aacdec_template.c | 256 ++++++++++++----------------------- libavcodec/aacdectab.h | 27 +++- 2 files changed, 107 insertions(+), 176 deletions(-) diff --git a/libavcodec/aacdec_template.c b/libavcodec/aacdec_template.c index 4a88aeae1d..245fd9f6fe 100644 --- a/libavcodec/aacdec_template.c +++ b/libavcodec/aacdec_template.c @@ -238,13 +238,13 @@ static int assign_pair(struct elem_to_channel e2c_vec[MAX_ELEM_ID], } static int count_paired_channels(uint8_t (*layout_map)[3], int tags, int pos, - int *current) + int current) { int num_pos_channels = 0; int first_cpe = 0; int sce_parity = 0; int i; - for (i = *current; i < tags; i++) { + for (i = current; i < tags; i++) { if (layout_map[i][2] != pos) break; if (layout_map[i][0] == TYPE_CPE) { @@ -259,207 +259,117 @@ static int count_paired_channels(uint8_t (*layout_map)[3], int tags, int pos, first_cpe = 1; } else { num_pos_channels++; - sce_parity ^= 1; + sce_parity ^= (pos != AAC_CHANNEL_LFE); } } if (sce_parity && - ((pos == AAC_CHANNEL_FRONT && first_cpe) || pos == AAC_CHANNEL_SIDE)) + (pos == AAC_CHANNEL_FRONT && first_cpe)) return -1; - *current = i; + return num_pos_channels; } -#define PREFIX_FOR_22POINT2 (AV_CH_LAYOUT_7POINT1_WIDE_BACK|AV_CH_BACK_CENTER|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT|AV_CH_LOW_FREQUENCY_2) -static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags) +static int assign_channels(struct elem_to_channel e2c_vec[MAX_ELEM_ID], uint8_t (*layout_map)[3], + uint64_t *layout, int tags, int layer, int pos, int *current) { - int i, n, total_non_cc_elements; - struct elem_to_channel e2c_vec[4 * MAX_ELEM_ID] = { { 0 } }; - int num_front_channels, num_side_channels, num_back_channels; - uint64_t layout = 0; + int i = *current, j = 0; + int nb_channels = count_paired_channels(layout_map, tags, pos, i); - if (FF_ARRAY_ELEMS(e2c_vec) < tags) + if (nb_channels < 0 || nb_channels > 5) return 0; - i = 0; - num_front_channels = - count_paired_channels(layout_map, tags, AAC_CHANNEL_FRONT, &i); - if (num_front_channels < 0) - return 0; - num_side_channels = - count_paired_channels(layout_map, tags, AAC_CHANNEL_SIDE, &i); - if (num_side_channels < 0) - return 0; - num_back_channels = - count_paired_channels(layout_map, tags, AAC_CHANNEL_BACK, &i); - if (num_back_channels < 0) - return 0; + if (pos == AAC_CHANNEL_LFE) { + while (nb_channels) { + if (aac_channel_map[layer][pos - 1][j] == AV_CHAN_NONE) + return -1; + e2c_vec[i] = (struct elem_to_channel) { + .av_position = 1ULL << aac_channel_map[layer][pos - 1][j], + .syn_ele = layout_map[i][0], + .elem_id = layout_map[i][1], + .aac_position = pos + }; + *layout |= e2c_vec[i].av_position; + i++; + j++; + nb_channels--; + } + *current = i; - if (num_side_channels == 0 && num_back_channels >= 4) { - num_side_channels = 2; - num_back_channels -= 2; + return 0; } - i = 0; - if (num_front_channels & 1) { + while (nb_channels & 1) { + if (aac_channel_map[layer][pos - 1][0] == AV_CHAN_NONE) + return -1; + if (aac_channel_map[layer][pos - 1][0] == AV_CHAN_UNUSED) + break; e2c_vec[i] = (struct elem_to_channel) { - .av_position = AV_CH_FRONT_CENTER, - .syn_ele = TYPE_SCE, + .av_position = 1ULL << aac_channel_map[layer][pos - 1][0], + .syn_ele = layout_map[i][0], .elem_id = layout_map[i][1], - .aac_position = AAC_CHANNEL_FRONT + .aac_position = pos }; - layout |= e2c_vec[i].av_position; + *layout |= e2c_vec[i].av_position; i++; - num_front_channels--; + nb_channels--; } - if (num_front_channels >= 4) { - i += assign_pair(e2c_vec, layout_map, i, - AV_CH_FRONT_LEFT_OF_CENTER, - AV_CH_FRONT_RIGHT_OF_CENTER, - AAC_CHANNEL_FRONT, &layout); - num_front_channels -= 2; - } - if (num_front_channels >= 2) { - i += assign_pair(e2c_vec, layout_map, i, - AV_CH_FRONT_LEFT, - AV_CH_FRONT_RIGHT, - AAC_CHANNEL_FRONT, &layout); - num_front_channels -= 2; - } - if (num_front_channels) - return 0; // Non standard PCE defined layout - if (num_side_channels >= 2) { - i += assign_pair(e2c_vec, layout_map, i, - AV_CH_SIDE_LEFT, - AV_CH_SIDE_RIGHT, - AAC_CHANNEL_SIDE, &layout); - num_side_channels -= 2; - } - if (num_side_channels) - return 0; // Non standard PCE defined layout - - if (num_back_channels >= 2) { + j = (pos != AAC_CHANNEL_SIDE) && nb_channels <= 3 ? 3 : 1; + while (nb_channels >= 2) { + if (aac_channel_map[layer][pos - 1][j] == AV_CHAN_NONE || + aac_channel_map[layer][pos - 1][j+1] == AV_CHAN_NONE) + return -1; i += assign_pair(e2c_vec, layout_map, i, - AV_CH_BACK_LEFT, - AV_CH_BACK_RIGHT, - AAC_CHANNEL_BACK, &layout); - num_back_channels -= 2; - } - if (num_back_channels) { + 1ULL << aac_channel_map[layer][pos - 1][j], + 1ULL << aac_channel_map[layer][pos - 1][j+1], + pos, layout); + j += 2; + nb_channels -= 2; + } + while (nb_channels & 1) { + if (aac_channel_map[layer][pos - 1][5] == AV_CHAN_NONE) + return -1; e2c_vec[i] = (struct elem_to_channel) { - .av_position = AV_CH_BACK_CENTER, - .syn_ele = TYPE_SCE, + .av_position = 1ULL << aac_channel_map[layer][pos - 1][5], + .syn_ele = layout_map[i][0], .elem_id = layout_map[i][1], - .aac_position = AAC_CHANNEL_BACK + .aac_position = pos }; - layout |= e2c_vec[i].av_position; + *layout |= e2c_vec[i].av_position; i++; - num_back_channels--; + nb_channels--; } - if (num_back_channels) - return 0; // Non standard PCE defined layout + if (nb_channels) + return -1; - if (i < tags && layout_map[i][2] == AAC_CHANNEL_LFE) { - e2c_vec[i] = (struct elem_to_channel) { - .av_position = AV_CH_LOW_FREQUENCY, - .syn_ele = TYPE_LFE, - .elem_id = layout_map[i][1], - .aac_position = AAC_CHANNEL_LFE - }; - layout |= e2c_vec[i].av_position; - i++; - } - if (i < tags && layout_map[i][2] == AAC_CHANNEL_LFE) { - e2c_vec[i] = (struct elem_to_channel) { - .av_position = AV_CH_LOW_FREQUENCY_2, - .syn_ele = TYPE_LFE, - .elem_id = layout_map[i][1], - .aac_position = AAC_CHANNEL_LFE - }; - layout |= e2c_vec[i].av_position; - i++; - } - while (i < tags && layout_map[i][2] == AAC_CHANNEL_LFE) { - e2c_vec[i] = (struct elem_to_channel) { - .av_position = UINT64_MAX, - .syn_ele = TYPE_LFE, - .elem_id = layout_map[i][1], - .aac_position = AAC_CHANNEL_LFE - }; - i++; - } + *current = i; - // The previous checks would end up at 4 at this point for chan_config 14 - if (layout == AV_CH_LAYOUT_5POINT1_BACK && tags == 5 && i == 4) { - const uint8_t (*reference_layout_map)[3] = aac_channel_layout_map[13]; - for (int j = 0; j < tags; j++) { - if (layout_map[j][0] != reference_layout_map[j][0] || - layout_map[j][2] != reference_layout_map[j][2]) - goto end_of_layout_definition; - } + return 0; +} - i += assign_pair(e2c_vec, layout_map, i, - AV_CH_TOP_FRONT_LEFT, - AV_CH_TOP_FRONT_RIGHT, - AAC_CHANNEL_FRONT, - &layout); - } - // The previous checks would end up at 8 at this point for 22.2 - if (layout == PREFIX_FOR_22POINT2 && tags == 16 && i == 8) { - const uint8_t (*reference_layout_map)[3] = aac_channel_layout_map[12]; - for (int j = 0; j < tags; j++) { - if (layout_map[j][0] != reference_layout_map[j][0] || - layout_map[j][2] != reference_layout_map[j][2]) - goto end_of_layout_definition; - } +static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags) +{ + int i, n, total_non_cc_elements; + struct elem_to_channel e2c_vec[4 * MAX_ELEM_ID] = { { 0 } }; + uint64_t layout = 0; - e2c_vec[i] = (struct elem_to_channel) { - .av_position = AV_CH_TOP_FRONT_CENTER, - .syn_ele = layout_map[i][0], - .elem_id = layout_map[i][1], - .aac_position = layout_map[i][2] - }; layout |= e2c_vec[i].av_position; i++; - i += assign_pair(e2c_vec, layout_map, i, - AV_CH_TOP_FRONT_LEFT, - AV_CH_TOP_FRONT_RIGHT, - AAC_CHANNEL_FRONT, - &layout); - i += assign_pair(e2c_vec, layout_map, i, - AV_CH_TOP_SIDE_LEFT, - AV_CH_TOP_SIDE_RIGHT, - AAC_CHANNEL_SIDE, - &layout); - e2c_vec[i] = (struct elem_to_channel) { - .av_position = AV_CH_TOP_CENTER, - .syn_ele = layout_map[i][0], - .elem_id = layout_map[i][1], - .aac_position = layout_map[i][2] - }; layout |= e2c_vec[i].av_position; i++; - i += assign_pair(e2c_vec, layout_map, i, - AV_CH_TOP_BACK_LEFT, - AV_CH_TOP_BACK_RIGHT, - AAC_CHANNEL_BACK, - &layout); - e2c_vec[i] = (struct elem_to_channel) { - .av_position = AV_CH_TOP_BACK_CENTER, - .syn_ele = layout_map[i][0], - .elem_id = layout_map[i][1], - .aac_position = layout_map[i][2] - }; layout |= e2c_vec[i].av_position; i++; - e2c_vec[i] = (struct elem_to_channel) { - .av_position = AV_CH_BOTTOM_FRONT_CENTER, - .syn_ele = layout_map[i][0], - .elem_id = layout_map[i][1], - .aac_position = layout_map[i][2] - }; layout |= e2c_vec[i].av_position; i++; - i += assign_pair(e2c_vec, layout_map, i, - AV_CH_BOTTOM_FRONT_LEFT, - AV_CH_BOTTOM_FRONT_RIGHT, - AAC_CHANNEL_FRONT, - &layout); - } + if (FF_ARRAY_ELEMS(e2c_vec) < tags) + return 0; -end_of_layout_definition: + for (n = 0, i = 0; n < 3 && i < tags; n++) { + int ret = assign_channels(e2c_vec, layout_map, &layout, tags, n, AAC_CHANNEL_FRONT, &i); + if (ret < 0) + return 0; + ret = assign_channels(e2c_vec, layout_map, &layout, tags, n, AAC_CHANNEL_SIDE, &i); + if (ret < 0) + return 0; + ret = assign_channels(e2c_vec, layout_map, &layout, tags, n, AAC_CHANNEL_BACK, &i); + if (ret < 0) + return 0; + ret = assign_channels(e2c_vec, layout_map, &layout, tags, n, AAC_CHANNEL_LFE, &i); + if (ret < 0) + return 0; + } total_non_cc_elements = n = i; @@ -655,7 +565,7 @@ static int set_default_channel_config(AACContext *ac, AVCodecContext *avctx, * 7.1 layout was intended. */ if (channel_config == 7 && avctx->strict_std_compliance < FF_COMPLIANCE_STRICT) { - layout_map[2][2] = AAC_CHANNEL_SIDE; + layout_map[2][2] = AAC_CHANNEL_BACK; if (!ac || !ac->warned_71_wide++) { av_log(avctx, AV_LOG_INFO, "Assuming an incorrectly encoded 7.1 channel layout" diff --git a/libavcodec/aacdectab.h b/libavcodec/aacdectab.h index 0e5e47da64..41f1db781d 100644 --- a/libavcodec/aacdectab.h +++ b/libavcodec/aacdectab.h @@ -49,12 +49,12 @@ static const uint8_t aac_channel_layout_map[16][16][3] = { { { 0, } }, { { 0, } }, { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 1, AAC_CHANNEL_BACK }, { TYPE_SCE, 1, AAC_CHANNEL_BACK }, { TYPE_LFE, 0, AAC_CHANNEL_LFE }, }, - { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 1, AAC_CHANNEL_SIDE }, { TYPE_CPE, 2, AAC_CHANNEL_BACK }, { TYPE_LFE, 0, AAC_CHANNEL_LFE }, }, + { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 1, AAC_CHANNEL_BACK }, { TYPE_CPE, 2, AAC_CHANNEL_BACK }, { TYPE_LFE, 0, AAC_CHANNEL_LFE }, }, { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, // SCE1 = FC, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, // CPE1 = FLc and FRc, { TYPE_CPE, 1, AAC_CHANNEL_FRONT }, // CPE2 = FL and FR, - { TYPE_CPE, 2, AAC_CHANNEL_SIDE }, // CPE3 = SiL and SiR, + { TYPE_CPE, 2, AAC_CHANNEL_BACK }, // CPE3 = SiL and SiR, { TYPE_CPE, 3, AAC_CHANNEL_BACK }, // CPE4 = BL and BR, { TYPE_SCE, 1, AAC_CHANNEL_BACK }, // SCE2 = BC, { TYPE_LFE, 0, AAC_CHANNEL_LFE }, // LFE1 = LFE1, @@ -62,7 +62,7 @@ static const uint8_t aac_channel_layout_map[16][16][3] = { { TYPE_SCE, 2, AAC_CHANNEL_FRONT }, // SCE3 = TpFC, { TYPE_CPE, 4, AAC_CHANNEL_FRONT }, // CPE5 = TpFL and TpFR, { TYPE_CPE, 5, AAC_CHANNEL_SIDE }, // CPE6 = TpSiL and TpSiR, - { TYPE_SCE, 3, AAC_CHANNEL_FRONT }, // SCE4 = TpC, + { TYPE_SCE, 3, AAC_CHANNEL_SIDE }, // SCE4 = TpC, { TYPE_CPE, 6, AAC_CHANNEL_BACK }, // CPE7 = TpBL and TpBR, { TYPE_SCE, 4, AAC_CHANNEL_BACK }, // SCE5 = TpBC, { TYPE_SCE, 5, AAC_CHANNEL_FRONT }, // SCE6 = BtFC, @@ -72,6 +72,27 @@ static const uint8_t aac_channel_layout_map[16][16][3] = { { { 0, } }, }; +static const int16_t aac_channel_map[3][4][6] = { + { + { AV_CHAN_FRONT_CENTER, AV_CHAN_FRONT_LEFT_OF_CENTER, AV_CHAN_FRONT_RIGHT_OF_CENTER, AV_CHAN_FRONT_LEFT, AV_CHAN_FRONT_RIGHT, AV_CHAN_NONE }, + { AV_CHAN_UNUSED, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE }, + { AV_CHAN_UNUSED, AV_CHAN_SIDE_LEFT, AV_CHAN_SIDE_RIGHT, AV_CHAN_BACK_LEFT, AV_CHAN_BACK_RIGHT, AV_CHAN_BACK_CENTER }, + { AV_CHAN_LOW_FREQUENCY, AV_CHAN_LOW_FREQUENCY_2, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE }, + }, + { + { AV_CHAN_TOP_FRONT_CENTER, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_TOP_FRONT_LEFT, AV_CHAN_TOP_FRONT_RIGHT, AV_CHAN_NONE }, + { AV_CHAN_UNUSED, AV_CHAN_TOP_SIDE_LEFT, AV_CHAN_TOP_SIDE_RIGHT, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_TOP_CENTER}, + { AV_CHAN_UNUSED, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_TOP_BACK_LEFT, AV_CHAN_TOP_BACK_RIGHT, AV_CHAN_TOP_BACK_CENTER}, + { AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE}, + }, + { + { AV_CHAN_BOTTOM_FRONT_CENTER, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_BOTTOM_FRONT_LEFT, AV_CHAN_BOTTOM_FRONT_RIGHT, AV_CHAN_NONE }, + { AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE }, + { AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE }, + { AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE, AV_CHAN_NONE }, + }, +}; + #if FF_API_OLD_CHANNEL_LAYOUT static const uint64_t aac_channel_layout[] = { AV_CH_LAYOUT_MONO,