From patchwork Sat Sep 3 20:35:56 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 37637 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:139a:b0:8f:1db5:eae2 with SMTP id w26csp1748035pzh; Sat, 3 Sep 2022 13:36:17 -0700 (PDT) X-Google-Smtp-Source: AA6agR7CONpGrWlzfyvpEbFDFe3fiHE7EVxCETUNu2c+UKD5Vu+tJBd2cMC6B9mvKND6WGd19eDy X-Received: by 2002:a17:907:b0c:b0:73d:dc7f:4b8 with SMTP id h12-20020a1709070b0c00b0073ddc7f04b8mr30288275ejl.183.1662237376962; Sat, 03 Sep 2022 13:36:16 -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 w22-20020a170906385600b0073d72dbfdf8si3779020ejc.220.2022.09.03.13.36.16; Sat, 03 Sep 2022 13:36:16 -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="CtiIa/dZ"; 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 21B8C68BA3B; Sat, 3 Sep 2022 23:36:13 +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-oln040092065072.outbound.protection.outlook.com [40.92.65.72]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E282B68B5F7 for ; Sat, 3 Sep 2022 23:36:05 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ihZPLE6SfaDU/VAh5IwpwNhxXgmxATlCXXlsDL/2l/zkxLeR5/ngIT+73zuy3zSPM+w9vR6GqWuTgecAcUX70foVK7qxEECUJ6Obvw333u4cScSIRWGvGA4UEBUSyH+n5E80u4+cR+LHt53QUNkuwGE/SAfa7QzKRGQANoEEFn9e2UfAwHF7PGdq+BtkfSpD1vHD/xWbwnXbWbFwJImD56xrPT1/A0hXhPlMMvCVHmYMiVsH8lhDp9zW8flwD0bHswM0LrdRLprq0W+DT9dxSfLfKm/tcOTyR69AjEWRxftQVqcmehXdmaZYWJ+6hExpfByfxfIMQShGl6AufkWdFA== 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=as+io2efNsvdzxNOaBGgOfFi8tA91hvYXg6ZIAHExEQ=; b=nSTIDtXaiRuT8sfUY23QAVWk7pXQX6HIb2vJcgA2XMm6CvN3yu7T0q35A6ULIYwKz2W5Ye36DBbWcUBixxgdRmh/2ToazqoTELtlxt2EaFzOeV+VpZCfQ8dLT+d4yuOme99W/3s9G73OmOZElbSZpT6uOwkqjrKQ+0fEs2nFq07MqA8fo9MRFcYqM6kvuEnNqRIkCnpin8/Xmgrb8ECK3KykaZ9T5dV+YWBajAgwFSjzeHVdIJENraYC0OXDceKSdGgc9cvb1tPUrSO7RWRVPgflnArk8ls0vIzn6cLoJyQn/0R9EKHSfwg0dBKLhPm/TpTrYexeAvfD7EC7Wqx4Fg== 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=as+io2efNsvdzxNOaBGgOfFi8tA91hvYXg6ZIAHExEQ=; b=CtiIa/dZxz+niRYr+JuxVuwQswaR1BkBOY2ZEAjXOhTtgg8wGaVDWRJa8onEtldOFQ/wWnQoK7sVCmyxL1K0zbDomgd1nqPq/MYHNmkrhLXUp5FwSe+G506W+lO9mVMMh4Px/D63dnY5g2um1OZTc94vwrJ0DibAaZE4XV/oMpEyv8rZpavU9IkFyW/ESemhC0sxHxpkbPQ1BJRTupYHTmwzuUPxC2g4QoVjW6ld7oQ82S1qndnlgMDesk/MkuBcDg4qu6FLpz22gZf/IJVRGjs9tlkZxCd/KGv4ciMDLii7ebg8NjdzLdtXDV98gItL9xvdysWq09RWmgrGfguT2Q== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by PR3P250MB0241.EURP250.PROD.OUTLOOK.COM (2603:10a6:102:17c::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5588.12; Sat, 3 Sep 2022 20:36:03 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::f85a:9a02:f8be:7c47]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::f85a:9a02:f8be:7c47%2]) with mapi id 15.20.5588.010; Sat, 3 Sep 2022 20:36:03 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sat, 3 Sep 2022 22:35:56 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [VSjcDl+F9DgAC5bcuD8EPUddkTpCqojCSrhMvGDZCEw=] X-ClientProxiedBy: AM6P193CA0086.EURP193.PROD.OUTLOOK.COM (2603:10a6:209:88::27) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20220903203559.1961353-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5d076d4b-0763-404e-ff05-08da8debeb7d X-MS-Exchange-SLBlob-MailProps: feAVlmA1hHVJajBbP41IGVvcEX4IAvp85sPUG3IRiSiBCm2g11fXaVZL2fMGB5a8jgGEw6jNj6KyccmB9HZMiilMveiCy5t3TCWEZSjhHLRWPNPYdRUno4n+Iz9khMpyPcp1Vi/O5xinSV4YG2wtSnIae5X666dhS6yUktXOfsRds5DaAQzohe2f59RPSfH2uel+NfYjaYddOCqO0KdOBMGp22nQ9Jq2aoIOa0G8TLrVM1gQbOYUkEUS/OELlaJPRx4qNPVKzg6Z8qPl1DkDkV8hd98Z0MjZpJCbh5jjWS4oAlSfDcq9HCf44UWX5PowqFyPUxUVlbIKCvlntEu2M8VvtKkBeSkf32bCLr5e7pg3Bc8KFXj2v7R7qqILtCYn/7gTZWoP+enVp7PWR9GTTqjxl63c+SZBDtEdCxuZxXO5mY6WpNxzgtWR8dWKdTuHTht5/kvBGEvSJqDC0TIaQtvTzivdsZ8tthNsvcs7mtXCYgkYP991oCM9r5ymfKn4+r9MEC4vt0s9rqnCjF0AbK0tCd7sOk9cElFCG5AFw+w8yVnCYOLceOfBVy7afHisNJed8qUGsRz6gVPZDFOqqa/3B8XnjaItg+SzyyVrP3Y9n+EvdFC7B2zcb24HqGUKR8ExaFkI+Y53ieidLZRLHiZsA+UfuaE4YgZpyLeWAvA2u0tLcI7sSx35BeC/Jeykz/Owdu6Q4367LOqxZWZVVg== X-MS-TrafficTypeDiagnostic: PR3P250MB0241:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: P7DAbj9PW4xAGYDV13o5Jaw3K/cGsPMR4sufkzTboYMaF//pT4uzT2ApDj+PAv8yvb3r5YvZm2V8F8MW+NmGTpjSWePxVzA/xoOh9R94pZzh4lb08RH+XwTV8ODXJSzbnwBeaceqIZL6NwZzjwFrlIMwnSJbGB8XiSJybdT5E9rXPG1M/5Sctlwm9tjAIAYNSRR1UYeaAZ6GrJhWlOP1vgPicQ79ModWysgL5XjjoAMjebm4NBL1ynxdpIbCM+qjn71gt6HCh0h5Log+nFBAb4M/zxSFqVfYIjV4QabXyWm0lYj0BbSziRF2HvGK3vf3PpBZLx5SfaxNXJQ5zrRzQtALMJIhRR1p+3jzrjaibD1nKTHF+9O8rur1Yos3Wkn5BCYUJ1Y2V4UthW3x3TbJ1314IqhLf4vakVH71Wzlf+eYp5mJqZ15hrUqe61hkd47PA124aXDbkkM9Polj7EyQUlJ5SlkL8WXO+BPUU7AFrEoh2YrjPbK7JJ7W+gC43sBiGOnXS3QgrXh5MCshuW6i6A+f78BzgSnj4OjRCLybijLIAOjVg6jW6qnNc3nzFjbhA4J7uh0ZoupTToearhujf46fOyilkpKTF9WrkMO9bTzAL2M1mviMSAK3j+7k/nLAThXJU7WN2Tf+GkXNGbb5A== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Aa8NGsvigUSnVQbBQcdNpcGrbtcnt30up9T5ZSMiRkNLeKwAeMmI9shjbdnC0/vEJeoh8Nq6t5IGC7IPw9X5gN2t+UbYbDgV61Eu3HR1CO9ddRrboxRju5MCDh1sWARPwEoVZGinjCO/FNmuj0wKhnhhU2dU4KMy8GOpo4k15HJJ5Iflm/Kz015VWyVoVfecB1xTG5lFZmrtOF9tsBQT5KjoBCrYhRq9Uhj6D3OI/dhZYdibWi8BFkx7KXg9R7yi7wQplbR8l3k0TTaREAJPUKvqwK/PUtm2SiMObRIHweVSBX+siGeGeOhYp4k8IWawpTNWMNSqOtZJiIE65CYIz3p+w4yNTeP2RiQSzlaivn30DWVT4D4O12nY64TkXvl28MTKcHhupk9BWnZRZsvO6bPisRIE2HABnRHtUH55bm6MAAiIRUYqk31zukeOgPBd3Bm7pjYTscEMvB6Smx7goz+Kv15hw76MdqTugh/88e1yc0bsjUxHUJWJSyORqk2gJlUBNTD3YGWNobtXvYGMRPZjBrZSzNKxVAATylYrtlpnDU8GFIhUgPQZp16AYRbVFnHTrv7x/4aUkYZGblWN40E3QPZPeWpIwl6VQ8u6vuw+z6wQnG37JkOr+DpF1ms7empp74yPfZPJyYZR/vqbqQkMmwkeght+ELVpmj1pLjknZ5QE51U4HtMx6AhPjdhcPrNijLwz9VNJPo8PU2v9L8Euv/8zCBp1l2k16mfd9LjEavOs9Ibd9ZV0VeZmFAGfB9mxVlpaFKtn5jZVxUBbf5sYrFvs4H2Kkd3QeOOVEikI5jrr08V85MzuEUTUoNVDOiZtO45/uObLdpSs7Ixv8hURac4VfrZoCScl+5wbV/aknWScelpXCK5N9/9CKNFcKs6NlDQyvJzA/TtiIfdR3jTgAvFWMCCSZnJ0hNXHddDGJnEfYQI0K6yHDZncCf8CfXeDnta33HugaSJdfu8wVqP6pQ8mod0ZJj4ZUPYF9sOvUXI9oF7sz0H+BcIbNMO4J02U3bMBLrj9/JQmCMly8Qr9NaR/7NrBnSfluuLqr3XfzcU+cjWzt2JgcKK9ssf5sl2gdJElKWRUnSCpHo8mLfxpO1PYY64ThwbgRWqnJTLS/UrVhVpo7nQ1C5lSNexhRTlPeB+EbqK7WMn01HxyZgzGvPwFgo/UjRcKxzBrdIXMabGN8q1fc5d7VSIcqIDmY0MDvhi9W+FX3q+SvE1iHDd5TI0KKDKazLikFkycLLWdd2uoHGuBrjs7zZUebIMQ/v1vIwSB092fPRf3dT4U1VQki/7bswnuDnUi3ZspnJuIJWOvkolIAlQkjMp3ohXN X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5d076d4b-0763-404e-ff05-08da8debeb7d X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Sep 2022 20:36:03.6111 (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: PR3P250MB0241 Subject: [FFmpeg-devel] [PATCH 2/5] avcodec/cfhddata: Avoid code 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: LJUMBbB/gg28 cfhddata.c initializes a RL VLC table via code tables and corresponding tables for length, run and level. code and length tables are used to initialize a VLC, no symbol table is used. Afterwards the symbols of said VLC are just the indices of the corresponding entries in the code and length table that were used for initialization; they can therefore be used to get the matching level and run entry and they are not used for anything else. Therefore one can just permute these tables without changing the resulting RL VLC tables. This commit does just this. It permutes these tables so that the code tables are ordered from left to right in the resulting tree and then switches to ff_init_vlc_from_lengths(), which allows to remove the codes table altogether. Given that these tables are constructed on the stack, this also reduces stack usage, potentially fixing part of #9399. (The size of the tables on the stack decreases from 4752 to 2640.) Signed-off-by: Andreas Rheinhardt --- libavcodec/cfhddata.c | 372 +++++++++++++----------------------------- 1 file changed, 111 insertions(+), 261 deletions(-) diff --git a/libavcodec/cfhddata.c b/libavcodec/cfhddata.c index 212dccadb9..7c4b1454f3 100644 --- a/libavcodec/cfhddata.c +++ b/libavcodec/cfhddata.c @@ -27,248 +27,106 @@ #define NB_VLC_TABLE_9 (71 + 3) #define NB_VLC_TABLE_18 (263 + 1) -static const uint32_t table_9_vlc_bits[NB_VLC_TABLE_9] = { - 0, 0x2, 0xc, 0x1a, - 0x1d, 0x1e, 0x39, 0x3e, - 0x37, 0x7e, 0x6c, 0xe2, - 0xfe, 0xdb, 0xe0, 0x1c3, - 0x1c6, 0x1ff, 0x1fe, 0x1b5, - 0x369, 0x385, 0x71d, 0x6d0, - 0x708, 0x71f, 0xe3d, 0xe39, - 0xe13, 0xe12, 0x1c71, 0x1b45, - 0x1b47, 0x3689, 0x38f2, 0x38e1, - 0x38e0, 0x38f1, 0x3688, 0x6d1b, - 0x71e0, 0x6d19, 0x71e7, 0xe3cd, - 0xda35, 0xda30, 0xe3c3, 0x1b469, - 0x1b462, 0x1c798, 0x1b463, 0x1c799, - 0x38f08, 0x38f09, 0x38f0a, 0x6d1a0, - 0x6d1a3, 0x6d1a1, 0xda345, 0xda344, - 0xe3c2d, 0xe3c2f, 0xe3c2e, 0x38f0b2, - 0x71e160, 0x71e162, 0x71e166, 0x71e161, - 0xe3c2ce, 0xe3c2c6, 0xe3c2c7, 0x1C7859E, - 0x38F0B3F, 0x38F0B3E, +typedef struct CFHD_RL_ELEM { + uint16_t run; + uint8_t level; + uint8_t len; +} CFHD_RL_ELEM; + +static const CFHD_RL_ELEM table_9_vlc[NB_VLC_TABLE_9] = { + { 1, 0, 1 }, { 1, 1, 2 }, { 1, 2, 4 }, { 1, 3, 5 }, + { 1, 6, 7 }, { 1, 15, 11 }, { 1, 26, 14 }, { 1, 27, 14 }, + { 1, 23, 13 }, { 1, 36, 16 }, { 1, 40, 17 }, { 1, 41, 17 }, + { 1, 32, 15 }, { 1, 48, 19 }, { 1, 49, 19 }, { 1, 51, 20 }, + { 1, 52, 20 }, { 1, 50, 19 }, { 1, 42, 17 }, { 1, 37, 16 }, + { 1, 33, 15 }, { 1, 24, 13 }, { 1, 13, 10 }, { 1, 10, 9 }, + { 1, 8, 8 }, { 1, 5, 6 }, { 80, 0, 8 }, { 1, 16, 11 }, + { 1, 19, 12 }, { 1, 20, 12 }, { 1, 14, 10 }, { 120, 0, 9 }, + { 320, 0, 8 }, { 1, 11, 9 }, { 1, 28, 14 }, { 1, 29, 14 }, + { 1, 25, 13 }, { 1, 21, 12 }, { 1, 17, 11 }, { 1, 34, 15 }, + { 1, 45, 18 }, { 1, 46, 18 }, { 1, 47, 18 }, { 1, 57, 23 }, + { 1, 58, 23 }, { 1, 59, 23 }, { 1, 62, 24 }, { 1, 63, 24 }, + { 1, 56, 22 }, { 1, 60, 23 }, { 1, 61, 24 }, { 1, 64, 25 }, + { 0, 64, 26 }, { 1, 64, 26 }, { 1, 53, 20 }, { 1, 54, 20 }, + { 1, 55, 20 }, { 1, 38, 16 }, { 1, 30, 14 }, { 1, 31, 14 }, + { 1, 43, 17 }, { 1, 44, 17 }, { 1, 39, 16 }, { 1, 35, 15 }, + { 1, 22, 12 }, { 1, 18, 11 }, { 32, 0, 6 }, { 12, 0, 5 }, + { 1, 4, 5 }, { 160, 0, 6 }, { 1, 7, 7 }, { 1, 9, 8 }, + { 100, 0, 9 }, { 1, 12, 9 }, }; -static const uint8_t table_9_vlc_len[NB_VLC_TABLE_9] = { - 1, 2, 4, 5, 5, 5, 6, 6, - 6, 7, 7, 8, 8, 8, 8, 9, - 9, 9, 9, 9, 10, 10, 11, 11, - 11, 11, 12, 12, 12, 12, 13, 13, - 13, 14, 14, 14, 14, 14, 14, 15, - 15, 15, 15, 16, 16, 16, 16, 17, - 17, 17, 17, 17, 18, 18, 18, 19, - 19, 19, 20, 20, 20, 20, 20, 22, - 23, 23, 23, 23, 24, 24, 24, 25, - 26, 26, -}; - -static const uint16_t table_9_vlc_run[NB_VLC_TABLE_9] = { - 1, 1, 1, 1, 12, 1, 32, 160, - 1, 1, 1, 320, 1, 1, 80, 120, - 1, 1, 100, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 0, -}; - -static const uint8_t table_9_vlc_level[NB_VLC_TABLE_9] = { - 0, 1, 2, 3, 0, 4, 0, 0, - 5, 7, 6, 0, 9, 8, 0, 0, - 11, 12, 0, 10, 13, 14, 17, 15, - 16, 18, 22, 21, 20, 19, 25, 23, - 24, 27, 31, 29, 28, 30, 26, 33, - 34, 32, 35, 39, 37, 36, 38, 42, - 40, 43, 41, 44, 45, 46, 47, 48, - 50, 49, 52, 51, 53, 55, 54, 56, - 57, 59, 60, 58, 61, 62, 63, 64, - 64, 64, -}; - -static const uint32_t table_18_vlc_bits[NB_VLC_TABLE_18] = { - 0, 0x2, 0x7, 0x19, - 0x30, 0x36, 0x6f, 0x63, - 0x69, 0x6b, 0xd1, 0xd4, - 0xdc, 0x189, 0x18a, 0x1a0, - 0x1ab, 0x377, 0x310, 0x316, - 0x343, 0x354, 0x375, 0x623, - 0x684, 0x685, 0x6ab, 0x6ec, - 0xddb, 0xc5c, 0xc5e, 0xc44, - 0xd55, 0xdd1, 0xdd3, 0x1bb5, - 0x188b, 0x18bb, 0x18bf, 0x1aa8, - 0x1ba0, 0x1ba5, 0x1ba4, 0x3115, - 0x3175, 0x317d, 0x3553, 0x3768, - 0x6e87, 0x6ed3, 0x62e8, 0x62f8, - 0x6228, 0x6aa4, 0x6e85, 0xc453, - 0xc5d3, 0xc5f3, 0xdda4, 0xdd08, - 0xdd0c, 0x1bb4b, 0x1bb4a, 0x18ba5, - 0x18be5, 0x1aa95, 0x1aa97, 0x188a4, - 0x1ba13, 0x31748, 0x317c8, 0x35528, - 0x3552c, 0x37424, 0x37434, 0x37436, - 0x62294, 0x62e92, 0x62f92, 0x6aa52, - 0x6aa5a, 0x6e86a, 0x6e86e, 0x6e84a, - 0xc452a, 0xc5d27, 0xc5f26, 0xd54a6, - 0xd54b6, 0xdd096, 0xdd0d6, 0xdd0de, - 0x188a56, 0x18ba4d, 0x18be4e, 0x18be4f, - 0x1aa96e, 0x1ba12e, 0x1ba12f, 0x1ba1af, - 0x1ba1bf, 0x37435d, 0x37437d, 0x317498, - 0x35529c, 0x35529d, 0x3552de, 0x3552df, - 0x62e933, 0x62295d, 0x6aa53d, 0x6aa53f, - 0x6aa53e, 0x6e86b9, 0x6e86f8, 0xd54a79, - 0xc5d265, 0xc452b8, 0xdd0d71, 0xd54a78, - 0xdd0d70, 0xdd0df2, 0xdd0df3, 0x188a5f6, - 0x188a5f5, 0x188a5f4, 0x188a5f3, 0x188a5f2, - 0x188a5f1, 0x188a5f0, 0x188a5ef, 0x188a5ee, - 0x188a5ed, 0x188a5aa, 0x188a5e3, 0x188a5df, - 0x188a589, 0x188a5dd, 0x188a578, 0x188a5e0, - 0x188a588, 0x188a5d6, 0x188a5db, 0x188a5e1, - 0x188a587, 0x188a59a, 0x188a5c4, 0x188a5ec, - 0x188a586, 0x188a573, 0x188a59c, 0x188a5c8, - 0x188a5fb, 0x188a5a1, 0x188a5eb, 0x188a5a8, - 0x188a584, 0x188a5d2, 0x188a599, 0x188a598, - 0x188a583, 0x18ba4c9, 0x188a5d0, 0x188a594, - 0x188a582, 0x188a5cb, 0x188a5d8, 0x188a5e7, - 0x188a581, 0x188a5ea, 0x188a5a9, 0x188a5a6, - 0x188a580, 0x188a5a0, 0x188a59d, 0x188a5c3, - 0x188a57f, 0x188a5c0, 0x188a5de, 0x188a5d4, - 0x188a57e, 0x188a5c2, 0x188a592, 0x188a5cd, - 0x188a57d, 0x188a5a3, 0x188a5e8, 0x188a5a2, - 0x188a57c, 0x188a58e, 0x188a5b3, 0x188a5b2, - 0x188a5b1, 0x188a5b0, 0x188a5af, 0x188a5ae, - 0x188a5ad, 0x188a5ac, 0x188a5ab, 0x188a5da, - 0x188a5e4, 0x188a5e5, 0x188a5d9, 0x188a5b5, - 0x188a5bc, 0x188a5bd, 0x188a5e9, 0x188a5cc, - 0x188a585, 0x188a5d3, 0x188a5e2, 0x188a595, - 0x188a596, 0x188a5b8, 0x188a590, 0x188a5c9, - 0x188a5a4, 0x188a5e6, 0x188a5a5, 0x188a5ce, - 0x188a5bf, 0x188a572, 0x188a59b, 0x188a5be, - 0x188a5c7, 0x188a5ca, 0x188a5d5, 0x188a57b, - 0x188a58d, 0x188a58c, 0x188a58b, 0x188a58a, - 0x18ba4c8, 0x188a5c5, 0x188a5fa, 0x188a5bb, - 0x188a5c1, 0x188a5cf, 0x188a5b9, 0x188a5b6, - 0x188a597, 0x188a5fe, 0x188a5d7, 0x188a5ba, - 0x188a591, 0x188a5c6, 0x188a5dc, 0x188a57a, - 0x188a59f, 0x188a5f9, 0x188a5b4, 0x188a5a7, - 0x188a58f, 0x188a5fd, 0x188a5b7, 0x188a593, - 0x188a59e, 0x188a5f8, 0x188a5ff, 0x188a5fc, - 0x188a579, 0x188a5f7, 0x3114ba2, 0x3114ba3, -}; - -static const uint8_t table_18_vlc_len[NB_VLC_TABLE_18] = { - 1, 2, 3, 5, 6, 6, 7, 7, - 7, 7, 8, 8, 8, 9, 9, 9, - 9, 10, 10, 10, 10, 10, 10, 11, - 11, 11, 11, 11, 12, 12, 12, 12, - 12, 12, 12, 13, 13, 13, 13, 13, - 13, 13, 13, 14, 14, 14, 14, 14, - 15, 15, 15, 15, 15, 15, 15, 16, - 16, 16, 16, 16, 16, 17, 17, 17, - 17, 17, 17, 17, 17, 18, 18, 18, - 18, 18, 18, 18, 19, 19, 19, 19, - 19, 19, 19, 19, 20, 20, 20, 20, - 20, 20, 20, 20, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 22, 22, 22, - 22, 22, 22, 22, 23, 23, 23, 23, - 23, 23, 23, 24, 24, 24, 24, 24, - 24, 24, 24, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 26, 26, -}; - -static const uint16_t table_18_vlc_run[NB_VLC_TABLE_18] = { - 1, 1, 1, 1, 1, 1, 1, 1, - 12, 1, 20, 1, 1, 1, 32, 1, - 1, 1, 1, 1, 60, 1, 1, 1, - 1, 100, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 180, 1, - 1, 320, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 0, -}; - -static const uint8_t table_18_vlc_level[NB_VLC_TABLE_18] = { - 0, 1, 2, 3, 4, 5, 8, 6, - 0, 7, 0, 9, 10, 11, 0, 12, - 13, 18, 14, 15, 0, 16, 17, 19, - 20, 0, 21, 22, 29, 24, 25, 23, - 26, 27, 28, 35, 30, 31, 0, 32, - 33, 0, 34, 36, 37, 38, 39, 40, - 46, 47, 42, 43, 41, 44, 45, 48, - 49, 50, 53, 51, 52, 61, 60, 55, - 56, 57, 58, 54, 59, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, - 73, 75, 76, 74, 77, 78, 79, 80, - 81, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 91, 92, 93, 99, 100, 94, - 95, 96, 97, 98, 102, 101, 103, 105, - 104, 106, 107, 111, 109, 108, 113, 110, - 112, 114, 115, 225, 189, 188, 203, 202, - 197, 207, 169, 223, 159, 235, 152, 192, - 179, 201, 172, 149, 178, 120, 219, 150, - 127, 211, 125, 158, 247, 238, 163, 228, - 183, 217, 168, 122, 128, 249, 187, 186, - 136, 181, 255, 230, 135, 233, 222, 145, - 134, 167, 248, 209, 243, 216, 164, 140, - 157, 239, 191, 251, 156, 139, 242, 133, - 162, 213, 165, 212, 227, 198, 236, 234, - 117, 215, 124, 123, 254, 253, 148, 218, - 146, 147, 224, 143, 184, 185, 166, 132, - 129, 250, 151, 119, 193, 176, 245, 229, - 206, 144, 208, 137, 241, 237, 190, 240, - 131, 232, 252, 171, 205, 204, 118, 214, - 180, 126, 182, 175, 141, 138, 177, 153, - 194, 160, 121, 174, 246, 130, 200, 170, - 221, 196, 142, 210, 199, 155, 154, 244, - 220, 195, 161, 231, 173, 226, 116, 255, +static const CFHD_RL_ELEM table_18_vlc[NB_VLC_TABLE_18] = { + { 1, 0, 1 }, { 1, 1, 2 }, { 1, 4, 6 }, { 1, 14, 10 }, + { 1, 23, 12 }, { 1, 41, 15 }, { 1, 54, 17 }, { 1, 69, 19 }, + { 1, 77, 20 }, { 1, 85, 21 }, { 1, 108, 24 }, { 1, 237, 25 }, + { 1, 238, 25 }, { 1, 101, 23 }, { 1, 172, 25 }, { 1, 173, 25 }, + { 1, 170, 25 }, { 1, 171, 25 }, { 1, 227, 25 }, { 1, 162, 25 }, + { 1, 156, 25 }, { 1, 157, 25 }, { 1, 243, 25 }, { 1, 134, 25 }, + { 1, 135, 25 }, { 1, 136, 25 }, { 1, 128, 25 }, { 1, 129, 25 }, + { 1, 247, 25 }, { 1, 127, 25 }, { 1, 178, 25 }, { 1, 179, 25 }, + { 1, 214, 25 }, { 1, 118, 25 }, { 1, 204, 25 }, { 1, 205, 25 }, + { 1, 198, 25 }, { 1, 199, 25 }, { 1, 245, 25 }, { 1, 246, 25 }, + { 1, 242, 25 }, { 1, 244, 25 }, { 1, 230, 25 }, { 1, 119, 25 }, + { 1, 193, 25 }, { 1, 194, 25 }, { 1, 186, 25 }, { 1, 187, 25 }, + { 1, 211, 25 }, { 1, 190, 25 }, { 1, 163, 25 }, { 1, 164, 25 }, + { 1, 220, 25 }, { 1, 221, 25 }, { 1, 216, 25 }, { 1, 217, 25 }, + { 1, 212, 25 }, { 1, 213, 25 }, { 1, 206, 25 }, { 1, 208, 25 }, + { 1, 209, 25 }, { 1, 210, 25 }, { 1, 122, 25 }, { 1, 248, 25 }, + { 1, 235, 25 }, { 1, 148, 25 }, { 1, 253, 25 }, { 1, 254, 25 }, + { 1, 123, 25 }, { 1, 124, 25 }, { 1, 215, 25 }, { 1, 117, 25 }, + { 1, 234, 25 }, { 1, 236, 25 }, { 1, 142, 25 }, { 1, 143, 25 }, + { 1, 153, 25 }, { 1, 154, 25 }, { 1, 176, 25 }, { 1, 177, 25 }, + { 1, 174, 25 }, { 1, 175, 25 }, { 1, 184, 25 }, { 1, 185, 25 }, + { 1, 240, 25 }, { 1, 241, 25 }, { 1, 239, 25 }, { 1, 141, 25 }, + { 1, 139, 25 }, { 1, 140, 25 }, { 1, 125, 25 }, { 1, 126, 25 }, + { 1, 130, 25 }, { 1, 131, 25 }, { 1, 228, 25 }, { 1, 229, 25 }, + { 1, 232, 25 }, { 1, 233, 25 }, { 1, 132, 25 }, { 1, 133, 25 }, + { 1, 137, 25 }, { 1, 138, 25 }, { 1, 255, 25 }, { 1, 116, 26 }, + { 0, 255, 26 }, { 1, 249, 25 }, { 1, 250, 25 }, { 1, 251, 25 }, + { 1, 252, 25 }, { 1, 120, 25 }, { 1, 121, 25 }, { 1, 222, 25 }, + { 1, 224, 25 }, { 1, 218, 25 }, { 1, 219, 25 }, { 1, 200, 25 }, + { 1, 201, 25 }, { 1, 191, 25 }, { 1, 192, 25 }, { 1, 149, 25 }, + { 1, 150, 25 }, { 1, 151, 25 }, { 1, 152, 25 }, { 1, 146, 25 }, + { 1, 147, 25 }, { 1, 144, 25 }, { 1, 145, 25 }, { 1, 165, 25 }, + { 1, 166, 25 }, { 1, 167, 25 }, { 1, 168, 25 }, { 1, 158, 25 }, + { 1, 159, 25 }, { 1, 223, 25 }, { 1, 169, 25 }, { 1, 207, 25 }, + { 1, 197, 25 }, { 1, 202, 25 }, { 1, 203, 25 }, { 1, 188, 25 }, + { 1, 189, 25 }, { 1, 225, 25 }, { 1, 226, 25 }, { 1, 195, 25 }, + { 1, 196, 25 }, { 1, 182, 25 }, { 1, 183, 25 }, { 1, 231, 25 }, + { 1, 155, 25 }, { 1, 160, 25 }, { 1, 161, 25 }, { 1, 48, 16 }, + { 1, 36, 14 }, { 1, 30, 13 }, { 1, 19, 11 }, { 1, 11, 9 }, + { 32, 0, 9 }, { 1, 15, 10 }, { 1, 24, 12 }, { 1, 42, 15 }, + { 1, 62, 18 }, { 1, 70, 19 }, { 1, 94, 22 }, { 1, 180, 25 }, + { 1, 181, 25 }, { 1, 109, 24 }, { 1, 102, 23 }, { 1, 86, 21 }, + { 1, 78, 20 }, { 1, 55, 17 }, { 1, 49, 16 }, { 1, 37, 14 }, + { 1, 31, 13 }, { 1, 25, 12 }, { 1, 43, 15 }, { 1, 63, 18 }, + { 1, 71, 19 }, { 1, 79, 20 }, { 1, 87, 21 }, { 1, 88, 21 }, + { 1, 56, 17 }, { 1, 50, 16 }, { 1, 38, 14 }, { 180, 0, 13 }, + { 1, 6, 7 }, { 1, 3, 5 }, { 1, 12, 9 }, { 1, 20, 11 }, + { 100, 0, 11 }, { 60, 0, 10 }, { 20, 0, 8 }, { 12, 0, 7 }, + { 1, 9, 8 }, { 1, 16, 10 }, { 1, 32, 13 }, { 1, 44, 15 }, + { 1, 64, 18 }, { 1, 72, 19 }, { 1, 80, 20 }, { 1, 95, 22 }, + { 1, 96, 22 }, { 1, 110, 24 }, { 1, 111, 24 }, { 1, 103, 23 }, + { 1, 104, 23 }, { 1, 105, 23 }, { 1, 57, 17 }, { 1, 65, 18 }, + { 1, 73, 19 }, { 1, 81, 20 }, { 1, 89, 21 }, { 1, 97, 22 }, + { 1, 98, 22 }, { 1, 58, 17 }, { 1, 39, 14 }, { 1, 26, 12 }, + { 1, 21, 11 }, { 1, 13, 9 }, { 1, 7, 7 }, { 1, 5, 6 }, + { 1, 10, 8 }, { 1, 33, 13 }, { 1, 51, 16 }, { 1, 66, 18 }, + { 1, 74, 19 }, { 1, 82, 20 }, { 1, 90, 21 }, { 1, 91, 21 }, + { 1, 59, 17 }, { 1, 45, 15 }, { 1, 52, 16 }, { 1, 67, 18 }, + { 1, 75, 19 }, { 1, 83, 20 }, { 1, 112, 24 }, { 1, 113, 24 }, + { 1, 106, 23 }, { 1, 99, 22 }, { 1, 92, 21 }, { 1, 68, 18 }, + { 1, 76, 19 }, { 1, 84, 20 }, { 1, 107, 23 }, { 1, 114, 24 }, + { 1, 115, 24 }, { 1, 100, 22 }, { 1, 93, 21 }, { 1, 46, 15 }, + { 1, 27, 12 }, { 1, 34, 13 }, { 320, 0, 13 }, { 1, 28, 12 }, + { 1, 17, 10 }, { 1, 22, 11 }, { 1, 40, 14 }, { 1, 53, 16 }, + { 1, 60, 17 }, { 1, 61, 17 }, { 1, 47, 15 }, { 1, 35, 13 }, + { 1, 29, 12 }, { 1, 18, 10 }, { 1, 8, 7 }, { 1, 2, 3 }, }; av_cold int ff_cfhd_init_vlcs(CFHDContext *s) { int i, j, ret = 0; - uint32_t new_cfhd_vlc_bits[NB_VLC_TABLE_18 * 2]; uint8_t new_cfhd_vlc_len[NB_VLC_TABLE_18 * 2]; uint16_t new_cfhd_vlc_run[NB_VLC_TABLE_18 * 2]; int16_t new_cfhd_vlc_level[NB_VLC_TABLE_18 * 2]; @@ -277,26 +135,22 @@ av_cold int ff_cfhd_init_vlcs(CFHDContext *s) /* Table 9 */ for (i = 0, j = 0; i < NB_VLC_TABLE_9; i++, j++) { - new_cfhd_vlc_bits[j] = table_9_vlc_bits[i]; - new_cfhd_vlc_len[j] = table_9_vlc_len[i]; - new_cfhd_vlc_run[j] = table_9_vlc_run[i]; - new_cfhd_vlc_level[j] = table_9_vlc_level[i]; + new_cfhd_vlc_len[j] = table_9_vlc[i].len; + new_cfhd_vlc_run[j] = table_9_vlc[i].run; + new_cfhd_vlc_level[j] = table_9_vlc[i].level; /* Don't include the zero level nor escape bits */ - if (table_9_vlc_level[i] && - new_cfhd_vlc_bits[j] != table_9_vlc_bits[NB_VLC_TABLE_9-1]) { - new_cfhd_vlc_bits[j] <<= 1; + if (table_9_vlc[i].level && table_9_vlc[i].run) { new_cfhd_vlc_len[j]++; j++; - new_cfhd_vlc_bits[j] = (table_9_vlc_bits[i] << 1) | 1; - new_cfhd_vlc_len[j] = table_9_vlc_len[i] + 1; - new_cfhd_vlc_run[j] = table_9_vlc_run[i]; - new_cfhd_vlc_level[j] = -table_9_vlc_level[i]; + new_cfhd_vlc_len[j] = table_9_vlc[i].len + 1; + new_cfhd_vlc_run[j] = table_9_vlc[i].run; + new_cfhd_vlc_level[j] = -table_9_vlc[i].level; } } - ret = init_vlc(&s->vlc_9, VLC_BITS, j, new_cfhd_vlc_len, - 1, 1, new_cfhd_vlc_bits, 4, 4, 0); + ret = ff_init_vlc_from_lengths(&s->vlc_9, VLC_BITS, j, new_cfhd_vlc_len, + 1, NULL, 0, 0, 0, 0, s->avctx); if (ret < 0) return ret; for (i = 0; i < s->vlc_9.table_size; i++) { @@ -318,26 +172,22 @@ av_cold int ff_cfhd_init_vlcs(CFHDContext *s) /* Table 18 */ for (i = 0, j = 0; i < NB_VLC_TABLE_18; i++, j++) { - new_cfhd_vlc_bits[j] = table_18_vlc_bits[i]; - new_cfhd_vlc_len[j] = table_18_vlc_len[i]; - new_cfhd_vlc_run[j] = table_18_vlc_run[i]; - new_cfhd_vlc_level[j] = table_18_vlc_level[i]; + new_cfhd_vlc_len[j] = table_18_vlc[i].len; + new_cfhd_vlc_run[j] = table_18_vlc[i].run; + new_cfhd_vlc_level[j] = table_18_vlc[i].level; /* Don't include the zero level nor escape bits */ - if (table_18_vlc_level[i] && - new_cfhd_vlc_bits[j] != table_18_vlc_bits[NB_VLC_TABLE_18-1]) { - new_cfhd_vlc_bits[j] <<= 1; + if (table_18_vlc[i].level && table_18_vlc[i].run) { new_cfhd_vlc_len[j]++; j++; - new_cfhd_vlc_bits[j] = (table_18_vlc_bits[i] << 1) | 1; - new_cfhd_vlc_len[j] = table_18_vlc_len[i] + 1; - new_cfhd_vlc_run[j] = table_18_vlc_run[i]; - new_cfhd_vlc_level[j] = -table_18_vlc_level[i]; + new_cfhd_vlc_len[j] = table_18_vlc[i].len + 1; + new_cfhd_vlc_run[j] = table_18_vlc[i].run; + new_cfhd_vlc_level[j] = -table_18_vlc[i].level; } } - ret = init_vlc(&s->vlc_18, VLC_BITS, j, new_cfhd_vlc_len, - 1, 1, new_cfhd_vlc_bits, 4, 4, 0); + ret = ff_init_vlc_from_lengths(&s->vlc_18, VLC_BITS, j, new_cfhd_vlc_len, + 1, NULL, 0, 0, 0, 0, s->avctx); if (ret < 0) return ret; av_assert0(s->vlc_18.table_size == 4572);