From patchwork Mon May 6 14:03:04 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 48586 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:e68f:b0:1af:836d:81b3 with SMTP id mz15csp1393617pzb; Mon, 6 May 2024 07:03:26 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCViiPuXH2SxmUXprIOPvGgPVFPpfwgxec/LWEW0r+SRPMX7ji0Up770p9Rt0151nOVpNnsBn0I2YHGc+dLGUg21A/7AK94iyZ2srg== X-Google-Smtp-Source: AGHT+IF5gVqTHpf62zAA5KdLfWDfmprDVv9tl9UiJ02Gi22J3YtzmH7j4kNOdGQ/eFgdz8QNeu/J X-Received: by 2002:a05:6512:559:b0:51f:6d6d:57b with SMTP id h25-20020a056512055900b0051f6d6d057bmr6633313lfl.6.1715004206322; Mon, 06 May 2024 07:03:26 -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 xo11-20020a170907bb8b00b00a59c8641090si1662114ejc.645.2024.05.06.07.03.25; Mon, 06 May 2024 07:03: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=@outlook.com header.s=selector1 header.b=XVFxWYGa; 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 370C268D52B; Mon, 6 May 2024 17:03:21 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03olkn2024.outbound.protection.outlook.com [40.92.59.24]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4DF3868D4D6 for ; Mon, 6 May 2024 17:03:14 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=k9pE0MrG3Q0+D/vdhRDH/3LstxMpF3cVqlm89dBn3b9QU63PDeBznGYxnjg6uGcWgPJu0Y8nSIIFEG6mkbWBW5pqhg6W5WtoRFx8Ky2TABPcxvwX86bnBy/eqn7dvkAMueOBbwRe525fwK6+qbb68wZpdLWTi+xntSOLA3TyQDNi0Sncfq8Ubtf0lyL4grLDW/XdddtMfAWctMOOb4mi9+K4iZ8fBS0CmyvYHM3PlbS4plZosV30t0aMaQBoW3QKDTtcvvmxJAfPLEWpmROXYbxp+p7J1HVpbnrj6xQ+Z9uc+4Q3zXypX3dJ0jpB4HjgX+QGdmxHX7Z6P1swytbR7Q== 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=doLtqkSoBuwHssXWteAFo7T7yhdvUh4WORQYl+ESaoo=; b=C5MZPJsFW9f2YEWR8GmKBx4UlpndiTJzL5fYUbFEJPWMFswc1AMWpSdn1YWWXMaEwwRdrH7JgLcliHGrG5sF/etBu3PAoEjUZL0/fakl/M78hcDrUyqrOx+x3zPgtqMRCR8WlvCumJ4Ix7gqHuA6gjkvewg5JkFmIE3D9bZFh3EoydyC/rk4K8onQ4rrgeSikFz9nMBq/OQfVu2XzdU+jKBNJNVwKK1rhucvX3SmZG7imAcnZWoane3b6k1XjGE+71t+Y0wzxa0Wiw+42b0+d0LvT5DIyKr6uqfgaoIABRmfyVW42CH4VDFIWKv5PTHlxxnyhJPoF8b/qw4TvzbyJg== 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=doLtqkSoBuwHssXWteAFo7T7yhdvUh4WORQYl+ESaoo=; b=XVFxWYGaPRACc8cd878COKtQapDiH+fmARfVVGzTTrPe5CzTinyv+a+msafbMrTpz4i8FpzwzreO5OfCl3qZN8u9hD0LK5gzoA8Q7zXWFskgXlDIgxz2VXT3H7xr3Jn6TzA6EURJHJmTcztrYPNUvnOHS0ruKonpoPDFrzFdWG+8uKZPo0cpJLIgNpBcEKhrzgQHL+xxvBowpMAD6+PqWiKORRQweqNOnIexWwKKnbBaLm07TqdpuxRlrzzHDSCSLGD/PcDTpsP/oQrt+C0wK3SyUadxSqM3p4dTkHuY7VfNs9Ne7I+QnL8gzbeWoezoON5hq8RestCWUyV2KOG+Jw== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by AS4P250MB0560.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:4bc::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7544.41; Mon, 6 May 2024 14:03:12 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::d6a1:e3af:a5f1:b614]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::d6a1:e3af:a5f1:b614%7]) with mapi id 15.20.7544.029; Mon, 6 May 2024 14:03:12 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 6 May 2024 16:03:04 +0200 Message-ID: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: X-TMN: [9ROGtKq3uf0gK5bRoyubIeHW0VXw5fgm1znGn0qYtPg=] X-ClientProxiedBy: ZR2P278CA0021.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:46::17) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <20240506140304.537874-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|AS4P250MB0560:EE_ X-MS-Office365-Filtering-Correlation-Id: 9797c721-ea23-4063-2660-08dc6dd5446c X-Microsoft-Antispam: BCL:0; ARA:14566002|461199019|440099019|3412199016|1710799017; X-Microsoft-Antispam-Message-Info: 1Z/1PQT9fMCFZCZ+C+0iItPVbF64HBa25h6RdvlHXtjs4gtB4da8FhfblMqFhayz99by2pdZYlKpiFwouPGFeKe0f6jX0IDvnHJBJOVg8A7dE4vBrDlQGrP7DixrtRAx77STZTblb1IA7E0L1/8MOrShzljqNEUGo6jOlIdD7VWDkSvR4kPhvILsAzdZ1aqYURbmk4WKM+6wgcN02Z/AwuxVe/8oVzES+qtYAHAAHilh5FLj7pJy7tqXKZSo8eRIQBtf68aqGnvJIjrelLQR91bkkdXTwXTVWlgjgG6YfcZgbRVLV/9+DCUXMUOiZrBR4rYXF4ESME4rDMqqUPHQOlJBfqppH7GoGjbmXU9zWYamSxPfwcUq986dlOX1yBxGArsTvM8LfpwdFtDWdjbOKBbx53A+oOAJU4eSsx2EVebUG1JJgsy3ka6ute4KKmHAlBhrt2UvDA8S5SLdEuTKvqB1u6xvXBm8TxMULFjUmnmZ2YJDX77i1vHpeY3UMMR7RCO65uitzKW2u83ydQu3OLPsrHAh2dp/HudcbimXVHRG8gY4FJ8wj7SNHII8SCorBer4KYQe/tWLGsr6fCiYectlWWlAk4OB1QEfcGYmL5TngD/CCPkfnV25gPc90zla X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: PPloYpoGORjxmLn7j0X17Ss9yxbNw6XTb+X/fQJwGFcaCKd6WUJdLv7/yFz+y59CAzfM7Zza7z6cx2oJsrdQJU+bUU8hvtpZuUMVBglrXNosXHHyiH/tEbRvqa0zvc/5D7tSpKuqrhU2B+8U+ZsgzTfndJJ4DamNP4J74bsv94xzKbFiI8KCEZ7JGaXydx1ICdoGA1OuRMHjxVHh0N3mq2r4cVozHsQceK7rc3RMoVhoBlloHLBN/vOPhIUZc4urIDygpPsmIDpbFI/kBaVdx9XAYzwImVUWPHdFK9i4NvPEJMbXR5gsYY/QX+3IPm+Azwli3IYcpBdXFDaDuqMQZd2OqD7I3nP4qlnSEEgVkNLjo8xKnlfoRQ8MEpkUSLj+KfQEyoRca2oyrDcyQ/lVE8ihikjzXhzvxzQC87QIg+VjR8DFGBxJQ+GAbMDnm7M+S/nz0bsfn4mLHAk7YD8SDiegPjnL4gEAupweCcEy/n8UuEUKrhiTBiVWXeHbCKFD8DJBSTK/A+VAGqWiofX9HeH1fE00KfOtigUGg4OmQJxOX47UdFsAojtsGEIkfnKKn8o0jaff6OfgtS4ELxSGzKlhVu2xut/2Rzx2taLpVYy/LWQqf3MVhl0pvSLtgR3gpRni7sAsCllh6BTUgdbGoLZ58P52Zgp1I8BVC+j4vo/CqkA6hl7geiBkH/K5uHqV7ygJ5/P3yATx6MzMJK9jwo7nkJt4oHE/9Dz2wfNAkp8vzT1uFz0y11WutRkCIeCmQW+QqbthrHlpBmhfYDQBBl3im5W4PGz4Dr9iAm1XxPYMFiGOyd91BMrmL7Om6Gt3o5Jqe1npokdTKZyjEXnuB7JVWKDNlDYcQhjZL+Nx7uViazBvRGVKVdoWbsOc3MdPOMhhEmW3NFqelmKhF69BYbrcUCHpWiKSJua2p2R8Dsb5tFWgvnQWgqUSnrvn++x1+dI0V+8daW2Mknv8kcH2eZj3zRmPhoNPBShqWsl0xAOEAXht21jnQWO6c0PWjhthHdoRcQ1PBs9rd3uUWTxY7zNF2jMiPcVA++F++zwCpcKSWU8FaF90qVsVIK7khBD2Hqdd2gtnhsX63uyvS2vtksD0qT4WHJNIp206iAYgE3TN7pcqiEau5LKmtvs8J3PCbPq+vYksz9arXZXCcTGX1RtaSOTlxzADLMH4j0JIddSqyFr/4WC+TT9F5Qz93H0VNxMaLlzIXujtCPp9yY2jC9+b/O4daLEwy/eb51bX7i6pbjq4YqxtQW1o69AYljQ9h70Hc1g6zo0F8jmfDjLwhQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9797c721-ea23-4063-2660-08dc6dd5446c X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 May 2024 14:03:12.5936 (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: AS4P250MB0560 Subject: [FFmpeg-devel] [PATCH v2 3/12] avcodec/aac/aacdec: Fix linking errors with only one decoder enabled 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: j4gsP6QPif+u The approach used here has the advantage not to rely on any DCE. Also improve certain the checks from 3390693bfb907765f833766f370e0ba8c7894f44 a bit. Signed-off-by: Andreas Rheinhardt --- Now also avoiding the casts in ff_aac_sbr_apply(). libavcodec/aac/aacdec.c | 63 +++++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/libavcodec/aac/aacdec.c b/libavcodec/aac/aacdec.c index c6b93e33a2..4f2a634de7 100644 --- a/libavcodec/aac/aacdec.c +++ b/libavcodec/aac/aacdec.c @@ -63,6 +63,20 @@ #include "libavutil/version.h" #include "libavutil/thread.h" +#if CONFIG_AAC_DECODER && CONFIG_AAC_FIXED_DECODER +#define IS_FIXED(is_fixed) (is_fixed) +#define FIXED_OR_FLOAT_EXT(is_fixed, fixed, float) \ + ((is_fixed) ? (fixed) : (float)) +#elif CONFIG_AAC_DECODER +#define IS_FIXED(is_fixed) 0 +#define FIXED_OR_FLOAT_EXT(is_fixed, fixed, float) (float) +#else +#define IS_FIXED(is_fixed) 1 +#define FIXED_OR_FLOAT_EXT(is_fixed, fixed, float) (fixed) +#endif +#define FIXED_OR_FLOAT(is_fixed, func_or_obj) \ + FIXED_OR_FLOAT_EXT((is_fixed), RENAME_FIXED(func_or_obj), func_or_obj) + /* * supported tools * @@ -150,11 +164,7 @@ static av_cold int che_configure(AACDecContext *ac, return AVERROR_INVALIDDATA; if (che_pos) { if (!ac->che[type][id]) { - int ret; - if (ac->is_fixed) - ret = ff_aac_sbr_ctx_alloc_init_fixed(ac, &ac->che[type][id], type); - else - ret = ff_aac_sbr_ctx_alloc_init(ac, &ac->che[type][id], type); + int ret = FIXED_OR_FLOAT(ac->is_fixed, ff_aac_sbr_ctx_alloc_init)(ac, &ac->che[type][id], type); if (ret < 0) return ret; } @@ -171,10 +181,7 @@ static av_cold int che_configure(AACDecContext *ac, } } else { if (ac->che[type][id]) { - if (ac->is_fixed) - ff_aac_sbr_ctx_close_fixed(ac->che[type][id]); - else - ff_aac_sbr_ctx_close(ac->che[type][id]); + FIXED_OR_FLOAT(ac->is_fixed, ff_aac_sbr_ctx_close)(ac->che[type][id]); } av_freep(&ac->che[type][id]); } @@ -1122,8 +1129,7 @@ static av_cold int decode_close(AVCodecContext *avctx) { AACDecContext *ac = avctx->priv_data; int is_fixed = ac->is_fixed; - void (*sbr_close)(ChannelElement *che) = is_fixed ? ff_aac_sbr_ctx_close_fixed : - ff_aac_sbr_ctx_close; + void (*sbr_close)(ChannelElement *che) = FIXED_OR_FLOAT(is_fixed, ff_aac_sbr_ctx_close); for (int type = 0; type < FF_ARRAY_ELEMS(ac->che); type++) { for (int i = 0; i < MAX_ELEM_ID; i++) { @@ -1154,7 +1160,7 @@ static av_cold int decode_close(AVCodecContext *avctx) static av_cold int init_dsp(AVCodecContext *avctx) { AACDecContext *ac = avctx->priv_data; - int is_fixed = ac->is_fixed, ret; + int is_fixed = IS_FIXED(ac->is_fixed), ret; float scale_fixed, scale_float; const float *const scalep = is_fixed ? &scale_fixed : &scale_float; enum AVTXType tx_type = is_fixed ? AV_TX_INT32_MDCT : AV_TX_FLOAT_MDCT; @@ -1188,8 +1194,8 @@ static av_cold int init_dsp(AVCodecContext *avctx) if (ret < 0) return ret; - ac->dsp = is_fixed ? aac_dsp_fixed : aac_dsp; - ac->proc = is_fixed ? aac_proc_fixed : aac_proc; + ac->dsp = FIXED_OR_FLOAT(is_fixed, aac_dsp); + ac->proc = FIXED_OR_FLOAT(is_fixed, aac_proc); return ac->dsp.init(ac); } @@ -1315,9 +1321,9 @@ static void decode_ltp(AACDecContext *ac, LongTermPrediction *ltp, int sfb; ltp->lag = get_bits(gb, 11); - if (CONFIG_AAC_FIXED_DECODER && ac->is_fixed) + if (IS_FIXED(ac->is_fixed)) ltp->coef_fixed = Q30(ff_ltp_coef[get_bits(gb, 3)]); - else if (CONFIG_AAC_DECODER) + else ltp->coef = ff_ltp_coef[get_bits(gb, 3)]; for (sfb = 0; sfb < FFMIN(max_sfb, MAX_LTP_LONG_SFB); sfb++) @@ -1626,9 +1632,9 @@ static int decode_tns(AACDecContext *ac, TemporalNoiseShaping *tns, tmp2_idx = 2 * coef_compress + coef_res; for (i = 0; i < tns->order[w][filt]; i++) { - if (CONFIG_AAC_FIXED_DECODER && ac->is_fixed) + if (IS_FIXED(ac->is_fixed)) tns->coef_fixed[w][filt][i] = Q31(ff_tns_tmp2_map[tmp2_idx][get_bits(gb, coef_len)]); - else if (CONFIG_AAC_DECODER) + else tns->coef[w][filt][i] = ff_tns_tmp2_map[tmp2_idx][get_bits(gb, coef_len)]; } } @@ -1977,11 +1983,7 @@ static int decode_extension_payload(AACDecContext *ac, GetBitContext *gb, int cn ac->avctx->profile = AV_PROFILE_AAC_HE; } - if (CONFIG_AAC_FIXED_DECODER && ac->is_fixed) - res = ff_aac_sbr_decode_extension_fixed(ac, che, gb, crc_flag, cnt, elem_type); - else if (CONFIG_AAC_DECODER) - res = ff_aac_sbr_decode_extension(ac, che, gb, crc_flag, cnt, elem_type); - + res = FIXED_OR_FLOAT(ac->is_fixed, ff_aac_sbr_decode_extension)(ac, che, gb, crc_flag, cnt, elem_type); if (ac->oc[1].m4ac.ps == 1 && !ac->warned_he_aac_mono) { av_log(ac->avctx, AV_LOG_VERBOSE, "Treating HE-AAC mono as stereo.\n"); @@ -2090,14 +2092,13 @@ static void spectral_to_sample(AACDecContext *ac, int samples) ac->dsp.update_ltp(ac, &che->ch[1]); } if (ac->oc[1].m4ac.sbr > 0) { - if (CONFIG_AAC_FIXED_DECODER && ac->is_fixed) - ff_aac_sbr_apply_fixed(ac, che, type, - (void *)che->ch[0].output, - (void *)che->ch[1].output); - else if (CONFIG_AAC_DECODER) - ff_aac_sbr_apply(ac, che, type, - (void *)che->ch[0].output, - (void *)che->ch[1].output); + FIXED_OR_FLOAT_EXT(ac->is_fixed, + ff_aac_sbr_apply_fixed(ac, che, type, + che->ch[0].output_fixed, + che->ch[1].output_fixed), + ff_aac_sbr_apply(ac, che, type, + che->ch[0].output, + che->ch[1].output)); } } if (type <= TYPE_CCE)