From patchwork Tue Sep 26 22:17:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 43934 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:2a18:b0:15d:8365:d4b8 with SMTP id e24csp2210978pzh; Tue, 26 Sep 2023 15:22:49 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHaNV66Sg7SAnz135MUhwpxVV0wwfuJ2uzPah9OOPuykiy2G59uWipHYdMdVY7go3AqlgbH X-Received: by 2002:a19:e054:0:b0:503:7fc:8afe with SMTP id g20-20020a19e054000000b0050307fc8afemr90039lfj.1.1695766969069; Tue, 26 Sep 2023 15:22:49 -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 d23-20020a056402079700b00532bdb4d7d3si11715011edy.308.2023.09.26.15.22.48; Tue, 26 Sep 2023 15:22:49 -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=PuX75oZU; 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 8794568CAFA; Wed, 27 Sep 2023 01:20:54 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04olkn2097.outbound.protection.outlook.com [40.92.74.97]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D080C68CAD9 for ; Wed, 27 Sep 2023 01:20:52 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=A3spV0v8YKyU/dk2gdc02llbpuF7N37KTj3dCI2haDyjydKkfUJHtGbxSyAore4qRgYrUPU9JZ15Ayhew7x9h3JlUd6kEMDscZmKJVA3/TpqeaTBl/209R0HvubSjvoWl8QfwBTvm+NZ9FKNvGZL0O9fApK/q0c7Pw1zcIk86cTkOj1B9/UywyIkMc52UbHOy/y9joCjVKI6HofWL0Gi24ymOEhmOgWfue9blMTwZKxDBxTxejskuFG+UpIlCTOg4uc+bnfD9loG+e5UCzbHngkcA93+XmuqdF0PvuUQs65fbA0YN/Bn0oYuI3kNk3RlcMDhplaMEKqoglUkRybCzg== 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=vV5WnGxqwxRIVxeG0hjDwhhswIZCDwuApQSMf5WbzUw=; b=JH/4vUtWRROEMJ/0G5R1KUwvJ+5eU3BnJ7SF08iKhDW98671+W1W0ZqlWIMRIOyf+0c3E3nPpAbFerWDA9l5PrV1DqZ6meyQDj2CMjR/WSw4TfNT4eHb17Qq79iTawwlQTA18RytXGLX4G6ypYHBe2XFblLdZw1/iaCwtUZ7KC0IAJtlrzz4Gnw1vT73GLpfC7tJf/df3b5a8To8ZW12QM1lSNQIoJjZzbkdS5kZ6S4Xd3gu0huk55QETmgPsQU4seMAIe6knPHFxZd9NW/d3Xdu/LQu3cEIy9YGZspiIl7gvkRsQLsJlw3g3T7AFhXH3Gynx1K95Gj3MavpGI84bg== 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=vV5WnGxqwxRIVxeG0hjDwhhswIZCDwuApQSMf5WbzUw=; b=PuX75oZU0FlThOdsGxCZMriKWv8vq/iP7lLLo5dIwmSyjpQpsX7iNZH97YhWywi2NNAT86P7Wofbc4WEYNMiLAdpwtpCwKS91RyQ1kgy11qWl9K39seXjYv0ebk9Aohqbgicw0EMLrj+WV9em81vx9W5aP2vEJuck6sDiKhz6Lo/ZpmOE8FflIEEzKyxbC6ppEEqMbQQzkob7Yrm7jxNVJEgEDdjVK2gCr+3ui6e/93aIDfNfsUuEGOSF3DR9/GCjZtaVdv0bnBsglc41RmBpVwBofBaAIvhvnzmRZ8FTzrWc4gObwhC2qMiRoz/Jb3LrPvpl5JSBCI5am+UEptIJQ== 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:51 +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:51 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Sep 2023 00:17:15 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [+4SBZaR9kyxgLel6Sb2B6k0qCLatqZzH] 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-43-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: 85146d0a-77c7-4bed-a15b-08dbbeded76e X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: HV8AsiPagtqzRQI/JAh+75P+RUkX6Ix5VaIrwvOxklZZ2XAVdEOaG8sO/397qgREGTqeTyZ/zF2kX09d4SLHhAWcCst0MsugUeHxSqzR+ZVvPFH0Ox/8R0dY/ZWWmqJZrLNpZrvLH6Qh3ONoEcdbT3DuIcQuMQbgnLW3t+mmychCkCEt2ZWs7NFJR6ugDEUNLQjqakqEzOvP4FufD2i8qCmL82jaS0cnwJW1XWOrSEWQFlqxRBLzMNlnS57350074q/8YJNLenvdppDdkAuyF/OCJUL06m7TEqtEmaQdHFTKaDJ9VbnwfaQPnKDYUFMCdt54utfSxvN5VEvv3zLNnm3iDog0UTl290ianVGeHcu2Zl2CFyK2qLgh/+ojGLV21xAzyHk3agMCyoNExP0hETc9FvdPBq6mmfZ1A3RcF58KRzGr2VuCGguln/48xeiKF475QGBDmM2F4er9DkDP6JpSQL993HD9khuQgTfiLCwBYVOWWJmBpGOz0/gpmuiIkCaGJrEa+Sysy7citQnnqm6QJwQUO1SSB7vZA09PkEIQJbzaR0DfaS02qdTIc3I8zMysJXXC+0pcsAwPJWgGOkzZTkE0wE22QA14pgGzy2YyB8a9gjbvDQnBBN9kvz4j X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 2rtAP7pGbcuQMTOn+Dq0s1PNkAr06wmTkCm3iJe3M1sr1u1Sx+9WYqy+tJ4WXZhSzVk3Llpvn44rHyAL08XvcBKkCp66sELD9JS6B1S5Qah34llM+dxqdxsYCH3eXDln53QT/cM7F3aaI6BlhX8N5/0P1X+9wVxTBLtMT39vqPYdZYjR3pTulCmV32rOwxfyRdhI60B9mCilpI6YWa/Qjdc59iZy2vsnMkQmOdY4cc55Z8bktDkzf4fI0ImLT6FGVu80685X/mGdZiKzKf4X/+SoDq4A1Ol8ANR6LOctpQolJg7Ov6344UXzuYs41tF7adHp8dACuz3i2X3TZXBUcjEjLNS7nNe6P7lofQgBwLg5y1jeZQB51hlO2EVqlM/MmCVqJI4Sy8wn7RnbNA4Fx3dUmJztghQkcKz4nwwkY04cI8CIAa+VPEYwNd7fwdGIoYAQEa99oUfOEsSGf2v2S9Ak8I2wcwVnOvlD6RVfEqzh5/MjfcHnPzubccuin1isUE2gkoTcfhgvbYQvsZ5DELhlp/uK9VRBi1qe8GbBQQODDoWVHi49jYXUFGSWIoyRYu2OINSYFFf00WT+4paAWqKsXbuxbEtRFpkfSa5PSZv18Rnvd6V1FaW7L6gEnrtaCyZg8a/0MLD+rZEbme2WicscVavdDwm2tHVEM7MFK8Ccv8esr6y36Wrx9OWZKvLNjZfyucfJ/4l4BW8ecWa2R02jx0fJXx+Oh7VEyT4MDMlk3F+J1y0xtDJUkUFhkY0VTzjRE4ToLLOeiBLE2/eEQncwDZdjayiOOy/q0YdgKAWkAE2uH1E4ZWfI6Fs4c6ahSPGj8wkGp/IuXa88d+V+XCCoNANYsaAeA+wxNFA2HHqwZ7LbCH0j8ryPNS/owwAJ22ZySyz0oVTcj3jjfhLJ6fiV8iMRy3oysVxHa32bXyU5cfvyj4FIMrIwxbuQY4KPF2+1CG+gEMwqxDejxcxbskAV2HXDZLkZqEXVBODp5mch9nhY0lPcpP7L6EsoVyA0jVPGuwhDKle17Mc8yOM5Ae+CXXZugfN+T9xuGyH5+jrAzTYXBDdfyZU2tNxXddg/yao3zLoX0oLUSW9pcifMozoVeGn6rlZkg3d0PteMI3Lah4xf1Zweh1C8j8vYzykp8+Y4mTtNHtdzTci2+l5Hl08hZvS6V27U77mJ4J674kkwkljO7e/5EIXR5W6hWR9VNbSo0Tzy0VQ3rK9KnkHenyknL86qZG2989e4LiK0dPMyFb82cA83EptOXsQwuit7 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 85146d0a-77c7-4bed-a15b-08dbbeded76e 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:51.1675 (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 44/61] avcodec/aacdec_template: Don't init unused table for fixed-point decoder 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: S5yMXGudMj2c The fixed-point decoder actually does not use the floating-point tables initialized by ff_aac_tableinit() at all. So don't initialize them for it; instead merge initializing these tables into ff_aac_float_common_init() which is already the function for the common static initializations of the floating-point AAC decoder and the (also floating-point) AAC encoder. Doing so saves also one AVOnce. Signed-off-by: Andreas Rheinhardt --- libavcodec/aacdec_template.c | 1 - libavcodec/aacenc.c | 7 ++- libavcodec/aactab.c | 102 +++++++++++++++++------------------ libavcodec/aactab.h | 2 - 4 files changed, 52 insertions(+), 60 deletions(-) diff --git a/libavcodec/aacdec_template.c b/libavcodec/aacdec_template.c index 27be1f896d..4591eac6b9 100644 --- a/libavcodec/aacdec_template.c +++ b/libavcodec/aacdec_template.c @@ -1128,7 +1128,6 @@ static av_cold void aac_static_table_init(void) AAC_RENAME(ff_aac_sbr_init)(); ff_aacdec_common_init_once(); - ff_aac_tableinit(); // window initialization AAC_RENAME(avpriv_kbd_window_init)(AAC_RENAME(aac_kbd_long_960), 4.0, 960); diff --git a/libavcodec/aacenc.c b/libavcodec/aacenc.c index 2a34685aec..5e6a255a8f 100644 --- a/libavcodec/aacenc.c +++ b/libavcodec/aacenc.c @@ -1210,9 +1210,6 @@ static av_cold int dsp_init(AVCodecContext *avctx, AACEncContext *s) if (!s->fdsp) return AVERROR(ENOMEM); - // window init - ff_aac_float_common_init(); - if ((ret = av_tx_init(&s->mdct1024, &s->mdct1024_fn, AV_TX_FLOAT_MDCT, 0, 1024, &scale, 0)) < 0) return ret; @@ -1359,6 +1356,9 @@ static av_cold int aac_encode_init(AVCodecContext *avctx) if (s->channels > 3) s->options.mid_side = 0; + // Initialize static tables + ff_aac_float_common_init(); + if ((ret = dsp_init(avctx, s)) < 0) return ret; @@ -1393,7 +1393,6 @@ static av_cold int aac_encode_init(AVCodecContext *avctx) #endif ff_af_queue_init(avctx, &s->afq); - ff_aac_tableinit(); return 0; } diff --git a/libavcodec/aactab.c b/libavcodec/aactab.c index d0006eac35..edb51d8810 100644 --- a/libavcodec/aactab.c +++ b/libavcodec/aactab.c @@ -36,18 +36,64 @@ #include -float ff_aac_pow2sf_tab[428]; -float ff_aac_pow34sf_tab[428]; - #if CONFIG_AAC_ENCODER || CONFIG_AAC_DECODER #include "kbdwin.h" #include "sinewin.h" +float ff_aac_pow2sf_tab[428]; +float ff_aac_pow34sf_tab[428]; + DECLARE_ALIGNED(32, float, ff_aac_kbd_long_1024)[1024]; DECLARE_ALIGNED(32, float, ff_aac_kbd_short_128)[128]; +static av_cold void aac_tableinit(void) +{ + /* 2^(i/16) for 0 <= i <= 15 */ + static const float exp2_lut[] = { + 1.00000000000000000000, + 1.04427378242741384032, + 1.09050773266525765921, + 1.13878863475669165370, + 1.18920711500272106672, + 1.24185781207348404859, + 1.29683955465100966593, + 1.35425554693689272830, + 1.41421356237309504880, + 1.47682614593949931139, + 1.54221082540794082361, + 1.61049033194925430818, + 1.68179283050742908606, + 1.75625216037329948311, + 1.83400808640934246349, + 1.91520656139714729387, + }; + float t1 = 8.8817841970012523233890533447265625e-16; // 2^(-50) + float t2 = 3.63797880709171295166015625e-12; // 2^(-38) + int t1_inc_cur, t2_inc_cur; + int t1_inc_prev = 0; + int t2_inc_prev = 8; + + for (int i = 0; i < 428; i++) { + t1_inc_cur = 4 * (i % 4); + t2_inc_cur = (8 + 3*i) % 16; + if (t1_inc_cur < t1_inc_prev) + t1 *= 2; + if (t2_inc_cur < t2_inc_prev) + t2 *= 2; + // A much more efficient and accurate way of doing: + // ff_aac_pow2sf_tab[i] = pow(2, (i - POW_SF2_ZERO) / 4.0); + // ff_aac_pow34sf_tab[i] = pow(ff_aac_pow2sf_tab[i], 3.0/4.0); + ff_aac_pow2sf_tab[i] = t1 * exp2_lut[t1_inc_cur]; + ff_aac_pow34sf_tab[i] = t2 * exp2_lut[t2_inc_cur]; + t1_inc_prev = t1_inc_cur; + t2_inc_prev = t2_inc_cur; + } +} + static av_cold void aac_float_common_init(void) { + aac_tableinit(); + avpriv_kbd_window_init(ff_aac_kbd_long_1024, 4.0, 1024); avpriv_kbd_window_init(ff_aac_kbd_short_128, 6.0, 128); ff_init_ff_sine_windows(10); @@ -3299,53 +3345,3 @@ const DECLARE_ALIGNED(32, int, ff_aac_eld_window_480_fixed)[1800] = { 0xffecff1c, 0xffed391e, 0xffed740c, 0xffedafb1, 0xffedebe1, 0xffee287d, 0xffee654e, 0xffeea23f, }; - -static void aac_tableinit(void) -{ - /* 2^(i/16) for 0 <= i <= 15 */ - static const float exp2_lut[] = { - 1.00000000000000000000, - 1.04427378242741384032, - 1.09050773266525765921, - 1.13878863475669165370, - 1.18920711500272106672, - 1.24185781207348404859, - 1.29683955465100966593, - 1.35425554693689272830, - 1.41421356237309504880, - 1.47682614593949931139, - 1.54221082540794082361, - 1.61049033194925430818, - 1.68179283050742908606, - 1.75625216037329948311, - 1.83400808640934246349, - 1.91520656139714729387, - }; - float t1 = 8.8817841970012523233890533447265625e-16; // 2^(-50) - float t2 = 3.63797880709171295166015625e-12; // 2^(-38) - int t1_inc_cur, t2_inc_cur; - int t1_inc_prev = 0; - int t2_inc_prev = 8; - - for (int i = 0; i < 428; i++) { - t1_inc_cur = 4 * (i % 4); - t2_inc_cur = (8 + 3*i) % 16; - if (t1_inc_cur < t1_inc_prev) - t1 *= 2; - if (t2_inc_cur < t2_inc_prev) - t2 *= 2; - // A much more efficient and accurate way of doing: - // ff_aac_pow2sf_tab[i] = pow(2, (i - POW_SF2_ZERO) / 4.0); - // ff_aac_pow34sf_tab[i] = pow(ff_aac_pow2sf_tab[i], 3.0/4.0); - ff_aac_pow2sf_tab[i] = t1 * exp2_lut[t1_inc_cur]; - ff_aac_pow34sf_tab[i] = t2 * exp2_lut[t2_inc_cur]; - t1_inc_prev = t1_inc_cur; - t2_inc_prev = t2_inc_cur; - } -} - -void ff_aac_tableinit(void) -{ - static AVOnce init_static_once = AV_ONCE_INIT; - ff_thread_once(&init_static_once, aac_tableinit); -} diff --git a/libavcodec/aactab.h b/libavcodec/aactab.h index 9b1450c2eb..7693876c34 100644 --- a/libavcodec/aactab.h +++ b/libavcodec/aactab.h @@ -42,8 +42,6 @@ extern float ff_aac_pow2sf_tab[428]; extern float ff_aac_pow34sf_tab[428]; -void ff_aac_tableinit(void); - /* @name ltp_coef * Table of the LTP coefficients */