From patchwork Tue Sep 26 22:17:10 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 43951 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:2a18:b0:15d:8365:d4b8 with SMTP id e24csp2210658pzh; Tue, 26 Sep 2023 15:22:05 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFPQoVBHqdCI+YMOjRwEkCtgLY79863aKgzVIJqMxlVrFJOZuP9oB4CLUuOmny46/24TLCN X-Received: by 2002:a17:906:30c8:b0:9aa:1c70:1654 with SMTP id b8-20020a17090630c800b009aa1c701654mr48280ejb.54.1695766925472; Tue, 26 Sep 2023 15:22:05 -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 e7-20020a170906248700b009ae227bb7e6si10900461ejb.126.2023.09.26.15.22.04; Tue, 26 Sep 2023 15:22:05 -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=c2RZ9WPb; 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 C56CB68CB4D; Wed, 27 Sep 2023 01:20:16 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2090.outbound.protection.outlook.com [40.92.89.90]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DBA0D68CB46 for ; Wed, 27 Sep 2023 01:20:14 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QpHfRz3rRG28kg7cFoFydZ4OC31GtSpsfeqbOTpmg+6z3iaoW7xlPraPgepNYfKki7Q5z3WJC1XAZbC0OcvGqeHAAne5HpRy0cNoNYc5c8iNetIoty/BS1mulrat0QyyVq4rlf5RQgb+tRug2BUz5Q5RxfXwxrYR74M98ikgXOrgS0+evFVMVdG8UeHoyyUrxH4isfHp5Zqgo1Uh73GE/P08ifUhOkDdICfQxKbV/QEmvbGSpioU2FibdVXoTQFuYi063AELJR9GsKN1lIQdK2+v86nZ3z4ZuOg1D7vSn89rNfMSvTGFBl5SdBHj53zKZaaQc1iE6xZWexGcrY5akA== 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=lcu0fn7YP+qFMLoOdrnMuXonWkGnzcr1WNGuWPQI+VI=; b=fMnANz9Qqs/f8T7SvC+Lv7O7aXtv8XkD2HjeyFy9Qv5MzcfE8rP/n2bNGjo2FxvyCrB2c1aKO1rtdVaa2CDtkrgaRwUGLjb/NHsqscY+qQUIBne71cznAiHqgKeSiZz5eEwMogZuMfCJGixOlSh1VF3qhD5w/csptJal7HYUl62cYy/hhDowWN6mNJgRf6A2xUa1fLAvNaSxrVhF6JOXAaDjkJHcBDs0C+FUE8d3NgLAg9XzehBsHvIUJpTIiX7TCW8+PVlHwHjPDNYOtEZ0tJ3MykXJN+Cii91H2Ng29/5fzXFQL1YMyFRpYU1QbxFH2C5Emg9SBRf0Ftjzs1IROg== 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=lcu0fn7YP+qFMLoOdrnMuXonWkGnzcr1WNGuWPQI+VI=; b=c2RZ9WPbdEsGO0dtVFDYxecJ12c7qtbZUJv27scl8O67FhZdVulYFM0Dakw1PxOQ/f8a8vjff1mxJAH7pKImbt3KqDb/YPlX5uYNrzsk3MSUkIug8uBamwlErTRifiF++b9gPpZiSKhhVo2pjttFlgPH6nVcTcaRyvvQ2wgvtwDfMJ+ZnWMXtWQ6YKYVPRBV9kA/OmcV9Mzp8jU+6w4r3s/IHQm7EX0QnEFqgnUqHPQfLz1cOvYtyychjXDlPqPDkvgVhvjkrKmNbVoDxRjPutgoEzZQHwzHDlX9seMYamIvNU2MPFFV0eETn7My3W8wx3ElEC2bBCcQ5kbDUp7NPg== 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:13 +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:13 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Sep 2023 00:17:10 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [/TrfWTD4wJ1JE5Sjhq8Lw/xNY9R2D0nm] 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-38-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: 28f3eb99-d0ba-40d8-a1e3-08dbbedec0ca X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: h8SuWf21W835dHWjcUbvzKaumHW69HSOPB/sIf2k+wlq+D1Ncx5AkBziJCLc1azVoZyGl4jzmBMa/Me7BM9WQT0yNfDD31U2kRGQ+iECGKbGePciC7aJMJ/p7TPQEjxNxZ7+zTYqgudi9ez9QJqxAK6ybUn+vCQcfIo7LUYSGTMuYX9Iib2kM7hTRFTxyyOYEhXgHgmENxH7hg4h91NDUiMBcHRVpxZammxxbTjB8bHq6nr2F1EMYc3Tje1rpiUALb7D4GF75FxnllZ5ycw5RjxTNZFa3K62TRUc5DrgE8xgt6MLTQCiEA3UJabGiMLb1Y/PL2szLMDGGT/LmsuIdG/OLnvA/Kqr+fqH7NXtAtphKzi1cxll6vAMHgq7xI96+aZ/maPhUHr2agLqzY9eWnunsqXZh3G+LImE7p9sgTULjk3/xVRxzux0bNdn+G5o8yGZExChbRBf9o84H15K/MedVAyve0VXDBFk6BUapGRTx0aPlyRWfK0vYAs2vrUnrXTiQf2bjBq7AunNWdbqdJAGhbsz9ukz3OUCEtv9Akq89zppT9x57suzy+alHplTVlSxSv9DNUVebpTu5VW7ByU8gYR1v7lIdudt92T+eP2j268uqqxLxsH8oc0gPlB6 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: at94w9lnQONab8mftJ2XZcG4kwz/4ROPB8q/rEIRjrG17bJsWsQO7FkC8r1GWENK5L1EdIe+Kcx0Q23cluTMV4PQ0N6ew9n60y/azJDyd9SO79/24DjG0ymsEx4Y5KNRqX1Hh4vot0WcLZUxwmod93qq5csvNObYjUqfVeQgUvo1i6SudcxpxZ4FDvj826yL2hrZRPafdyWxkl0jVntCm2P86qIA+Gaf9c8IhHTzQIB0cFGzTrccRbQoROQgT2LaI3fH8K3micSgIs49y4f6AKqjFv88O3ls3vhggHltGLAh9vQtMTMah8FePWF20wGyqbCNPXsfRE9Rfxb3GHdq40LruXkX7RBOdT/fzal7xxW+4beimb1s3mJV/lFgg2K5G/sJO6JuUvpvSJ2TshES1jqiUFhSsSPmJkjy8vMhc21sKGplBgLi8KFm2VdIU2HhmLsIJttGQ3vnCzWyIncL74kfoL+Q/QIi3YA3JTOq0GgZRS32L6SAgbjR7N1/2UuBeoZzPnDdt1kX34twPaUWrWBsCxEajdaQ3z33TzEwQVj1R1ab3kKlXuV3/6C39GmBge/hYnfZr7haKYOKeNgEUr8CkJAKue/a8N48GP8mkCgHjsaRvkt2fD1oa50C50UqIrUYOKb2ydGHiafrKHuf44glQ1+9d60i4wfAivrlfdU9A+rYYIVLKrNmETkai7ekJsPAyhQ5cGvmxhQDcXMxjxZZCC4GMUpEB9tTrms9rqLLOaKsCsGEqWPxakBM/emDnTikbx7wSmLkXLSO4ej6V3h54CjpP6cPmwhY9doCvirrLS/vdu4wLK1Z3guxdioZBp89MdrKwF0OKmu1TDVWkTQvqN9rdB1EjqMT1VbHynE03g9c5vkgj0HO4MzdgFMuhLATiJkweUB3MjxWWgI0bHuxeXI2X3LYwfMpLHqbtl+0j7leJphGwZHDZzQueVDwS/Ek2eaQVNgrpvIWnnGGsPdQXtmMGWNxc4DYRhFzoKd677KLbb48NYsQoUtIxj6DF2tSDtTYm9bzDUH0BTA12ZY7rAgazcAaVR1pKTvdh5m0ca8hS6zFC5+ijz7fzK+hHmGZpBUOP/I1XeVKhmYgWHuM1mHDnDc4Nc3g9kSei7N4MGP2YUDpbcj0l14CI1WaM1rsTH+D4rbcaQmfTDHyAMFAQP2McQW9e69Qu4JK53Zkv7khdB3nqr5gRcB8Ao9gf9yDL1KKczLqb08CnpEjTJohOamZg2wQSztxx7lRJ9t5h8u8yRBt4FQNyvQNUr8l X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 28f3eb99-d0ba-40d8-a1e3-08dbbedec0ca 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:13.2151 (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 39/61] avcodec/msmpeg4dec: 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: 1LoMkyTOeLHK For all 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. And in some cases one can even avoid this. Signed-off-by: Andreas Rheinhardt --- libavcodec/msmpeg4data.h | 2 +- libavcodec/msmpeg4dec.c | 95 +++++++++++++++++++++------------------- libavcodec/msmpeg4dec.h | 4 +- libavcodec/wmv2dec.c | 4 +- 4 files changed, 54 insertions(+), 51 deletions(-) diff --git a/libavcodec/msmpeg4data.h b/libavcodec/msmpeg4data.h index 26ee960f82..aa4ca86a05 100644 --- a/libavcodec/msmpeg4data.h +++ b/libavcodec/msmpeg4data.h @@ -44,7 +44,7 @@ typedef struct MVTable { const uint8_t *table_mvx; const uint8_t *table_mvy; uint16_t *table_mv_index; /* encoding: convert mv to index in table_mv */ - VLC vlc; /* decoding: vlc */ + const VLCElem *vlc; /* decoding: vlc */ } MVTable; FF_VISIBILITY_PUSH_HIDDEN diff --git a/libavcodec/msmpeg4dec.c b/libavcodec/msmpeg4dec.c index 716fc13529..5b10d8f225 100644 --- a/libavcodec/msmpeg4dec.c +++ b/libavcodec/msmpeg4dec.c @@ -63,12 +63,12 @@ static inline int msmpeg4v1_pred_dc(MpegEncContext * s, int n, /****************************************/ /* decoding stuff */ -VLC ff_mb_non_intra_vlc[4]; -static VLC v2_dc_lum_vlc; -static VLC v2_dc_chroma_vlc; -static VLC v2_intra_cbpc_vlc; -static VLC v2_mb_type_vlc; -VLC ff_inter_intra_vlc; +const VLCElem *ff_mb_non_intra_vlc[4]; +static VLCElem v2_dc_lum_vlc[1472]; +static VLCElem v2_dc_chroma_vlc[1506]; +static VLCElem v2_intra_cbpc_vlc[8]; +static VLCElem v2_mb_type_vlc[128]; +VLCElem ff_inter_intra_vlc[8]; /* This is identical to H.263 except that its range is multiplied by 2. */ static int msmpeg4v2_decode_motion(MpegEncContext * s, int pred, int f_code) @@ -125,7 +125,7 @@ static int msmpeg4v12_decode_mb(MpegEncContext *s, int16_t block[6][64]) } if(s->msmpeg4_version==2) - code = get_vlc2(&s->gb, v2_mb_type_vlc.table, V2_MB_TYPE_VLC_BITS, 1); + code = get_vlc2(&s->gb, v2_mb_type_vlc, V2_MB_TYPE_VLC_BITS, 1); else code = get_vlc2(&s->gb, ff_h263_inter_MCBPC_vlc, INTER_MCBPC_VLC_BITS, 2); if(code<0 || code>7){ @@ -139,7 +139,7 @@ static int msmpeg4v12_decode_mb(MpegEncContext *s, int16_t block[6][64]) } else { s->mb_intra = 1; if(s->msmpeg4_version==2) - cbp= get_vlc2(&s->gb, v2_intra_cbpc_vlc.table, V2_INTRA_CBPC_VLC_BITS, 1); + cbp = get_vlc2(&s->gb, v2_intra_cbpc_vlc, V2_INTRA_CBPC_VLC_BITS, 1); else cbp = get_vlc2(&s->gb, ff_h263_intra_MCBPC_vlc, INTRA_MCBPC_VLC_BITS, 2); if(cbp<0 || cbp>3){ @@ -230,7 +230,7 @@ static int msmpeg4v34_decode_mb(MpegEncContext *s, int16_t block[6][64]) } } - code = get_vlc2(&s->gb, ff_mb_non_intra_vlc[DEFAULT_INTER_INDEX].table, MB_NON_INTRA_VLC_BITS, 3); + code = get_vlc2(&s->gb, ff_mb_non_intra_vlc[DEFAULT_INTER_INDEX], MB_NON_INTRA_VLC_BITS, 3); //s->mb_intra = (code & 0x40) ? 0 : 1; s->mb_intra = (~code & 0x40) >> 6; @@ -271,7 +271,7 @@ static int msmpeg4v34_decode_mb(MpegEncContext *s, int16_t block[6][64]) s->ac_pred = get_bits1(&s->gb); *mb_type_ptr = MB_TYPE_INTRA; if(s->inter_intra_pred){ - s->h263_aic_dir= get_vlc2(&s->gb, ff_inter_intra_vlc.table, INTER_INTRA_VLC_BITS, 1); + s->h263_aic_dir= get_vlc2(&s->gb, ff_inter_intra_vlc, INTER_INTRA_VLC_BITS, 1); ff_dlog(s, "%d%d %d %d/", s->ac_pred, s->h263_aic_dir, s->mb_x, s->mb_y); } @@ -296,6 +296,8 @@ static int msmpeg4v34_decode_mb(MpegEncContext *s, int16_t block[6][64]) /* init all vlc decoding tables */ static av_cold void msmpeg4_decode_init_static(void) { + static VLCElem vlc_buf[3714 + 2694 + 1636 + 2648 + 1532 + 2488]; + VLCInitState state = VLC_INIT_STATE(vlc_buf); MVTable *mv; INIT_FIRST_VLC_RL(ff_rl_table[0], 642); @@ -308,43 +310,44 @@ static av_cold void msmpeg4_decode_init_static(void) av_assert1(ff_h263_rl_inter.rl_vlc[0]); memcpy(ff_rl_table[5].rl_vlc, ff_h263_rl_inter.rl_vlc, sizeof(ff_rl_table[5].rl_vlc)); + VLC_INIT_STATIC_TABLE(v2_dc_lum_vlc, MSMP4_DC_VLC_BITS, 512, + &ff_v2_dc_lum_table[0][1], 8, 4, + &ff_v2_dc_lum_table[0][0], 8, 4, 0); + VLC_INIT_STATIC_TABLE(v2_dc_chroma_vlc, MSMP4_DC_VLC_BITS, 512, + &ff_v2_dc_chroma_table[0][1], 8, 4, + &ff_v2_dc_chroma_table[0][0], 8, 4, 0); + + VLC_INIT_STATIC_TABLE(v2_intra_cbpc_vlc, V2_INTRA_CBPC_VLC_BITS, 4, + &ff_v2_intra_cbpc[0][1], 2, 1, + &ff_v2_intra_cbpc[0][0], 2, 1, 0); + VLC_INIT_STATIC_TABLE(v2_mb_type_vlc, V2_MB_TYPE_VLC_BITS, 8, + &ff_v2_mb_type[0][1], 2, 1, + &ff_v2_mb_type[0][0], 2, 1, 0); + mv = &ff_mv_tables[0]; - VLC_INIT_STATIC(&mv->vlc, MV_VLC_BITS, MSMPEG4_MV_TABLES_NB_ELEMS + 1, - mv->table_mv_bits, 1, 1, - mv->table_mv_code, 2, 2, 3714); + mv->vlc = ff_vlc_init_tables_sparse(&state, MV_VLC_BITS, + MSMPEG4_MV_TABLES_NB_ELEMS + 1, + mv->table_mv_bits, 1, 1, + mv->table_mv_code, 2, 2, + NULL, 0, 0, 0); mv = &ff_mv_tables[1]; - VLC_INIT_STATIC(&mv->vlc, MV_VLC_BITS, MSMPEG4_MV_TABLES_NB_ELEMS + 1, - mv->table_mv_bits, 1, 1, - mv->table_mv_code, 2, 2, 2694); - - VLC_INIT_STATIC(&v2_dc_lum_vlc, MSMP4_DC_VLC_BITS, 512, - &ff_v2_dc_lum_table[0][1], 8, 4, - &ff_v2_dc_lum_table[0][0], 8, 4, 1472); - VLC_INIT_STATIC(&v2_dc_chroma_vlc, MSMP4_DC_VLC_BITS, 512, - &ff_v2_dc_chroma_table[0][1], 8, 4, - &ff_v2_dc_chroma_table[0][0], 8, 4, 1506); - - VLC_INIT_STATIC(&v2_intra_cbpc_vlc, V2_INTRA_CBPC_VLC_BITS, 4, - &ff_v2_intra_cbpc[0][1], 2, 1, - &ff_v2_intra_cbpc[0][0], 2, 1, 8); - VLC_INIT_STATIC(&v2_mb_type_vlc, V2_MB_TYPE_VLC_BITS, 8, - &ff_v2_mb_type[0][1], 2, 1, - &ff_v2_mb_type[0][0], 2, 1, 128); - - for (unsigned i = 0, offset = 0; i < 4; i++) { - static VLCElem vlc_buf[1636 + 2648 + 1532 + 2488]; - ff_mb_non_intra_vlc[i].table = &vlc_buf[offset]; - ff_mb_non_intra_vlc[i].table_allocated = FF_ARRAY_ELEMS(vlc_buf) - offset; - vlc_init(&ff_mb_non_intra_vlc[i], MB_NON_INTRA_VLC_BITS, 128, - &ff_wmv2_inter_table[i][0][1], 8, 4, - &ff_wmv2_inter_table[i][0][0], 8, 4, - VLC_INIT_STATIC_OVERLONG); - offset += ff_mb_non_intra_vlc[i].table_size; + mv->vlc = ff_vlc_init_tables_sparse(&state, MV_VLC_BITS, + MSMPEG4_MV_TABLES_NB_ELEMS + 1, + mv->table_mv_bits, 1, 1, + mv->table_mv_code, 2, 2, + NULL, 0, 0, 0); + + for (unsigned i = 0; i < 4; i++) { + ff_mb_non_intra_vlc[i] = + ff_vlc_init_tables_sparse(&state, MB_NON_INTRA_VLC_BITS, 128, + &ff_wmv2_inter_table[i][0][1], 8, 4, + &ff_wmv2_inter_table[i][0][0], 8, 4, + NULL, 0, 0, 0); } - VLC_INIT_STATIC(&ff_inter_intra_vlc, INTER_INTRA_VLC_BITS, 4, - &ff_table_inter_intra[0][1], 2, 1, - &ff_table_inter_intra[0][0], 2, 1, 8); + VLC_INIT_STATIC_TABLE(ff_inter_intra_vlc, INTER_INTRA_VLC_BITS, 4, + &ff_table_inter_intra[0][1], 2, 1, + &ff_table_inter_intra[0][0], 2, 1, 0); ff_msmp4_vc1_vlcs_init_once(); } @@ -572,9 +575,9 @@ static int msmpeg4_decode_dc(MpegEncContext * s, int n, int *dir_ptr) if(s->msmpeg4_version<=2){ if (n < 4) { - level = get_vlc2(&s->gb, v2_dc_lum_vlc.table, MSMP4_DC_VLC_BITS, 3); + level = get_vlc2(&s->gb, v2_dc_lum_vlc, MSMP4_DC_VLC_BITS, 3); } else { - level = get_vlc2(&s->gb, v2_dc_chroma_vlc.table, MSMP4_DC_VLC_BITS, 3); + level = get_vlc2(&s->gb, v2_dc_chroma_vlc, MSMP4_DC_VLC_BITS, 3); } if (level < 0) { av_log(s->avctx, AV_LOG_ERROR, "illegal dc vlc\n"); @@ -813,7 +816,7 @@ void ff_msmpeg4_decode_motion(MpegEncContext *s, int *mx_ptr, int *my_ptr) mv = &ff_mv_tables[s->mv_table_index]; - code = get_vlc2(&s->gb, mv->vlc.table, MV_VLC_BITS, 2); + code = get_vlc2(&s->gb, mv->vlc, MV_VLC_BITS, 2); if (code == MSMPEG4_MV_TABLES_NB_ELEMS) { mx = get_bits(&s->gb, 6); my = get_bits(&s->gb, 6); diff --git a/libavcodec/msmpeg4dec.h b/libavcodec/msmpeg4dec.h index ad41eea9d4..5daa7c6bc3 100644 --- a/libavcodec/msmpeg4dec.h +++ b/libavcodec/msmpeg4dec.h @@ -28,8 +28,8 @@ #define INTER_INTRA_VLC_BITS 3 #define MB_NON_INTRA_VLC_BITS 9 -extern VLC ff_mb_non_intra_vlc[4]; -extern VLC ff_inter_intra_vlc; +extern const VLCElem *ff_mb_non_intra_vlc[4]; +extern VLCElem ff_inter_intra_vlc[8]; int ff_msmpeg4_decode_init(AVCodecContext *avctx); int ff_msmpeg4_decode_picture_header(MpegEncContext *s); diff --git a/libavcodec/wmv2dec.c b/libavcodec/wmv2dec.c index d7c193455d..ed6140d29c 100644 --- a/libavcodec/wmv2dec.c +++ b/libavcodec/wmv2dec.c @@ -473,7 +473,7 @@ static int wmv2_decode_mb(MpegEncContext *s, int16_t block[6][64]) if (get_bits_left(&s->gb) <= 0) return AVERROR_INVALIDDATA; - code = get_vlc2(&s->gb, ff_mb_non_intra_vlc[w->cbp_table_index].table, + code = get_vlc2(&s->gb, ff_mb_non_intra_vlc[w->cbp_table_index], MB_NON_INTRA_VLC_BITS, 3); s->mb_intra = (~code & 0x40) >> 6; @@ -539,7 +539,7 @@ static int wmv2_decode_mb(MpegEncContext *s, int16_t block[6][64]) show_bits(&s->gb, 24)); s->ac_pred = get_bits1(&s->gb); if (s->inter_intra_pred) { - s->h263_aic_dir = get_vlc2(&s->gb, ff_inter_intra_vlc.table, + s->h263_aic_dir = get_vlc2(&s->gb, ff_inter_intra_vlc, INTER_INTRA_VLC_BITS, 1); ff_dlog(s->avctx, "%d%d %d %d/", s->ac_pred, s->h263_aic_dir, s->mb_x, s->mb_y);