From patchwork Mon May 6 22:37:58 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 48604 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:6816:b0:1af:836d:81b3 with SMTP id wr22csp32710pzb; Mon, 6 May 2024 15:38:19 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUFK/TfjlVZUoVgZssa2RxzGF0QUmDlAtmBhKwzgD81BwEDrW8U+3GmwYKjGS/DL65e9IJjr7ZYwuitoI8YtSiK5oDnrf8WU0GBtg== X-Google-Smtp-Source: AGHT+IEgex4JA2dpzROUCn4o0K82iJd9lqjhMlAyxTataDyojkZ+Y4dDL15ouhNvaDm8B7QHD95I X-Received: by 2002:a50:aa98:0:b0:56c:16c6:2091 with SMTP id q24-20020a50aa98000000b0056c16c62091mr7096448edc.1.1715035099746; Mon, 06 May 2024 15:38:19 -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 ch11-20020a0564021bcb00b00571e26e1552si5362492edb.33.2024.05.06.15.38.18; Mon, 06 May 2024 15:38:19 -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=OTQtvA0l; 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 3450168D663; Tue, 7 May 2024 01:38:15 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01olkn2048.outbound.protection.outlook.com [40.92.65.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6070668D663 for ; Tue, 7 May 2024 01:38:08 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YhNYz+DLwpvXCZiDMUDta49qZyRCOAEwXoWnkKaw2NK8yoe4gMDkKfFrjhyvocST+1hQj3CTCKIClGSKIxqjeNnsdt/oaLITEG1dhHILc68NYk+2L59IVH3aYuHjj1vpIhIrhIAipQxnVcaYeBG0rPC+wOPc/38+5tYY1D2TsEJRNFeVT3WlKGprm8RPD7y5qp8ka3tbh4N03B9K3vDhKYpAL/eG6J9FvcBPpc55Dbq73BZxIjOR8tz6llPYEXE7gHf5rJxaS/j75jpoEHo05rd8sQfskolgZrBCMuo2I2StaUIalYndxNzulY0hYK0MInu41kilajZO3RK7RZZxRg== 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=XUp2EDyyXqH3TGde3MO09bW9k5iJnrsw8u+/x2OC5b0=; b=Hq121OB6a8Rs5Qg0To27d1lWBw1yaEj9YInyBd2tsKRHQczQdpPHMUd0+Ugk/c9z3sKfnsgt1afiQTfW0d5HUFE+0ZM2RfMjQ/rD76CeA/13nrMJWMlfXBv+djmuBTKdl0DEi8yQLzjMmU+VUwS90zb18mzxPPLHHtNiYMAwGAG+7FS83KLvDwDhW3jEvyzAtlBDyhhUZKDRJn4bFISqKIP1OXoR2XJK8R7+YS+FZISC8wRH8/0dNqu4pKyt2Xmpr1we659huXxovcPeW7AZ+pfcPZgJ5QwZiVdy/X3iByW5KPsUrgL9IxcExEPTn06lyHuxeyzgZ8XJoa3+F+qthg== 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=XUp2EDyyXqH3TGde3MO09bW9k5iJnrsw8u+/x2OC5b0=; b=OTQtvA0lrwVEZ5WSwsPKARh/P6BaJxqr5t3zSpZVyLrZHybt4O7hvKjjMaYV3lVw91DTnD5HFgsRzOFu87ZOwiC+PctOom+drNuY3l6+uDCydYxOQsIJeEdy2PRQ9zZwppAjQTk3luJEGY3eFP7LMBns4aLia9RnBndKFG1VfDx6ilTEkCO/wNWavcEJewTdt9pBDgPS3VF+Qczke4ClLTKavn+f5AU3egUpN6SyjkaNZcbUYuqvGB8ELlwJRVhAb+JS3KF5l17Ip2EZ97olCxAFnxQzX0Z7Xn1Wn4o5pNVx5jAXcZWAIx4KwXsoL136PEHNNcRGJXUYjmvQAYxpgw== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by AS1P250MB0478.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:4a5::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 22:38:06 +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.041; Mon, 6 May 2024 22:38:06 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 7 May 2024 00:37:58 +0200 Message-ID: X-Mailer: git-send-email 2.40.1 X-TMN: [ErB58Zsv4P0DTMFPAEGJafEx9D7MzlMix5ziT0pfWVc=] X-ClientProxiedBy: FR4P281CA0107.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:bb::19) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <20240506223758.1467434-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|AS1P250MB0478:EE_ X-MS-Office365-Filtering-Correlation-Id: 44bff7ca-f478-489b-dc1e-08dc6e1d324e X-Microsoft-Antispam: BCL:0; ARA:14566002|461199019|3412199016|440099019|1710799017; X-Microsoft-Antispam-Message-Info: 6q0qDE/ufV7xCT+PLB7ADgA/s58OqmXjM8VWXYIDrbWal3FOSfFLPJ0+S+6cFSwleBIxACOfmV/FgdbFQEl3ZQWm7QHhUk809A5XER8YFd7ywds4U0J5bF5ksGjM8W5z5dRwweqlWvBFj3RV8sdnM5jwirfY2UaeybTUY3yy8AXDF/DFJGtz2+dfAt9jKy+KLnY4Tao4ugufAXq7LKE2Hz/k+RBkbvlgZOTlxFAJDfBitMF8p87CzUQatM8/0iYShpi6DbVOhs31Ivt0XBeHc3vgzpd2HVY5XhmQuT7RVOldxsXKXVut24pQk3s6MQj2SEoPGBDiF/51oiI1Z5Oz1vZtidNEQtnLoUIJgr2r+vxMwlzfRAkyp0vL5FOhGulu6Id39YjTd8TJB+1niPZQXXQmiaQAgeEdxWG0zFGEMYf2qwrdjXeKWyndaD5P+BcMoT4/Ik7583qQFErfQhEdzb4aH8wN9w1E1/auvWZnkocdBB7tUrzV720RTTMy+eBdV7ks4tiTtE8hLzmLpmovd4yR70L28LuDikXHb+iUnxm45XOPweB4PGHjaYSVp6oeBt4sVzF9IWKK5vd9XY1moPiiWpGbYrlRB6f3qUbaxq2B4CEi01t3TAWgDmhA5IJA X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 7PTbW9SqdDNcXM3wTfMGoLpYhH7tmtmRwKNTh+MplwET1xwR9ZqbD7h+5eAREh9qiImjmJZDTd81Y78d37aScQ/4yoHUPc8G9UreT0tL6ifxrAJo8FQ2UxntKhMV8EVI9y9TA+7sN0Hc+81GWj/pJAUz6mznYjH1ITRPnSyvBA3S9e8eLC93UIxfJhytBqiupq/AHsBZyLjaepYrniDOEO0T1EXKOwcqamIlNgn4neXmYNw0cLDEHwq5rQNC9aUMGDfMziwmFeyOVBd0rSMMEjdvD/UFMXwQxAlH7QjzNQ+Luvt2+nTYz7ZQoa7GjF6tgNKaaLRK7OkufRB0pEcTw0zkwZdgRqj0qLie2rZXbY/UJkABij9hwNie+eVsoRZOZbYryXP9YAuLx4zaZPVX4Qe8Pd+RgVh9l0Wec6k0IwxVxUxeBiihTs1pg3A0pxsGLEsucqPJUxj/ttriZ2d3WkHmVh2EcB+1THfVrK1TeB1oD1cqisIFubWtKi+V3z3hvrgA//jfEoVhIXSRztWx6T0kokKRS+tvG25ScYsGgOU0Ai5JF+7fZrm2wdvgsM8T8ueuv9UtD8Axv6NfjK26jDrNFoa6zfZq2oMlqA/WSKERq5gw/V24zX9sVxI9N9rGvKMPssrfVFPxK9yMWh71wmgpnL5mDRWel1GwVGcJowMyFcuXlYIk4xwIEKkA60aASY6sBDVDNzSfQFt26/svhszOrQV0k1gr/uonmtRwDoF1eJK7dxo+1ZpVdROx/xmAo0iOYNIU6ineqCevuF0uRsBBERB6G4ecvXr+hmL6h5w+seFklNgZ1W1xk2iLRRO3tYVcSphK2tDiSdj0uz3doAuC4/ZUe3+4gzCDs1kzayQHiODUZjcMY0FUCSfD26GZtmMr8SRSHoBQweDUCFtTNYFSbwnfG+GqpWj1b9q40gU92yo9SYvt8uojP8UbRAQo7dI7mLRku6DWLbWckoE5i55bRxOu4L2LU0sba2h8ZAF6qLqOdND+1jWbhF8rOJyR1MJtNLHVW4SrmEvVaXLpXrLepxaigTnEYESonhf3sQ5ABQrFcDKZ6ID0TPYl+pJZ3weTbCS3y+bRA1eOVxjAoUq8COL7DOnMEfJWg/pXPxK3RTvGu1VH7d2VDocnYLdot15vv3T5nntUA3lntJa8j+GCaODeXX2tvfeSEJDNZH8lJFCDe9oyUSM+828TAUGiJ+9hc6G2Bs1BxvDNVDD/fR4BZ2c9FGwFHEYdHIwf2idu2ygpb4P1MXGedvdljNAh+cTftVDKNmoX67uNYYknvA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 44bff7ca-f478-489b-dc1e-08dc6e1d324e X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 May 2024 22:38:05.9576 (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: AS1P250MB0478 Subject: [FFmpeg-devel] [PATCH v3] 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: Nb2xLbMjn4m+ This is achieved by using function pointers for AAC SBR functions. This unfortunately necessitated to use void* in ff_aac_sbr_apply(_fixed). Fixes ticket #10999. Signed-off-by: Andreas Rheinhardt --- libavcodec/aac/aacdec.c | 35 ++++++--------------------- libavcodec/aac/aacdec.h | 7 ++++++ libavcodec/aac/aacdec_proc_template.c | 6 +++++ libavcodec/aacsbr.h | 4 +-- libavcodec/aacsbr_template.c | 3 ++- 5 files changed, 25 insertions(+), 30 deletions(-) diff --git a/libavcodec/aac/aacdec.c b/libavcodec/aac/aacdec.c index 4206ad1b5d..7457fe6c97 100644 --- a/libavcodec/aac/aacdec.c +++ b/libavcodec/aac/aacdec.c @@ -149,11 +149,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 = ac->proc.sbr_ctx_alloc_init(ac, &ac->che[type][id], type); if (ret < 0) return ret; } @@ -170,10 +166,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]); + ac->proc.sbr_ctx_close(ac->che[type][id]); } av_freep(&ac->che[type][id]); } @@ -1114,14 +1107,11 @@ static int sample_rate_idx (int rate) 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; for (int type = 0; type < FF_ARRAY_ELEMS(ac->che); type++) { for (int i = 0; i < MAX_ELEM_ID; i++) { if (ac->che[type][i]) { - sbr_close(ac->che[type][i]); + ac->proc.sbr_ctx_close(ac->che[type][i]); av_freep(&ac->che[type][i]); } } @@ -1136,7 +1126,7 @@ static av_cold int decode_close(AVCodecContext *avctx) av_tx_uninit(&ac->mdct_ltp); // Compiler will optimize this branch away. - if (is_fixed) + if (ac->is_fixed) av_freep(&ac->RENAME_FIXED(fdsp)); else av_freep(&ac->fdsp); @@ -1946,11 +1936,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); - + ac->proc.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"); @@ -2059,14 +2045,9 @@ 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); + ac->proc.sbr_apply(ac, che, type, + che->ch[0].output, + che->ch[1].output); } } if (type <= TYPE_CCE) diff --git a/libavcodec/aac/aacdec.h b/libavcodec/aac/aacdec.h index 775c007aeb..eed53c6c96 100644 --- a/libavcodec/aac/aacdec.h +++ b/libavcodec/aac/aacdec.h @@ -210,6 +210,13 @@ typedef struct AACDecProc { SingleChannelElement *sce); int (*decode_cce)(AACDecContext *ac, GetBitContext *gb, ChannelElement *che); + + int (*sbr_ctx_alloc_init)(AACDecContext *ac, ChannelElement **che, int id_aac); + int (*sbr_decode_extension)(AACDecContext *ac, ChannelElement *che, + GetBitContext *gb, int crc, int cnt, int id_aac); + void (*sbr_apply)(AACDecContext *ac, ChannelElement *che, + int id_aac, void /* INTFLOAT */ *L, void /* INTFLOAT */ *R); + void (*sbr_ctx_close)(ChannelElement *che); } AACDecProc; /** diff --git a/libavcodec/aac/aacdec_proc_template.c b/libavcodec/aac/aacdec_proc_template.c index fecf228b3b..327f3117b5 100644 --- a/libavcodec/aac/aacdec_proc_template.c +++ b/libavcodec/aac/aacdec_proc_template.c @@ -439,4 +439,10 @@ static av_cold void AAC_RENAME(aac_proc_init)(AACDecProc *aac_proc) SET(decode_spectrum_and_dequant); SET(decode_cce); #undef SET +#define SET(member) aac_proc->member = AV_JOIN(ff_aac_, AAC_RENAME(member)); + SET(sbr_ctx_alloc_init); + SET(sbr_decode_extension); + SET(sbr_apply); + SET(sbr_ctx_close); +#undef SET } diff --git a/libavcodec/aacsbr.h b/libavcodec/aacsbr.h index 656ef5258e..ee31e2fcde 100644 --- a/libavcodec/aacsbr.h +++ b/libavcodec/aacsbr.h @@ -90,9 +90,9 @@ int ff_aac_sbr_decode_extension_fixed(AACDecContext *ac, ChannelElement *che, /** Apply one SBR element to one AAC element. */ void ff_aac_sbr_apply(AACDecContext *ac, ChannelElement *che, - int id_aac, float *L, float *R); + int id_aac, void *L, void *R); void ff_aac_sbr_apply_fixed(AACDecContext *ac, ChannelElement *che, - int id_aac, int *L, int *R); + int id_aac, void *L, void *R); FF_VISIBILITY_POP_HIDDEN diff --git a/libavcodec/aacsbr_template.c b/libavcodec/aacsbr_template.c index a6e3bc54bd..86f4d8c26e 100644 --- a/libavcodec/aacsbr_template.c +++ b/libavcodec/aacsbr_template.c @@ -1469,8 +1469,9 @@ static void sbr_env_estimate(AAC_FLOAT (*e_curr)[48], INTFLOAT X_high[64][40][2] } void AAC_RENAME(ff_aac_sbr_apply)(AACDecContext *ac, ChannelElement *che, - int id_aac, INTFLOAT* L, INTFLOAT* R) + int id_aac, void *L_, void *R_) { + INTFLOAT *L = L_, *R = R_; SpectralBandReplication *sbr = get_sbr(che); int downsampled = ac->oc[1].m4ac.ext_sample_rate < sbr->sample_rate; int ch;