From patchwork Tue Sep 26 22:17:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 43954 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:2a18:b0:15d:8365:d4b8 with SMTP id e24csp2210861pzh; Tue, 26 Sep 2023 15:22:32 -0700 (PDT) X-Google-Smtp-Source: AGHT+IF0oGZkmD68ENaIlntiA1j92wRfHgKiOvGcDKAafT7SPQl4g9MuNiQrlaTKo3jY1gIGA0FI X-Received: by 2002:aa7:cf17:0:b0:531:3c4e:98bc with SMTP id a23-20020aa7cf17000000b005313c4e98bcmr303783edy.8.1695766952755; Tue, 26 Sep 2023 15:22:32 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id q21-20020aa7da95000000b00528497fa1dfsi11307625eds.584.2023.09.26.15.22.31; Tue, 26 Sep 2023 15:22:32 -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=@outlook.com header.s=selector1 header.b=clJbkvDN; arc=fail (body hash mismatch); 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=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7038568CB65; Wed, 27 Sep 2023 01:20:33 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01olkn2098.outbound.protection.outlook.com [40.92.64.98]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 875A568CAB1 for ; Wed, 27 Sep 2023 01:20:29 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=chWePXeMcGBhV3GQbnd9a3TzZBZctX5m/9Y7uK9AJgSLExP59LPxxU6e5uSENqWPxqRwg9c3hn5JPzCUXfVpYG2hcYT8DRh9clvdVNjz3SRbdK3lZZvn7f0esaWv9QQoSbtnRD6nT7QkAkFqrwWdGrw/kRP+p1wYhx6XEvHRLPgunHhn+fuj+h2kP1r9N8frcduXZcziD2zLaE+iXXHKTNFaIP3qswR5a6MkezDjnvGLCqTXjmZkSGO/E0asznZwuMWtTobGcgnho1Wdq4/qReBngQVC4PS/kmi5jACuyUHbcu5Y1xusWflO+JxbbeuosADa4M6xI/L01RiioGz4hQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Tqp/ABVSGpjnwYUWO+c/m2dPYgf73Qr7ewqr+375KRs=; b=O/xY1euCVR26VlkO25hi9pNh0PynibyZAulYG05DCzUnLXEqFLN1AXkY+cZzGD1aP9+yz4p1lMAYM1T/ZpqG6g5q5MIeO/Drkw43UuM621HVUUcA3LD6ZEjr9J+Bd3jeRBaP/8KXFuAu7oQ/PanMvd0kxIjeBGh9dRHCiqZVuj1Yy/Ryxv2udJlLrLOMGTShBh446+HGrBppGjzMLuWeMqoYXwDnUgrvw8cpxmZG4niZxTn87UEwYLdmiIw353OLv1Fe3pvy2sieSB2BiokNaTSw3mHdlocVD7mlkVYSxfPwECa0Eu1tUZutPwhJvVGsc+td7vWvVn1AwnF5CFx3xg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Tqp/ABVSGpjnwYUWO+c/m2dPYgf73Qr7ewqr+375KRs=; b=clJbkvDNiarbkHWS98c2pXhjsTds2zq+nm2PXUmsKAzWJ3kyjw4tV1/xftUJ8vu4jBGce487C7bkBNlQSWnvRf+xc/0lbZ3j3Z47XoZUU1XAp9mL2Sc7n+7UlUKvGeSi2tPK6CDzfedroGojpSTKxsqpY0rZgaO15loTS5HLC9rFox8ufc90PsIXkwqCFV+DfWBtUS/mrMg9n2od09G6UEEyxSI7dlBETX3C73QYk1NatabuKJYzORZNe+ulRosWfVagv2cNEMOxX8qbxRodvjJZb6+gh4QsU16Xg0G5vRveFf0gljFoJj/t86pctr0zxe+x1DsEPmQvTdN6t+qZjg== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by AS8P250MB0393.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:37e::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6813.28; Tue, 26 Sep 2023 22:20:26 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::9d42:7b4f:71ef:c76a]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::9d42:7b4f:71ef:c76a%3]) with mapi id 15.20.6813.027; Tue, 26 Sep 2023 22:20:26 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Sep 2023 00:17:13 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [YFewN+GbvawVi9gxAJxiSEP8NEITLB8Z] X-ClientProxiedBy: FR3P281CA0019.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1c::6) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <20230926221732.3711507-41-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|AS8P250MB0393:EE_ X-MS-Office365-Filtering-Correlation-Id: 7cc86c83-4bdd-4e58-a701-08dbbedec8e9 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: dqGJbpW++aTDhWDOflUudNtjlw+u1TGYBuFT7oiffQzIUPItpkYFq1oWJAB0Esx7zBWvG7cwjgg+ZXzVjUlD1gRmtfJozpybu+PvvUKMdbjPcyk1oVX4vcT/wfw1YU8/3N4SZWRyEDD5ThhlV5ogWwhtxJXvo9mLSpBz8tQ0FuzulgvZZIqITqjVCKn1+ns3ldcCwZpQpB/FrG/AOir/pyxutws9nlZjx+4Dp4U0CSJZd9kBAzv+cDQpxrgAt/a1tk1FX84eKa8hGsYqplG2j65yvaaKz2CsvtBeKWb05/jjS7hdTB8XvP8LRbH8bb39Or2IUyx/tQwJANIQ0DDZV6AsEGpXEsO/70Wu/LBb3jbWmQ+PJvKPcXfTzocSB7hU/a53G1LVtQWISUFJnw+I1nnf8lpMW+JutB8A3XYtF0n7swLSi1uOJhVYPKTrzc3VVqfXeFHLgUC9M1HPbGCk8T2Zju8o8E0bAq6qe2osebzHq9Br02yN7ViQEuEFUvWEP5QEJ1WCzfJDbJOipyJzGCWoeIQLyl+hn6L3+e+EERGYXZr8ZTCjgWIZBSXS0kGp5sNyoUiholsEQkxMbHuMtVy+dTsmu/lp/fKxZv4wKcPXSqCB72vVO3QGoKMh1iTw X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: m1+cHGfWFY46WTuNmNMtGqXADej1QwF7KghqBNNwyDYrG2UeDSPTQWHXh9wW1WFnwjmTv2ODPKry9ckHjbgtclMEwgVyUastHVDyIQEg6Y9dTY6mQJKyZHN5SByAAHf6JfRt6evnogbedfo438EQObsViM5+nRRNqd6Xj2qrWgFjJoVP94/A7G1pGCbU3rHjqwLjX6o2ym6KLvvxFJ8Wi3l/7C20GQLW6obny3xPtQw/FnNxE5eYe5DavDjRG1+DedtJGRUsv5X5LG1A4NqR5Cb//MhdX1SrwWeD1V26nTIP9Yg1S4N8WpiLB38lA73QTOCTeRpOFIAenm/infxUrIPcS0aQUONT8rCasbyhyWiIqUqS+U20vskGeZMa3W4gifBnd/Jxtgnbham2UCz7QJYURsg7Rb0670BU1JIoBeoUzag4qcdHaSOErYs+jm1Ki5SPxpL0NrI+h+jeHzh4F7HedKK3IodcfFrbX3+ZGlsue0C8TLK7x+s+/UGsSLK1S4qwRcinmuxVrKv2aDP2NYX4ewDg2C5/fhitVB/MxPPrGfHdkz0j8pUxDIINJv00lWjKEmaEzMLQrTJweMllWAmGLF74cSPu9xjxb6csl6Ul60SQafFOagMVXsQLyAhKtFtm6cWh+u3XG0+UdJJdmgXqIg1pKXVganUxf/BVrevZeJ4tcb1jQ1nNx+1VCkfM9PToKi6cjbuDlWauxvYZ8FT0faakHlIBfcHR1BAszxZC5Q5oQhg+RFkWZBYueyay89xWQ08/NWp9GvjiGIIj79RZnkU0Pv3lQ0E/8AttXG5atHgdvat3FoP8VwHs/amzldFz6C6NqV9JayjCBBqIWtivMdZEJfOojyrkEewtF7uMRc4irlsao76n1U+M3vDcX3KnN7hwyGsP7KXLVTcYDfDdONKF4NQfD2667wSN4WYwedqk7PLh3T7camQUwhBklKJTT7Ywqn8IGlbQw2JRlKSe5NSMVkWkkWRCHIvf0GWW8JHftKRpyC85uXro+RYufGGEDwlgXtqJ4jSnDNXKOSkaNdbyAYni2ofEbzCuch7xPZTkIXE1wFPofqkWF2TJOKaYijqG/OEmiG9nHTA1NdPCoHg0dsMf195CxI60KlBMdlIRRIdb+iSXiPXoVy+IJcqzFtjhqvo/5hv/lycwTfPY4GtvCxW6Lo0PjKn60MzKShByLA7kkZIPP7PprUc1AK6ZqA47cVs49gWSbumjQbisS6oF9ppz4l+ZuudTwnX0E4bPHXguio9gJQP6N4H5 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7cc86c83-4bdd-4e58-a701-08dbbedec8e9 X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Sep 2023 22:20:26.8392 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8P250MB0393 Subject: [FFmpeg-devel] [PATCH 42/61] avcodec/aacdectab: Deduplicate common decoder tables 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: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: tlcMo56dgrUJ Signed-off-by: Andreas Rheinhardt --- libavcodec/Makefile | 6 +- libavcodec/aacdec.c | 8 +-- libavcodec/aacdec_common.c | 119 +++++++++++++++++++++++++++++++++++ libavcodec/aacdec_fixed.c | 4 +- libavcodec/aacdec_template.c | 36 +++++------ libavcodec/aacdectab.h | 95 +++------------------------- 6 files changed, 154 insertions(+), 114 deletions(-) create mode 100644 libavcodec/aacdec_common.c diff --git a/libavcodec/Makefile b/libavcodec/Makefile index 9e96892365..d4c21474ec 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -180,10 +180,12 @@ OBJS-$(CONFIG_WMV2DSP) += wmv2dsp.o OBJS-$(CONFIG_ZERO12V_DECODER) += 012v.o OBJS-$(CONFIG_A64MULTI_ENCODER) += a64multienc.o elbg.o OBJS-$(CONFIG_A64MULTI5_ENCODER) += a64multienc.o elbg.o -OBJS-$(CONFIG_AAC_DECODER) += aacdec.o aactab.o aacsbr.o aacps_common.o aacps_float.o \ +OBJS-$(CONFIG_AAC_DECODER) += aacdec.o aacdec_common.o aactab.o \ + aacsbr.o aacps_common.o aacps_float.o \ kbdwin.o \ sbrdsp.o aacpsdsp_float.o cbrt_data.o -OBJS-$(CONFIG_AAC_FIXED_DECODER) += aacdec_fixed.o aactab.o aacsbr_fixed.o aacps_common.o aacps_fixed.o \ +OBJS-$(CONFIG_AAC_FIXED_DECODER) += aacdec_fixed.o aacdec_common.o aactab.o \ + aacsbr_fixed.o aacps_common.o aacps_fixed.o \ kbdwin.o \ sbrdsp_fixed.o aacpsdsp_fixed.o cbrt_data_fixed.o OBJS-$(CONFIG_AAC_ENCODER) += aacenc.o aaccoder.o aacenctab.o \ diff --git a/libavcodec/aacdec.c b/libavcodec/aacdec.c index ca31540d3c..d66ebf4a7c 100644 --- a/libavcodec/aacdec.c +++ b/libavcodec/aacdec.c @@ -564,8 +564,8 @@ const FFCodec ff_aac_decoder = { }, .p.capabilities = AV_CODEC_CAP_CHANNEL_CONF | AV_CODEC_CAP_DR1, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, - CODEC_OLD_CHANNEL_LAYOUTS_ARRAY(aac_channel_layout) - .p.ch_layouts = aac_ch_layout, + CODEC_OLD_CHANNEL_LAYOUTS_ARRAY(ff_aac_channel_layout) + .p.ch_layouts = ff_aac_ch_layout, .flush = flush, .p.priv_class = &aac_decoder_class, .p.profiles = NULL_IF_CONFIG_SMALL(ff_aac_profiles), @@ -590,8 +590,8 @@ const FFCodec ff_aac_latm_decoder = { }, .p.capabilities = AV_CODEC_CAP_CHANNEL_CONF | AV_CODEC_CAP_DR1, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, - CODEC_OLD_CHANNEL_LAYOUTS_ARRAY(aac_channel_layout) - .p.ch_layouts = aac_ch_layout, + CODEC_OLD_CHANNEL_LAYOUTS_ARRAY(ff_aac_channel_layout) + .p.ch_layouts = ff_aac_ch_layout, .flush = flush, .p.profiles = NULL_IF_CONFIG_SMALL(ff_aac_profiles), }; diff --git a/libavcodec/aacdec_common.c b/libavcodec/aacdec_common.c new file mode 100644 index 0000000000..c75c6fadc6 --- /dev/null +++ b/libavcodec/aacdec_common.c @@ -0,0 +1,119 @@ +/* + * Common code and tables of the AAC fixed- and floating-point decoders + * Copyright (c) 2005-2006 Oded Shimon ( ods15 ods15 dyndns org ) + * Copyright (c) 2006-2007 Maxim Gavrilov ( maxim.gavrilov gmail com ) + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * @file + * Common code and tables of the AAC fixed- and floating-point decoders + */ + +#include "aac.h" +#include "aacdectab.h" + +const int8_t ff_tags_per_config[16] = { 0, 1, 1, 2, 3, 3, 4, 5, 0, 0, 0, 5, 5, 16, 5, 0 }; + +const uint8_t ff_aac_channel_layout_map[16][16][3] = { + { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, }, + { { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, }, + { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, }, + { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, { TYPE_SCE, 1, AAC_CHANNEL_BACK }, }, + { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 1, AAC_CHANNEL_BACK }, }, + { { 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_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 1, AAC_CHANNEL_FRONT }, { TYPE_CPE, 2, AAC_CHANNEL_BACK }, { TYPE_LFE, 0, AAC_CHANNEL_LFE }, }, + { { 0, } }, + { { 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_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_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, + { TYPE_LFE, 1, AAC_CHANNEL_LFE }, // LFE2 = LFE2, + { 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_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, + { 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, } }, +}; + +const int16_t ff_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 +const uint64_t ff_aac_channel_layout[] = { + AV_CH_LAYOUT_MONO, + AV_CH_LAYOUT_STEREO, + AV_CH_LAYOUT_SURROUND, + AV_CH_LAYOUT_4POINT0, + AV_CH_LAYOUT_5POINT0_BACK, + AV_CH_LAYOUT_5POINT1_BACK, + AV_CH_LAYOUT_7POINT1_WIDE_BACK, + AV_CH_LAYOUT_6POINT1_BACK, + AV_CH_LAYOUT_7POINT1, + AV_CH_LAYOUT_22POINT2, + AV_CH_LAYOUT_7POINT1_TOP_BACK, + 0, +}; +#endif + +const AVChannelLayout ff_aac_ch_layout[] = { + AV_CHANNEL_LAYOUT_MONO, + AV_CHANNEL_LAYOUT_STEREO, + AV_CHANNEL_LAYOUT_SURROUND, + AV_CHANNEL_LAYOUT_4POINT0, + AV_CHANNEL_LAYOUT_5POINT0_BACK, + AV_CHANNEL_LAYOUT_5POINT1_BACK, + AV_CHANNEL_LAYOUT_7POINT1_WIDE_BACK, + AV_CHANNEL_LAYOUT_6POINT1_BACK, + AV_CHANNEL_LAYOUT_7POINT1, + AV_CHANNEL_LAYOUT_22POINT2, + AV_CHANNEL_LAYOUT_7POINT1_TOP_BACK, + { 0 }, +}; diff --git a/libavcodec/aacdec_fixed.c b/libavcodec/aacdec_fixed.c index 46f0ebf91b..2b8ac67659 100644 --- a/libavcodec/aacdec_fixed.c +++ b/libavcodec/aacdec_fixed.c @@ -465,8 +465,8 @@ const FFCodec ff_aac_fixed_decoder = { }, .p.capabilities = AV_CODEC_CAP_CHANNEL_CONF | AV_CODEC_CAP_DR1, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, - CODEC_OLD_CHANNEL_LAYOUTS_ARRAY(aac_channel_layout) - .p.ch_layouts = aac_ch_layout, + CODEC_OLD_CHANNEL_LAYOUTS_ARRAY(ff_aac_channel_layout) + .p.ch_layouts = ff_aac_ch_layout, .p.priv_class = &aac_decoder_class, .p.profiles = NULL_IF_CONFIG_SMALL(ff_aac_profiles), .flush = flush, diff --git a/libavcodec/aacdec_template.c b/libavcodec/aacdec_template.c index 51a4cb2b66..3fb9a01da5 100644 --- a/libavcodec/aacdec_template.c +++ b/libavcodec/aacdec_template.c @@ -283,10 +283,10 @@ static int assign_channels(struct elem_to_channel e2c_vec[MAX_ELEM_ID], uint8_t if (pos == AAC_CHANNEL_LFE) { while (nb_channels) { - if (aac_channel_map[layer][pos - 1][j] == AV_CHAN_NONE) + if (ff_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], + .av_position = 1ULL << ff_aac_channel_map[layer][pos - 1][j], .syn_ele = layout_map[i][0], .elem_id = layout_map[i][1], .aac_position = pos @@ -302,12 +302,12 @@ static int assign_channels(struct elem_to_channel e2c_vec[MAX_ELEM_ID], uint8_t } while (nb_channels & 1) { - if (aac_channel_map[layer][pos - 1][0] == AV_CHAN_NONE) + if (ff_aac_channel_map[layer][pos - 1][0] == AV_CHAN_NONE) return -1; - if (aac_channel_map[layer][pos - 1][0] == AV_CHAN_UNUSED) + if (ff_aac_channel_map[layer][pos - 1][0] == AV_CHAN_UNUSED) break; e2c_vec[i] = (struct elem_to_channel) { - .av_position = 1ULL << aac_channel_map[layer][pos - 1][0], + .av_position = 1ULL << ff_aac_channel_map[layer][pos - 1][0], .syn_ele = layout_map[i][0], .elem_id = layout_map[i][1], .aac_position = pos @@ -319,21 +319,21 @@ static int assign_channels(struct elem_to_channel e2c_vec[MAX_ELEM_ID], uint8_t 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) + if (ff_aac_channel_map[layer][pos - 1][j] == AV_CHAN_NONE || + ff_aac_channel_map[layer][pos - 1][j+1] == AV_CHAN_NONE) return -1; i += assign_pair(e2c_vec, layout_map, i, - 1ULL << aac_channel_map[layer][pos - 1][j], - 1ULL << aac_channel_map[layer][pos - 1][j+1], + 1ULL << ff_aac_channel_map[layer][pos - 1][j], + 1ULL << ff_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) + if (ff_aac_channel_map[layer][pos - 1][5] == AV_CHAN_NONE) return -1; e2c_vec[i] = (struct elem_to_channel) { - .av_position = 1ULL << aac_channel_map[layer][pos - 1][5], + .av_position = 1ULL << ff_aac_channel_map[layer][pos - 1][5], .syn_ele = layout_map[i][0], .elem_id = layout_map[i][1], .aac_position = pos @@ -552,8 +552,8 @@ static int set_default_channel_config(AACContext *ac, AVCodecContext *avctx, channel_config); return AVERROR_INVALIDDATA; } - *tags = tags_per_config[channel_config]; - memcpy(layout_map, aac_channel_layout_map[channel_config - 1], + *tags = ff_tags_per_config[channel_config]; + memcpy(layout_map, ff_aac_channel_layout_map[channel_config - 1], *tags * sizeof(*layout_map)); /* @@ -661,7 +661,7 @@ static ChannelElement *get_che(AACContext *ac, int type, int elem_id) * SCE[0] CPE[0] CPE[1] LFE[0]. * If we seem to have encountered such a stream, transfer * the LFE[0] element to the SCE[1]'s mapping */ - if (ac->tags_mapped == tags_per_config[ac->oc[1].m4ac.chan_config] - 1 && (type == TYPE_LFE || type == TYPE_SCE)) { + if (ac->tags_mapped == ff_tags_per_config[ac->oc[1].m4ac.chan_config] - 1 && (type == TYPE_LFE || type == TYPE_SCE)) { if (!ac->warned_remapping_once && (type != TYPE_LFE || elem_id != 0)) { av_log(ac->avctx, AV_LOG_WARNING, "This stream seems to incorrectly report its last channel as %s[%d], mapping to LFE[0]\n", @@ -683,7 +683,7 @@ static ChannelElement *get_che(AACContext *ac, int type, int elem_id) * SCE[0] CPE[0] SCE[1]. * If we seem to have encountered such a stream, transfer * the SCE[1] element to the LFE[0]'s mapping */ - if (ac->tags_mapped == tags_per_config[ac->oc[1].m4ac.chan_config] - 1 && (type == TYPE_LFE || type == TYPE_SCE)) { + if (ac->tags_mapped == ff_tags_per_config[ac->oc[1].m4ac.chan_config] - 1 && (type == TYPE_LFE || type == TYPE_SCE)) { if (!ac->warned_remapping_once && (type != TYPE_SCE || elem_id != 1)) { av_log(ac->avctx, AV_LOG_WARNING, "This stream seems to incorrectly report its last channel as %s[%d], mapping to SCE[1]\n", @@ -3091,9 +3091,9 @@ static int aac_decode_er_frame(AVCodecContext *avctx, void *data, chan_config); return AVERROR_INVALIDDATA; } - for (i = 0; i < tags_per_config[chan_config]; i++) { - const int elem_type = aac_channel_layout_map[chan_config-1][i][0]; - const int elem_id = aac_channel_layout_map[chan_config-1][i][1]; + for (i = 0; i < ff_tags_per_config[chan_config]; i++) { + const int elem_type = ff_aac_channel_layout_map[chan_config-1][i][0]; + const int elem_id = ff_aac_channel_layout_map[chan_config-1][i][1]; if (!(che=get_che(ac, elem_type, elem_id))) { av_log(ac->avctx, AV_LOG_ERROR, "channel element %d.%d is not allocated\n", diff --git a/libavcodec/aacdectab.h b/libavcodec/aacdectab.h index 41f1db781d..db6fd0a04f 100644 --- a/libavcodec/aacdectab.h +++ b/libavcodec/aacdectab.h @@ -1,7 +1,5 @@ /* * AAC decoder data - * Copyright (c) 2005-2006 Oded Shimon ( ods15 ods15 dyndns org ) - * Copyright (c) 2006-2007 Maxim Gavrilov ( maxim.gavrilov gmail com ) * * This file is part of FFmpeg. * @@ -30,99 +28,20 @@ #ifndef AVCODEC_AACDECTAB_H #define AVCODEC_AACDECTAB_H -#include "libavutil/channel_layout.h" -#include "aac.h" - #include -static const int8_t tags_per_config[16] = { 0, 1, 1, 2, 3, 3, 4, 5, 0, 0, 0, 5, 5, 16, 5, 0 }; +#include "libavutil/channel_layout.h" + +extern const int8_t ff_tags_per_config[16]; -static const uint8_t aac_channel_layout_map[16][16][3] = { - { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, }, - { { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, }, - { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, }, - { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, { TYPE_SCE, 1, AAC_CHANNEL_BACK }, }, - { { TYPE_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 1, AAC_CHANNEL_BACK }, }, - { { 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_SCE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 0, AAC_CHANNEL_FRONT }, { TYPE_CPE, 1, AAC_CHANNEL_FRONT }, { TYPE_CPE, 2, AAC_CHANNEL_BACK }, { TYPE_LFE, 0, AAC_CHANNEL_LFE }, }, - { { 0, } }, - { { 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_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_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, - { TYPE_LFE, 1, AAC_CHANNEL_LFE }, // LFE2 = LFE2, - { 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_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, - { 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, } }, -}; +extern const uint8_t ff_aac_channel_layout_map[16][16][3]; -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 }, - }, -}; +extern const int16_t ff_aac_channel_map[3][4][6]; #if FF_API_OLD_CHANNEL_LAYOUT -static const uint64_t aac_channel_layout[] = { - AV_CH_LAYOUT_MONO, - AV_CH_LAYOUT_STEREO, - AV_CH_LAYOUT_SURROUND, - AV_CH_LAYOUT_4POINT0, - AV_CH_LAYOUT_5POINT0_BACK, - AV_CH_LAYOUT_5POINT1_BACK, - AV_CH_LAYOUT_7POINT1_WIDE_BACK, - AV_CH_LAYOUT_6POINT1_BACK, - AV_CH_LAYOUT_7POINT1, - AV_CH_LAYOUT_22POINT2, - AV_CH_LAYOUT_7POINT1_TOP_BACK, - 0, -}; +extern const uint64_t ff_aac_channel_layout[]; #endif -static const AVChannelLayout aac_ch_layout[] = { - AV_CHANNEL_LAYOUT_MONO, - AV_CHANNEL_LAYOUT_STEREO, - AV_CHANNEL_LAYOUT_SURROUND, - AV_CHANNEL_LAYOUT_4POINT0, - AV_CHANNEL_LAYOUT_5POINT0_BACK, - AV_CHANNEL_LAYOUT_5POINT1_BACK, - AV_CHANNEL_LAYOUT_7POINT1_WIDE_BACK, - AV_CHANNEL_LAYOUT_6POINT1_BACK, - AV_CHANNEL_LAYOUT_7POINT1, - AV_CHANNEL_LAYOUT_22POINT2, - AV_CHANNEL_LAYOUT_7POINT1_TOP_BACK, - { 0 }, -}; +extern const AVChannelLayout ff_aac_ch_layout[]; #endif /* AVCODEC_AACDECTAB_H */