From patchwork Tue Sep 26 22:16:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 43928 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:2a18:b0:15d:8365:d4b8 with SMTP id e24csp2208537pzh; Tue, 26 Sep 2023 15:17:55 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFyPSRIJU/NAiJY6cRYB3XPBsZG1HX+9tF1hU01aDQchBqaJjosmOEozcVKWdE0oCvJ3m3Y X-Received: by 2002:a05:6402:1841:b0:52b:d169:b373 with SMTP id v1-20020a056402184100b0052bd169b373mr269874edy.32.1695766674976; Tue, 26 Sep 2023 15:17:54 -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 a1-20020aa7cf01000000b005313a6a9d5asi9455836edy.418.2023.09.26.15.17.54; Tue, 26 Sep 2023 15:17:54 -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=Z633Uxe7; 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 ED14C68CAA0; Wed, 27 Sep 2023 01:17:03 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2043.outbound.protection.outlook.com [40.92.90.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 31B0868CA44 for ; Wed, 27 Sep 2023 01:17:02 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TWXbX3w0XYSUiX5tea7lD0/HPLTgZg1otK7nY5X4XSglqz2iAeSvXHiYhcGO0EXENOFQD7CVSRaqs4jfNEA+Qb4hiKNsfKgkERDmFk+r38C608um1yZ23BzGutRSZPqmcwjB8ADtNIpnGNQIl0wolY54FMm/52jyjggLLIxYixme0s+lUJkat7VydiwEzwTXKubqVB23xNRTcSimuNOdIUDQYWVBPAGHpeaIeEOqaW/r/AIy8ozGN4vYcP7/VjuQSXBEcsd2SkdFVZuXm9Bx+QYxqLmpznqXcG9BOdiE8Al/LOz97Ckdf4VkUjgkWAci9dSxkiZ35ZQOGQnHk4UpoA== 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=pKRR321ZhcZo3TYEKdj28dm0egWn1D1l0Dt8GcpsQDA=; b=FO27mwmkK5rn899E4zmwL3rRxyzr1XtSCJISjafBvKvhRWy4NINttWrPHbAiAw/oGlqbQ+Fzdigclbvb9yPQAxXaqQzVul43H1xuAdBxGXyiAsU7IV+zz3st7yiqJINv8FFSR8JNdiMnZH/HCRP9WwjJl5DOUlylk+bOOixLjGcyRaWaQAZqranEmQwoVmMkaK9aExThAoSc0sWwE8xNNYsozIOcJ1e9Uh6f+J8b0IlGiEeVXlYxViPezww6XLuFkcr2MJ+3ts9Xl64b3ZTdtEXGRZx30pa6BcMBLu+1jA+RpZcIcnZK+2MNPjB5Yb0/gqw11ivOAylPACRGvUJi6Q== 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=pKRR321ZhcZo3TYEKdj28dm0egWn1D1l0Dt8GcpsQDA=; b=Z633Uxe7UwNUwDQfebhmHlQwtWGLd5jwHAgLsgQCHGpi9JI+758ve4qwYq+buPvNXx08I2T6txeATY39oK65w5WH7tdeYdE1BwsLeSejC85hi2aU+NY57WZUDZaKi12rnpn8MdIq0a59JFDesFnbmm191gOmL9G454+3YFdrFDKFYEpYBqPp6sO9EE7m5cyIq60ARTsNSj74jsuNJU8EXDffmfv2PORLK83vSqu+/VSxwepxRWT+66xy7XRamnAXNXfHJJKE3oLl2kMaiILyFWPCw97DAEyvXJ/CnqB7esJARB+i5yO1WVYnex3uCFKPG5yc+G98z615Nvf+9mJozw== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by AS4P250MB0413.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:4c0::8) 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:17:01 +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:17:01 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Sep 2023 00:16:42 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [wLckJpiann8tIuYZD272OFfIwC6kZyu9] 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-10-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|AS4P250MB0413:EE_ X-MS-Office365-Filtering-Correlation-Id: 3b0ec2e3-9e20-436c-ea6d-08dbbede4e8d X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Jqd7hTT7Nu3WIHXVdx+afK9zNTn4fqrP7hy5/5aI9cA8W8cGNuY6c8Rrymcu7BgLGP26f/xEA1fCldzjbQMHFYfTuMXB+DY8dKJ+CaKJx1r4EbnjbFCMYMPsxzirlEWuVae7Y8n8JTnB3bItTGArF3zL2RJ6C9pr3XFsBqzRJXhl0HrhmcikOXtJN0IJyq/cf6z1NUIQ2RRNM7zcbkoEAQ1Mu8TS8vUehYlDiAjD2AUS/xQH5/Mpa3cXcydQmbU93xmqJt50NN+PRdotFYKGK+zRn25qPCHzXng15q7PqzVh/M//cO8HOfKaTWITC5mre1GysHa3sgc/VmizFqVlI7/akw0Zc01JXVwpd2ME7UBRi7SL72H7dA8RQp/DKXYeMJiFvcK5KZAHYWQUa3NJs/5HCLbMQLKvkEpdHQKflQoDnE6GYrJJHEZhDWqUwOWat+zZZaSAhDV+tdZPS6Zd45ucmK3LJzCC/3KnqnsMQULJAxlEZmOaoSzA4uEM0Zw1DJxpYW+ORDTF1qgxh2J7zRDCCD4ickkKMibLVZ6VOyVg3I6kUqbivQwRgZPpmZAHVSMRiQ/+jWmrZ32yIBDicFTMGtzby5Zq01+p26imPkmGmzo5ajfH5EZUBphnvLAl X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: M8baq328hpasm8WU+Vke27avEsWhDEBbpch7guZBzW2k6zJdSlD8PwxpdYyc6H1Ac4nvEhwkXRdEbKidi2kJhUkypOkOhQGfTG+GHu1pMaTOhOWI8s2gV7YGJ9K691veFiW9qkB86ebuTMN1CWugn/dxmNuorTT1FFfHdgTJO934y3vbG9Xz8q3zqj2xlkl6NLI11x76hzT/1+V+Cz+M/IDTvOwxeREauZfgBzMPJnIPXDGJ0WYEeQivoDNiy+i0RAGVAXzOlWeXY/HQ9M6h9UcGDc08s3UQWU5HzOnrj/vvxW0BAvPH59riPV1+GaNno+dGUBQ29ASnU3VMa/tGIy8Vie3vzqu4QutXiuvSJ2sdHKNsV2C24evO4HUxJScrdKCDNPrzuh8XJc/zW83rQ0sOOZ2eutX+to6Fn4MH5XKtLEoaKmY1tEINQlzkZfW7bid54Mw5vemKzH+v6dR2JZm1SBo4N7PioV8jzjYv/LX0lOGNK4kicR5RyH+doP9wEZ4eEH+TrXrND0tKZt+wMTl74uHnjbJoRBqwq5kIYgtJHrI8qPbYb7Y/oFvw0RBOI7II06Rh12yefGXpfqjDfE6zVL3iEydYCbIThlOslcXjwddO2/b5LP/GlRgMJMZ509tS1ef2oa5Z+n0DXu6udd8J8l78FO1g7n7Uq7CO+IZE2rG0jmE8uNLuyOoO3PGIGe3RXPGgqodxmwWOlxQlIaAbZHhdDPKFZDXw+FerHKfU+zm8gcVmYQSDaLWnpS4AnkQWXUdQwC4kopmzf6MyEEutR5RHdH3ZFtN4tiMfFXIpMy/XkwpG2WlsI0xXVh1BXdPsJ4gUhRU1Jdd1FvFaA2Mb8K6TSmskmxFnzHoLTpNrBLnGWhEUlPm6mj503omDseKfakzQJWY5ymP9RO9PdOHZc8f3t+skUHVW9Vqgpl8TBKNfuZZCxeVIMLMbUpPtj0hyBuxUOi3tOyUm4hxrX+1h7coLl7TRTHXUvCaXYdBIwGTpJFCCHYQB1cueBPEuvaf8bTB9AManVnq0PunroRWuzvMDvs44brtefEC1D1FB8YUrSbMh+mE8NUIE6Suc744pE/OWvSc15dKWwSXB+L74HCrEJ9zTCM+RHi5kwEvTAghGkY10G4TfWOISLVJb03q7CaxHDpNCyWkOH23ankhrKoVjE3g5y/VMT50DJY8X/csWP7ifsMlhFbh2focX5Ix3DAGVH0HisFABv1rq21NqN2N5NugSmj+Jit9AobwnAcEXUw+uhrWlQrrcP6tQ X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3b0ec2e3-9e20-436c-ea6d-08dbbede4e8d 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:17:01.5772 (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: AS4P250MB0413 Subject: [FFmpeg-devel] [PATCH 11/61] avcodec/msmpeg4_vc1_data: 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: DFmga9uw4DZG Of all these VLCs here, only VLC.table was really used after init, so use the ff_vlc_init_tables API to get rid of them. Also combine the ff_msmp4_dc_(luma|chroma)_vlcs as well as the tables used to generate them to simplify the code. Signed-off-by: Andreas Rheinhardt --- libavcodec/msmpeg4_vc1_data.c | 61 +++++++++++++++++------------------ libavcodec/msmpeg4_vc1_data.h | 10 ++---- libavcodec/msmpeg4dec.c | 13 +++----- libavcodec/msmpeg4enc.c | 15 ++------- libavcodec/vc1_block.c | 31 +++++------------- libavcodec/wmv2dec.c | 2 +- 6 files changed, 48 insertions(+), 84 deletions(-) diff --git a/libavcodec/msmpeg4_vc1_data.c b/libavcodec/msmpeg4_vc1_data.c index e643668730..a25eb956ff 100644 --- a/libavcodec/msmpeg4_vc1_data.c +++ b/libavcodec/msmpeg4_vc1_data.c @@ -32,28 +32,25 @@ #include "libavutil/attributes.h" #include "libavutil/thread.h" -VLC ff_msmp4_mb_i_vlc; -VLC ff_msmp4_dc_luma_vlc[2]; -VLC ff_msmp4_dc_chroma_vlc[2]; +VLCElem ff_msmp4_mb_i_vlc[536]; +const VLCElem *ff_msmp4_dc_vlc[2][2]; static av_cold void msmp4_vc1_vlcs_init(void) { - VLC_INIT_STATIC(&ff_msmp4_dc_luma_vlc[0], MSMP4_DC_VLC_BITS, 120, - &ff_table0_dc_lum[0][1], 8, 4, - &ff_table0_dc_lum[0][0], 8, 4, 1158); - VLC_INIT_STATIC(&ff_msmp4_dc_chroma_vlc[0], MSMP4_DC_VLC_BITS, 120, - &ff_table0_dc_chroma[0][1], 8, 4, - &ff_table0_dc_chroma[0][0], 8, 4, 1118); - VLC_INIT_STATIC(&ff_msmp4_dc_luma_vlc[1], MSMP4_DC_VLC_BITS, 120, - &ff_table1_dc_lum[0][1], 8, 4, - &ff_table1_dc_lum[0][0], 8, 4, 1476); - VLC_INIT_STATIC(&ff_msmp4_dc_chroma_vlc[1], MSMP4_DC_VLC_BITS, 120, - &ff_table1_dc_chroma[0][1], 8, 4, - &ff_table1_dc_chroma[0][0], 8, 4, 1216); + static VLCElem vlc_buf[1158 + 1118 + 1476 + 1216]; + VLCInitState state = VLC_INIT_STATE(vlc_buf); - VLC_INIT_STATIC(&ff_msmp4_mb_i_vlc, MSMP4_MB_INTRA_VLC_BITS, 64, - &ff_msmp4_mb_i_table[0][1], 4, 2, - &ff_msmp4_mb_i_table[0][0], 4, 2, 536); + for (int i = 0; i < 2; i++) { + for (int j = 0; j < 2; j++) { + ff_msmp4_dc_vlc[i][j] = + ff_vlc_init_tables(&state, MSMP4_DC_VLC_BITS, 120, + &ff_msmp4_dc_tables[i][j][0][1], 8, 4, + &ff_msmp4_dc_tables[i][j][0][0], 8, 4, 0); + } + } + VLC_INIT_STATIC_TABLE(ff_msmp4_mb_i_vlc, MSMP4_MB_INTRA_VLC_BITS, 64, + &ff_msmp4_mb_i_table[0][1], 4, 2, + &ff_msmp4_mb_i_table[0][0], 4, 2, 0); } av_cold void ff_msmp4_vc1_vlcs_init_once(void) @@ -82,9 +79,11 @@ const uint16_t ff_msmp4_mb_i_table[64][2] = { { 0xd, 8 }, { 0x713, 13 }, { 0x1da, 10 }, { 0x169, 10 }, }; -/* dc table 0 */ -const uint32_t ff_table0_dc_lum[120][2] = { +const uint32_t ff_msmp4_dc_tables[2][2][120][2] = { +{ + /* dc table 0 */ + { { 0x1, 1 }, { 0x1, 2 }, { 0x1, 4 }, { 0x1, 5 }, { 0x5, 5 }, { 0x7, 5 }, { 0x8, 6 }, { 0xc, 6 }, { 0x0, 7 }, { 0x2, 7 }, { 0x12, 7 }, { 0x1a, 7 }, @@ -115,9 +114,8 @@ const uint32_t ff_table0_dc_lum[120][2] = { { 0x60784, 24 }, { 0x60785, 24 }, { 0x60786, 24 }, { 0x60787, 24 }, { 0x60788, 24 }, { 0x60789, 24 }, { 0x6078a, 24 }, { 0x6078b, 24 }, { 0x6078c, 24 }, { 0x6078d, 24 }, { 0x6078e, 24 }, { 0x6078f, 24 }, -}; - -const uint32_t ff_table0_dc_chroma[120][2] = { + }, + { { 0x0, 2 }, { 0x1, 2 }, { 0x5, 3 }, { 0x9, 4 }, { 0xd, 4 }, { 0x11, 5 }, { 0x1d, 5 }, { 0x1f, 5 }, { 0x21, 6 }, { 0x31, 6 }, { 0x38, 6 }, { 0x33, 6 }, @@ -148,11 +146,11 @@ const uint32_t ff_table0_dc_chroma[120][2] = { { 0x608884, 23 }, { 0x608885, 23 }, { 0x608886, 23 }, { 0x608887, 23 }, { 0x608888, 23 }, { 0x608889, 23 }, { 0x60888a, 23 }, { 0x60888b, 23 }, { 0x60888c, 23 }, { 0x60888d, 23 }, { 0x60888e, 23 }, { 0x60888f, 23 }, -}; - -/* dc table 1 */ - -const uint32_t ff_table1_dc_lum[120][2] = { + } +}, +{ + /* dc table 1 */ + { { 0x2, 2 }, { 0x3, 2 }, { 0x3, 3 }, { 0x2, 4 }, { 0x5, 4 }, { 0x1, 5 }, { 0x3, 5 }, { 0x8, 5 }, { 0x0, 6 }, { 0x5, 6 }, { 0xd, 6 }, { 0xf, 6 }, @@ -183,9 +181,8 @@ const uint32_t ff_table1_dc_lum[120][2] = { { 0x1e695c, 26 }, { 0x1e695d, 26 }, { 0x1e695e, 26 }, { 0x1e695f, 26 }, { 0x1e6960, 26 }, { 0x1e6961, 26 }, { 0x1e6962, 26 }, { 0x1e6963, 26 }, { 0x1e6964, 26 }, { 0x1e6965, 26 }, { 0x1e6966, 26 }, { 0x1e6967, 26 }, -}; - -const uint32_t ff_table1_dc_chroma[120][2] = { + }, + { { 0x0, 2 }, { 0x1, 2 }, { 0x4, 3 }, { 0x7, 3 }, { 0xb, 4 }, { 0xd, 4 }, { 0x15, 5 }, { 0x28, 6 }, { 0x30, 6 }, { 0x32, 6 }, { 0x52, 7 }, { 0x62, 7 }, @@ -216,6 +213,8 @@ const uint32_t ff_table1_dc_chroma[120][2] = { { 0x18f6484, 25 }, { 0x18f6485, 25 }, { 0x18f6486, 25 }, { 0x18f6487, 25 }, { 0x18f6488, 25 }, { 0x18f6489, 25 }, { 0x18f648a, 25 }, { 0x18f648b, 25 }, { 0x18f648c, 25 }, { 0x18f648d, 25 }, { 0x18f648e, 25 }, { 0x18f648f, 25 }, + } +} }; const uint8_t ff_wmv1_scantable[WMV1_SCANTABLE_COUNT][64] = { diff --git a/libavcodec/msmpeg4_vc1_data.h b/libavcodec/msmpeg4_vc1_data.h index d12fcb032f..a92193a8f5 100644 --- a/libavcodec/msmpeg4_vc1_data.h +++ b/libavcodec/msmpeg4_vc1_data.h @@ -34,10 +34,9 @@ FF_VISIBILITY_PUSH_HIDDEN void ff_msmp4_vc1_vlcs_init_once(void); #define MSMP4_MB_INTRA_VLC_BITS 9 -extern VLC ff_msmp4_mb_i_vlc; +extern VLCElem ff_msmp4_mb_i_vlc[]; #define MSMP4_DC_VLC_BITS 9 -extern VLC ff_msmp4_dc_luma_vlc[2]; -extern VLC ff_msmp4_dc_chroma_vlc[2]; +extern const VLCElem *ff_msmp4_dc_vlc[2 /* dc_table_index */][2 /* 0: luma, 1: chroma */]; /* intra picture macroblock coded block pattern */ extern const uint16_t ff_msmp4_mb_i_table[64][2]; @@ -46,10 +45,7 @@ extern const uint16_t ff_msmp4_mb_i_table[64][2]; extern const uint8_t ff_wmv1_scantable[WMV1_SCANTABLE_COUNT][64]; -extern const uint32_t ff_table0_dc_lum[120][2]; -extern const uint32_t ff_table1_dc_lum[120][2]; -extern const uint32_t ff_table0_dc_chroma[120][2]; -extern const uint32_t ff_table1_dc_chroma[120][2]; +extern const uint32_t ff_msmp4_dc_tables[2 /* dc_table_index */][2 /* 0: luma, 1: chroma */][120][2]; FF_VISIBILITY_POP_HIDDEN #endif /* AVCODEC_MSMPEG4_VC1_DATA_H */ diff --git a/libavcodec/msmpeg4dec.c b/libavcodec/msmpeg4dec.c index e61045c2f9..716fc13529 100644 --- a/libavcodec/msmpeg4dec.c +++ b/libavcodec/msmpeg4dec.c @@ -237,7 +237,7 @@ static int msmpeg4v34_decode_mb(MpegEncContext *s, int16_t block[6][64]) cbp = code & 0x3f; } else { s->mb_intra = 1; - code = get_vlc2(&s->gb, ff_msmp4_mb_i_vlc.table, MSMP4_MB_INTRA_VLC_BITS, 2); + code = get_vlc2(&s->gb, ff_msmp4_mb_i_vlc, MSMP4_MB_INTRA_VLC_BITS, 2); /* predict coded block pattern */ cbp = 0; for(i=0;i<6;i++) { @@ -582,14 +582,9 @@ static int msmpeg4_decode_dc(MpegEncContext * s, int n, int *dir_ptr) return -1; } level-=256; - }else{ //FIXME optimize use unified tables & index - if (n < 4) { - level = get_vlc2(&s->gb, ff_msmp4_dc_luma_vlc[s->dc_table_index].table, - MSMP4_DC_VLC_BITS, 3); - } else { - level = get_vlc2(&s->gb, ff_msmp4_dc_chroma_vlc[s->dc_table_index].table, - MSMP4_DC_VLC_BITS, 3); - } + } else { + level = get_vlc2(&s->gb, ff_msmp4_dc_vlc[s->dc_table_index][n >= 4], + MSMP4_DC_VLC_BITS, 3); if (level == DC_MAX) { level = get_bits(&s->gb, 8); diff --git a/libavcodec/msmpeg4enc.c b/libavcodec/msmpeg4enc.c index a8ddb8d8e1..119ea8f15e 100644 --- a/libavcodec/msmpeg4enc.c +++ b/libavcodec/msmpeg4enc.c @@ -544,19 +544,8 @@ static void msmpeg4_encode_dc(MpegEncContext * s, int level, int n, int *dir_ptr if (code > DC_MAX) code = DC_MAX; - if (s->dc_table_index == 0) { - if (n < 4) { - put_bits(&s->pb, ff_table0_dc_lum[code][1], ff_table0_dc_lum[code][0]); - } else { - put_bits(&s->pb, ff_table0_dc_chroma[code][1], ff_table0_dc_chroma[code][0]); - } - } else { - if (n < 4) { - put_bits(&s->pb, ff_table1_dc_lum[code][1], ff_table1_dc_lum[code][0]); - } else { - put_bits(&s->pb, ff_table1_dc_chroma[code][1], ff_table1_dc_chroma[code][0]); - } - } + put_bits(&s->pb, ff_msmp4_dc_tables[s->dc_table_index][n >= 4][code][1], + ff_msmp4_dc_tables[s->dc_table_index][n >= 4][code][0]); if (code == DC_MAX) put_bits(&s->pb, 8, level); diff --git a/libavcodec/vc1_block.c b/libavcodec/vc1_block.c index 1baa6a9bf6..751ea57617 100644 --- a/libavcodec/vc1_block.c +++ b/libavcodec/vc1_block.c @@ -592,13 +592,8 @@ static int vc1_decode_i_block(VC1Context *v, int16_t block[64], int n, int dcdiff, scale; /* Get DC differential */ - if (n < 4) { - dcdiff = get_vlc2(&s->gb, ff_msmp4_dc_luma_vlc[s->dc_table_index].table, - MSMP4_DC_VLC_BITS, 3); - } else { - dcdiff = get_vlc2(&s->gb, ff_msmp4_dc_chroma_vlc[s->dc_table_index].table, - MSMP4_DC_VLC_BITS, 3); - } + dcdiff = get_vlc2(&s->gb, ff_msmp4_dc_vlc[s->dc_table_index][n >= 4], + MSMP4_DC_VLC_BITS, 3); if (dcdiff) { const int m = (v->pq == 1 || v->pq == 2) ? 3 - v->pq : 0; if (dcdiff == 119 /* ESC index value */) { @@ -738,13 +733,8 @@ static int vc1_decode_i_block_adv(VC1Context *v, int16_t block[64], int n, int quant = FFABS(mquant); /* Get DC differential */ - if (n < 4) { - dcdiff = get_vlc2(&s->gb, ff_msmp4_dc_luma_vlc[s->dc_table_index].table, - MSMP4_DC_VLC_BITS, 3); - } else { - dcdiff = get_vlc2(&s->gb, ff_msmp4_dc_chroma_vlc[s->dc_table_index].table, - MSMP4_DC_VLC_BITS, 3); - } + dcdiff = get_vlc2(&s->gb, ff_msmp4_dc_vlc[s->dc_table_index][n >= 4], + MSMP4_DC_VLC_BITS, 3); if (dcdiff) { const int m = (quant == 1 || quant == 2) ? 3 - quant : 0; if (dcdiff == 119 /* ESC index value */) { @@ -940,13 +930,8 @@ static int vc1_decode_intra_block(VC1Context *v, int16_t block[64], int n, s->c_dc_scale = s->c_dc_scale_table[quant]; /* Get DC differential */ - if (n < 4) { - dcdiff = get_vlc2(&s->gb, ff_msmp4_dc_luma_vlc[s->dc_table_index].table, - MSMP4_DC_VLC_BITS, 3); - } else { - dcdiff = get_vlc2(&s->gb, ff_msmp4_dc_chroma_vlc[s->dc_table_index].table, - MSMP4_DC_VLC_BITS, 3); - } + dcdiff = get_vlc2(&s->gb, ff_msmp4_dc_vlc[s->dc_table_index][n >= 4], + MSMP4_DC_VLC_BITS, 3); if (dcdiff) { const int m = (quant == 1 || quant == 2) ? 3 - quant : 0; if (dcdiff == 119 /* ESC index value */) { @@ -2591,7 +2576,7 @@ static void vc1_decode_i_blocks(VC1Context *v) } // do actual MB decoding and displaying - cbp = get_vlc2(&v->s.gb, ff_msmp4_mb_i_vlc.table, + cbp = get_vlc2(&v->s.gb, ff_msmp4_mb_i_vlc, MSMP4_MB_INTRA_VLC_BITS, 2); v->s.ac_pred = get_bits1(&v->s.gb); @@ -2727,7 +2712,7 @@ static int vc1_decode_i_blocks_adv(VC1Context *v) return 0; } - cbp = get_vlc2(&v->s.gb, ff_msmp4_mb_i_vlc.table, + cbp = get_vlc2(&v->s.gb, ff_msmp4_mb_i_vlc, MSMP4_MB_INTRA_VLC_BITS, 2); if (v->acpred_is_raw) v->s.ac_pred = get_bits1(&v->s.gb); diff --git a/libavcodec/wmv2dec.c b/libavcodec/wmv2dec.c index 469b2c4b2b..d7c193455d 100644 --- a/libavcodec/wmv2dec.c +++ b/libavcodec/wmv2dec.c @@ -482,7 +482,7 @@ static int wmv2_decode_mb(MpegEncContext *s, int16_t block[6][64]) s->mb_intra = 1; if (get_bits_left(&s->gb) <= 0) return AVERROR_INVALIDDATA; - code = get_vlc2(&s->gb, ff_msmp4_mb_i_vlc.table, + code = get_vlc2(&s->gb, ff_msmp4_mb_i_vlc, MSMP4_MB_INTRA_VLC_BITS, 2); /* predict coded block pattern */ cbp = 0;