From patchwork Tue Sep 26 22:17:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 43949 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:2a18:b0:15d:8365:d4b8 with SMTP id e24csp2211783pzh; Tue, 26 Sep 2023 15:24:42 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFYS/RpTw8vNaQlvzSimzbUknf6im2gR8NuyUbiKFci9rwUqe0+jEbsrB4EEoQV7Eoiu6pq X-Received: by 2002:a17:906:32d0:b0:9ae:690d:4282 with SMTP id k16-20020a17090632d000b009ae690d4282mr50412ejk.18.1695767082521; Tue, 26 Sep 2023 15:24:42 -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 a12-20020a1709065f8c00b009ad88075ac2si12203241eju.46.2023.09.26.15.24.42; Tue, 26 Sep 2023 15:24:42 -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=D25z81G2; 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 8ED3D68CB56; Wed, 27 Sep 2023 01:22:54 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03olkn2033.outbound.protection.outlook.com [40.92.58.33]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E6C9768CA7F for ; Wed, 27 Sep 2023 01:22:52 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WQLz+mDcDJp+s7zwkXyiE8yhFBkm/SBhvdOtTNNXcSLR51vl0dhdpqSI4yTjrZf3EKPCCpySeOMOU8Fh6jWNTdw+EGMZgg70gI4MiFAOmV29DN7qdxcIqKdbpH+AARFXn4YwMa+PaqHAjfXPdZYWTKCq6j9cfxIo+x4Thb8lQc/u/JOBAACTm4HX3+8CH+36SkvfzEgOSnlAf/TVeVRU8bs02pHzmdrK3INQf9rTNe9XXQARD8Ff9sJSoBeV5F7Q81u1OhphtCpyc+0TN4Lie6e3MmuZFs7YGuzNyyS83zi8lSK1tcOjGuw+Qy7hayKRNqXO4BnosyBvmDwPvjh0/g== 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=WzEHj8KDpJOoDKrFOUXYuAMSD3dEHeVlewExh1DAjr8=; b=SsGqpao2WjgZJmPC2SrWiJls3zxymC6J5BA45dBaiIMKqiHG5HXZ8wx4qVBj8e7wKUsM031iWbqLfRoVaLkA5mEEiyh0UOba4JChS90Us5hLeXxTnc2knjFmPNQ+lT08WfuxH6HXTTMjSLXsVOm/EKr3fxg4+3Tg0lrMBBJhA1T9QlBJ18f5HuiBeuZPWrTKAbrVUxXntC0d2oAGxWwkUNcFoI+qFlooJbYCmIGM6oyJbshj9CYkgayvpRefGJNJbUKJDJVD6M0Ynww8eywIDsN1rMx5a1IIBD3O5WDrgrPyEs/UEuZD8iAlRuVf0XnDCFSYfIQJWcsplOW1Mw7psw== 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=WzEHj8KDpJOoDKrFOUXYuAMSD3dEHeVlewExh1DAjr8=; b=D25z81G2unxfcZ4jRMUf4Z9681UcsNLJdHBIXlWz9DTCe1gYnQLlJ7DQT6fCzWs91HUOZ3GynMgkNce5KBxEjdcOw6g43Jt4SKHHgZYp3rNLwqw6THBaANkzN16emaKCXM0lSGl3REUZOJPNDBy63fnOX8+solV4xBIXVA3o/1oj9WwP4DL6B6QQRpfr5NC2sTW4Iqbu4Y+mZsFtSzMZWKJ0bAnxEtKxbRaaCo3z7sC83/EvIYLzm7ry/M0lp0iSAhkwaaDAyalqnXO18PSAiCPqYPsnrgylfepYTHu5aB10vBdQugqFG/xmtx3n5cSO5w5riwTNt5URqnv/upZBww== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by AM8P250MB0160.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:323::5) 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:22: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:22:51 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Sep 2023 00:17:28 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [hNTvIST1jIJhycosBQ65jZXBV8IrKPm/] 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-56-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|AM8P250MB0160:EE_ X-MS-Office365-Filtering-Correlation-Id: 69f3ee44-4ce0-41c4-dcb7-08dbbedf1efe X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: NrJqOHrRTEs5gHgw2ffdPaaHRuSGO86vKsv2yfUcJwWrQ6pl7khlwM9Nmb/TJ8c5Rv042hcH9xDlwACZNlrpmADauDJCD5LyPuUmwVZgiTfDnX3V6RqnLJriZitLYQJbTqSUZfljUwiWB5v23X6BBjZluAc9L7LxUSbpitVjzR4PmtiR+sYzCMkFHcoOq6vTKAQVNvb8W5yqh9I0x5xIEsL6YfhC3RqK4RCN6fgsvS76WRfp+JIAtrPmSAjwmWwkeU7LiWKot5fsQjdlCPRIJ8CdBhGVAeOEcHnVTIY8W7Ep9YsfPx3udBmQvyWbcSga+S+hcuLDUADupYhHMfz1mRqdDmGLIRChbwAf5LD4DY3b21A0H7ljLXxQPwZPghghJ+CiiI+PZuhZVu66soxlsBefYi1W1jGUbNLblBVCjNAc7JhbCGLQrvShdFxnQWswXZQBxUf79HuaJcoL7aDC3BbZ1/Iz0TeyFQLEeDqdyjBeP0udeYpAOa7agxmCg44aLfXCSbiJgSImzKOTuS6FZUlkJUVKfWBanXAFIsnJkOSoNBfTKIhGjh5WD/FhkBxysJnH7O4o+MbQEamNMVctAAjYKkYkDNJnX7xNOH7FxckDHjqo7wbhKU0QDI1zsMVY X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: UcSrlDRxN7Yu899zwoRuWUEgtkHje0RTyy0Ztsfrvr5p2CVdUaA2q9r3MZ81xRotdfwSTnNSZpzprW+52z4jDCqwli/HQGoC/89BRsIDbFjmkllZVjHVk6p8ZUWx09UmpAfcfnSDL+oIIw9oM2e1P5RfRLqSca4ifLp9CquCHKjpccV6oeS1vWkNjEGtu1ExZ7AQ74H232mlfUjbgiM+mg0HarRsiiL7GKFn5wTYmoCUzh//nxgeaev81jnLHoL8TzE8vyvuP3LINoOdXx2Cb3afaTZ0Rjv33A9/xgiVv5GW4lxojfCdaig1VdtV6Zf7e0TI09Uq5ujOeV+mJtmZVPNkUIqFU2QflXA1lgrdHStVPnYByu6pipB4tX3Fy1PgpLY2m24DOxhmIuOV4wIsFY9yHwFhMjxh1UPNk94G66QQibs6RDpdVyzTDg/MFEzQJJiOMe6n+GBwzmvJLZVaxqVPqAYMMmA9pADVM+yVbnF/Q2GUAfKhuu3leNIeHmLxgXfXg/xB+2upAm544+qG6RaLi6I3hPqdpKQz7bd2HdNfXoqQJjs2rK0h7tTrAugHpAZKQQ/Xu747dANCET3NQu+0by0BcOhobVE5T01Q2SjO7M/Mp9gBGkPt+whl87D/+888cn8j5LPymoOWHt1wEYNYi2ysqJDqAz94tyS6D5z50EKF9y2dTEZCKP/RTenR80GPNcDB75Yivpo/fO1tx++U/GW9bWWEY76VaWcqm06QAXWYlnPvNowSszpg868l3BGg3Lymg14syFfZRpMsKS4hIViMmzdafe+INLQSgp0Gsyad0JtmKmmFdJiA1tNz+rcOxBSmI+luLtY42OXl/V5DJjC7I0f8uCAHqnGH/dy4aHQciOoQjSwBt+i8dqlwZ1wo8QFBDbfl2C9eUHLNXQyPKwzbMQIL+sSP2oNPveRd65b+y0GkOReXRLILlJW8vC5KBNWUBKBovAlVNKrS2IaGjVUh1JG7YKUcGqzk4LzbKvOniv7u9ZYeJy2aSXP4FY1q6K0pqPkpIo9dAfwuRPk8w/R8xal66e0+8d79rOo/hS8/Tib+QEpYokYxSZo0wZJYJHtACuXLA5mQsf3BhqtfZ8ulDqPF1HjBZpOIkP4EHsQsvEM+Nea9kWHEAb19RcfwcxAkjHdUynrF6YLUUlsyDXMZEjFtn9VEl/IvioLFolN8iNC62wdEj3eBjdn8w43Dx+EFbZoEen4BxCVimLDdOazCJsXV4bBQ1VklbPry4cqh3MFfJx2LFzq/ZgjR X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 69f3ee44-4ce0-41c4-dcb7-08dbbedf1efe 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:22:51.2996 (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: AM8P250MB0160 Subject: [FFmpeg-devel] [PATCH 57/61] avcodec/mpegaudiodec_common: Avoid superfluous VLC structures 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: BlJsTScUjYAd For some VLCs here, the number of bits of the VLC is write-only, because it is hardcoded at the call site. Therefore one can replace these VLC structures with the only thing that is actually used: The pointer to the VLCElem table. Signed-off-by: Andreas Rheinhardt --- libavcodec/mpegaudiodata.h | 2 +- libavcodec/mpegaudiodec_common.c | 16 +++++++--------- libavcodec/mpegaudiodec_template.c | 5 +++-- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/libavcodec/mpegaudiodata.h b/libavcodec/mpegaudiodata.h index a4148a1ffe..fbad67a0b3 100644 --- a/libavcodec/mpegaudiodata.h +++ b/libavcodec/mpegaudiodata.h @@ -53,7 +53,7 @@ extern uint32_t ff_table_4_3_value[TABLE_4_3_SIZE]; #endif /* VLCs for decoding layer 3 huffman tables */ -extern VLC ff_huff_vlc[16]; +extern const VLCElem *ff_huff_vlc[16]; extern VLC ff_huff_quad_vlc[2]; /* layer3 scale factor size */ diff --git a/libavcodec/mpegaudiodec_common.c b/libavcodec/mpegaudiodec_common.c index 3a60b03e9e..6446d08967 100644 --- a/libavcodec/mpegaudiodec_common.c +++ b/libavcodec/mpegaudiodec_common.c @@ -64,7 +64,7 @@ const uint8_t ff_lsf_nsf_table[6][3][4] = { }; /* mpegaudio layer 3 huffman tables */ -VLC ff_huff_vlc[16]; +const VLCElem *ff_huff_vlc[16]; static VLCElem huff_vlc_tables[128 + 128 + 128 + 130 + 128 + 154 + 166 + 142 + 204 + 190 + 170 + 542 + 460 + 662 + 414]; VLC ff_huff_quad_vlc[2]; @@ -401,6 +401,7 @@ const uint8_t ff_mpa_pretab[2][22] = { static av_cold void mpegaudiodec_common_init_static(void) { + VLCInitState state = VLC_INIT_STATE(huff_vlc_tables); const uint8_t *huff_sym = mpa_huffsymbols, *huff_lens = mpa_hufflens; int offset; @@ -414,7 +415,6 @@ static av_cold void mpegaudiodec_common_init_static(void) } /* huffman decode tables */ - offset = 0; for (int i = 0; i < 15;) { uint16_t tmp_symbols[256]; int nb_codes_minus_one = mpa_huff_sizes_minus_one[i]; @@ -426,16 +426,14 @@ static av_cold void mpegaudiodec_common_init_static(void) tmp_symbols[j] = high << 1 | ((high && low) << 4) | low; } - ff_huff_vlc[++i].table = huff_vlc_tables + offset; - ff_huff_vlc[i].table_allocated = FF_ARRAY_ELEMS(huff_vlc_tables) - offset; - ff_vlc_init_from_lengths(&ff_huff_vlc[i], 7, j, - huff_lens, 1, tmp_symbols, 2, 2, - 0, VLC_INIT_STATIC_OVERLONG, NULL); - offset += ff_huff_vlc[i].table_size; + ff_huff_vlc[++i] = ff_vlc_init_tables_from_lengths(&state, 7, j, + huff_lens, 1, + tmp_symbols, 2, 2, + 0, 0); huff_lens += j; huff_sym += j; } - av_assert0(offset == FF_ARRAY_ELEMS(huff_vlc_tables)); + av_assert1(state.size == 0); offset = 0; for (int i = 0; i < 2; i++) { diff --git a/libavcodec/mpegaudiodec_template.c b/libavcodec/mpegaudiodec_template.c index 3e4ee79be6..c227604107 100644 --- a/libavcodec/mpegaudiodec_template.c +++ b/libavcodec/mpegaudiodec_template.c @@ -760,6 +760,7 @@ static int huffman_decode(MPADecodeContext *s, GranuleDef *g, /* low frequencies (called big values) */ s_index = 0; for (i = 0; i < 3; i++) { + const VLCElem *vlctab; int j, k, l, linbits; j = g->region_size[i]; if (j == 0) @@ -768,13 +769,13 @@ static int huffman_decode(MPADecodeContext *s, GranuleDef *g, k = g->table_select[i]; l = ff_mpa_huff_data[k][0]; linbits = ff_mpa_huff_data[k][1]; - vlc = &ff_huff_vlc[l]; if (!l) { memset(&g->sb_hybrid[s_index], 0, sizeof(*g->sb_hybrid) * 2 * j); s_index += 2 * j; continue; } + vlctab = ff_huff_vlc[l]; /* read huffcode and compute each couple */ for (; j > 0; j--) { @@ -787,7 +788,7 @@ static int huffman_decode(MPADecodeContext *s, GranuleDef *g, if (pos >= end_pos) break; } - y = get_vlc2(&s->gb, vlc->table, 7, 3); + y = get_vlc2(&s->gb, vlctab, 7, 3); if (!y) { g->sb_hybrid[s_index ] =