From patchwork Tue Sep 26 22:17:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 43968 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:2a18:b0:15d:8365:d4b8 with SMTP id e24csp2211852pzh; Tue, 26 Sep 2023 15:24:51 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFTbUuPl8DPi7oUD370ux8sis5pBmzxPLHrdljPmK2J4DzuHxSW9K5sNG8yeceq09ntUy2g X-Received: by 2002:adf:e285:0:b0:317:67bf:3387 with SMTP id v5-20020adfe285000000b0031767bf3387mr22412wri.60.1695767090931; Tue, 26 Sep 2023 15:24:50 -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 mh25-20020a170906eb9900b009ae53647815si11508961ejb.874.2023.09.26.15.24.50; Tue, 26 Sep 2023 15:24:50 -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=Cp6edNBz; 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 A82BA68CBD0; Wed, 27 Sep 2023 01:22:58 +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-dbaeur03olkn2072.outbound.protection.outlook.com [40.92.58.72]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 759AF68CB54 for ; Wed, 27 Sep 2023 01:22:57 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nFwwRmaorEdqKGMwcfS+he68aSPoJLrzf9C0HU8QwyFDAzxt1fa1K7oEbDYx4lss+AsnuXtQrTs8DniJb26XSDbLtxMwJSdlP/HAeKHh6YXFFdV2bPR9kX03wF+blJ/cl6CZawJpjkPSBAY8oQkw1xrCh42d00CGJ+iis9es4hX4btzVtTcJtsQNmOeCRzd8IjYPPDPpX/6rO/KnFWFzti1w7lCncprBhiVbebWXQ+L5I2yLjbGi4U2lactqdpHSLHH4fTIo8g5EwHfOpafXVYKasBNB004PjsUpe3E2AXcyX6QOOrTzIZW3BSFCaNYBEoZySk3ltQQXio952Spzlw== 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=IksMmLAitmcJukvr2fEwNTp9qXiqT0LKJ4nw6/mkMa4=; b=hrNBB3Xi33IU7JE9mkz2jmmqP7eJ/d3ZoILJ/UXGfSdZitKgLJ5Zkvbse1WbVeoFvLmctKWkt38Zyxm1qsH6ReaKR+YDRDb0IGihJrinA6YwP118iPF4EQt/wTLYJpgIcuW2G5aRXCmP7+1QxPaySEWALxYbwh87mSgwt6pVEEQvxUIFW5ZqUDHMcNochpwRbqCom0rM1CbNDv8cSv3nK6zNAGYdvDPW4EAAS0Dt1cykPm9RkZ39UH7CTNGuCz698CHjQTt/X7DZn9+frf/ffuCqAPWmsrXvwxqZQaPNbHuHTiXjRk16ePLRyof8QcEwyP4VIf59wKqkH1mv/l0F+w== 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=IksMmLAitmcJukvr2fEwNTp9qXiqT0LKJ4nw6/mkMa4=; b=Cp6edNBzG8SV94kjssmeCGh5VgSSyv8uig1NcS2hXWwfX/FyX6smR0zl7W3QwPMxOSs03HFiqgkotHJNQOAmzQA6lk6QWX9hUyQZkhE46XcO9sC9g/43L/SfejZCF4KwkielIQoRab5VhwSGCYFY4P9m4pA1JlIKmx8krsWrwR0aCbN5iJwVS+04HilIFiAew5y5QFWaM9x5tfdM4fQDGX+fXbEUHLLa9qfvFWArGF5jEOF/pU42fxScLS1e7iJLpJJKXI13WG4JG6WdaPFH5XFRY1YGm17przBWPwtpt5CyxdvOx3uPdGkSXMhiUEkBvWp8W0CnN/yXUB0exdaCuw== 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:55 +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:55 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Sep 2023 00:17:29 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [TBQcu4ma1leYt4KFtOnP5h1RX2Ziu7FV] 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-57-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: eb05af88-aeef-4320-20f8-08dbbedf21ab X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ZQuTZWQ1bQTuvfayLSh8SCJjyFIROszE2UQQ4ov7vRmczSN5X9H0Zwe9n72wRnJ8aUZDAEzPwONWggQqD1Bv5z4af3n+t/gRNG3RRLDDfnNv9cV08TCU8SVoYkX9uId+PzYkZpMUlKMIwTYbjW3HfiiLp+LGYNw3H+wqgHUosypnYrSPymyVb3JeOOW3mLsr5IXElk0BdcG+IXxbbtXGv8IXCjZ0GpKhcSBzPixl1zB8uht0A7W+PbSs1cTuIFvVIU0txkgZPo3JdI2LvumzyjcLf3+Jmlj6EQ/Ji/VgLfgOdP0KC+eRGQE06JnhJPi+rDDCPACY9QMYK2Rlch03pl+cn3Vw0zruBr/tg9SU9cyqYpfV+SNUB5OUg+tkoHMVdfPiQObHb/LoT8vlJXtDZyz5eqy9BDuWWHW03oP4zu6KvJls0TEgp4GJSNpg5ACyzYTi1GyMcToLreji7Qm7RamPrDlBcNj+b5CIdgDDTXWrwqQtrCL3J+81b5ZQPZcaCoQbdEalgfcgASk1dG2ex+ybU3BTl5KD+kTlRpI7PKnLC5KtgcRMp8LHSsqCI4WcP2NP5a04mng1VAvgHC8uABSB4pjr/VutwPcWUDi24zC0cQl0R8+56K4yF9qCfEh9 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: YNV2kibdKKZTiy+85DKG3Vqv3xlCX+bjnS6ljikYCwwZQwO/jYLGuQNTKVL1jYR+jLKQXBe3s+kRk+UcmYcLE6W9/2mCeqgb6Gv5s0VG3Hig4+c7SVpWKVxxurFu2V+eo+DSGqA2KgnmSZGOafIoUeYNs/4BpRwo/jI854aUL34HEKAJNkDSY0nAUouoNjr3J/X051rvoVrWcefGCFyizqgQwktcXC7BtMXpgnPhBjxHhBaeupEhh3VBhSPzq8TsRU3eezQebeAken6YMFqagfMOXm3mRzb7v/JlMoShdZSLKmuWczgMjfdRXbvg8ATCeelXn2SYf5eFOxgVa5tnFZGy7dU9gzwQCmJVqgQPd9Pc/whoYatEw1kUO5hq1DqvHlK7RIunh5mZyQnicLxtrRFQyuBl6Nsznp5BpgoSueIc6YksKtcmydLPiKM7AdRWNRAHQ6myNnClAN+ofeZJjXvEDrtoqTIrEiBacIOzKvcHyF+3oEvV/52SWBXhYgqNNGSZAtF/iGWGmSStr/R53rDCdg3+z1c0/hTg5BvsWpClTzdKV7WZs+mvrDQ7ypvS2Km9TC80tUkBtZOlJ9gGSL+yjqA9MPLfISXHhRtT9+0Oi+M65Ult/tNkx55TQdBwvpPQJZ8u+kdX8aSrvwhsVP2oCfLT6dOqImXKEdmnCNzK2tx9+5NqQEb+ZabVwoKYjdmNABb/T67xS7edVOrq7ZS3UM+0ll6616UFDqzy8UhR0jCUb9sdbx7JJ5Yy1if2LWigAgRBdAEi4WtgqWmbJ8MKjiEIZvzRXbu7sfU7wn0ZHccX5LVKPb8T4KTI1HxmbwRXzb8zhkaOfpWXqwwgcJfb0C9uzlUXpb35/io/Ht0Ah4GrQzG/DQ1QX6PE12Qwd+KWbLJNWTiSqkLczvNfTuKO3JCx3/H5RKXCKUpR5i/BVrnU5Lg9a91IL9yrCuiR3obsBOCoBH4zrS8AaknMUDyPg5e2iBfoAv7aZHF7DaUklwNU3RTFZHWaXO1YpAr4mEaxk2Nsal6rRP75qO/rHRb+zC4SqKB2IPBXyXHRWkW6xDD95UtU2KtNqCtFZkufM2RBuKCTQKL30RJ3V1nile/oJl648jdS6eUoLqKcjEJG8bRwtkx8QIPrk5XBfN5dAKhnEjWBYJcyqgRq0KucCkhUAuM8cApZFrNugF6hGiIEkQ9rZMCODaAgQwQdlc9k+mBDdKE0UFPXsR0JXaQcADmUV76Ulj5BTh9Ii0WZsXsRjPo5UYoxVw9LygRidEaV X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: eb05af88-aeef-4320-20f8-08dbbedf21ab 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:55.7516 (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 58/61] avcodec/mpeg12: Avoid unnecessary 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: Qkf7gkG8tP0q Everything besides VLC.table is basically write-only and even VLC.table can be removed by accessing the underlying tables directly. Signed-off-by: Andreas Rheinhardt --- libavcodec/mpeg12.c | 58 +++++++++++++++++++++--------------------- libavcodec/mpeg12dec.c | 12 ++++----- libavcodec/mpeg12dec.h | 4 +-- libavcodec/mpeg12vlc.h | 14 +++++----- 4 files changed, 44 insertions(+), 44 deletions(-) diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c index 70033ec725..8d88820c46 100644 --- a/libavcodec/mpeg12.c +++ b/libavcodec/mpeg12.c @@ -115,43 +115,43 @@ void ff_mpeg1_clean_buffers(MpegEncContext *s) /******************************************/ /* decoding */ -VLC ff_mv_vlc; +VLCElem ff_mv_vlc[266]; -VLC ff_dc_lum_vlc; -VLC ff_dc_chroma_vlc; +VLCElem ff_dc_lum_vlc[512]; +VLCElem ff_dc_chroma_vlc[514]; -VLC ff_mbincr_vlc; -VLC ff_mb_ptype_vlc; -VLC ff_mb_btype_vlc; -VLC ff_mb_pat_vlc; +VLCElem ff_mbincr_vlc[538]; +VLCElem ff_mb_ptype_vlc[64]; +VLCElem ff_mb_btype_vlc[64]; +VLCElem ff_mb_pat_vlc[512]; RL_VLC_ELEM ff_mpeg1_rl_vlc[680]; RL_VLC_ELEM ff_mpeg2_rl_vlc[674]; static av_cold void mpeg12_init_vlcs(void) { - VLC_INIT_STATIC(&ff_dc_lum_vlc, DC_VLC_BITS, 12, - ff_mpeg12_vlc_dc_lum_bits, 1, 1, - ff_mpeg12_vlc_dc_lum_code, 2, 2, 512); - VLC_INIT_STATIC(&ff_dc_chroma_vlc, DC_VLC_BITS, 12, - ff_mpeg12_vlc_dc_chroma_bits, 1, 1, - ff_mpeg12_vlc_dc_chroma_code, 2, 2, 514); - VLC_INIT_STATIC(&ff_mv_vlc, MV_VLC_BITS, 17, - &ff_mpeg12_mbMotionVectorTable[0][1], 2, 1, - &ff_mpeg12_mbMotionVectorTable[0][0], 2, 1, 266); - VLC_INIT_STATIC(&ff_mbincr_vlc, MBINCR_VLC_BITS, 36, - &ff_mpeg12_mbAddrIncrTable[0][1], 2, 1, - &ff_mpeg12_mbAddrIncrTable[0][0], 2, 1, 538); - VLC_INIT_STATIC(&ff_mb_pat_vlc, MB_PAT_VLC_BITS, 64, - &ff_mpeg12_mbPatTable[0][1], 2, 1, - &ff_mpeg12_mbPatTable[0][0], 2, 1, 512); - - VLC_INIT_STATIC(&ff_mb_ptype_vlc, MB_PTYPE_VLC_BITS, 7, - &table_mb_ptype[0][1], 2, 1, - &table_mb_ptype[0][0], 2, 1, 64); - VLC_INIT_STATIC(&ff_mb_btype_vlc, MB_BTYPE_VLC_BITS, 11, - &table_mb_btype[0][1], 2, 1, - &table_mb_btype[0][0], 2, 1, 64); + VLC_INIT_STATIC_TABLE(ff_dc_lum_vlc, DC_VLC_BITS, 12, + ff_mpeg12_vlc_dc_lum_bits, 1, 1, + ff_mpeg12_vlc_dc_lum_code, 2, 2, 0); + VLC_INIT_STATIC_TABLE(ff_dc_chroma_vlc, DC_VLC_BITS, 12, + ff_mpeg12_vlc_dc_chroma_bits, 1, 1, + ff_mpeg12_vlc_dc_chroma_code, 2, 2, 0); + VLC_INIT_STATIC_TABLE(ff_mv_vlc, MV_VLC_BITS, 17, + &ff_mpeg12_mbMotionVectorTable[0][1], 2, 1, + &ff_mpeg12_mbMotionVectorTable[0][0], 2, 1, 0); + VLC_INIT_STATIC_TABLE(ff_mbincr_vlc, MBINCR_VLC_BITS, 36, + &ff_mpeg12_mbAddrIncrTable[0][1], 2, 1, + &ff_mpeg12_mbAddrIncrTable[0][0], 2, 1, 0); + VLC_INIT_STATIC_TABLE(ff_mb_pat_vlc, MB_PAT_VLC_BITS, 64, + &ff_mpeg12_mbPatTable[0][1], 2, 1, + &ff_mpeg12_mbPatTable[0][0], 2, 1, 0); + + VLC_INIT_STATIC_TABLE(ff_mb_ptype_vlc, MB_PTYPE_VLC_BITS, 7, + &table_mb_ptype[0][1], 2, 1, + &table_mb_ptype[0][0], 2, 1, 0); + VLC_INIT_STATIC_TABLE(ff_mb_btype_vlc, MB_BTYPE_VLC_BITS, 11, + &table_mb_btype[0][1], 2, 1, + &table_mb_btype[0][0], 2, 1, 0); ff_init_2d_vlc_rl(ff_mpeg1_vlc_table, ff_mpeg1_rl_vlc, ff_mpeg12_run, ff_mpeg12_level, MPEG12_RL_NB_ELEMS, diff --git a/libavcodec/mpeg12dec.c b/libavcodec/mpeg12dec.c index 92ef6944fa..5f7ff4bb7a 100644 --- a/libavcodec/mpeg12dec.c +++ b/libavcodec/mpeg12dec.c @@ -117,7 +117,7 @@ static int mpeg_decode_motion(MpegEncContext *s, int fcode, int pred) { int code, sign, val, shift; - code = get_vlc2(&s->gb, ff_mv_vlc.table, MV_VLC_BITS, 2); + code = get_vlc2(&s->gb, ff_mv_vlc, MV_VLC_BITS, 2); if (code == 0) return pred; if (code < 0) @@ -710,7 +710,7 @@ static int mpeg_decode_mb(MpegEncContext *s, int16_t block[12][64]) } break; case AV_PICTURE_TYPE_P: - mb_type = get_vlc2(&s->gb, ff_mb_ptype_vlc.table, MB_PTYPE_VLC_BITS, 1); + mb_type = get_vlc2(&s->gb, ff_mb_ptype_vlc, MB_PTYPE_VLC_BITS, 1); if (mb_type < 0) { av_log(s->avctx, AV_LOG_ERROR, "Invalid mb type in P-frame at %d %d\n", s->mb_x, s->mb_y); @@ -719,7 +719,7 @@ static int mpeg_decode_mb(MpegEncContext *s, int16_t block[12][64]) mb_type = ptype2mb_type[mb_type]; break; case AV_PICTURE_TYPE_B: - mb_type = get_vlc2(&s->gb, ff_mb_btype_vlc.table, MB_BTYPE_VLC_BITS, 1); + mb_type = get_vlc2(&s->gb, ff_mb_btype_vlc, MB_BTYPE_VLC_BITS, 1); if (mb_type < 0) { av_log(s->avctx, AV_LOG_ERROR, "Invalid mb type in B-frame at %d %d\n", s->mb_x, s->mb_y); @@ -981,7 +981,7 @@ static int mpeg_decode_mb(MpegEncContext *s, int16_t block[12][64]) if (HAS_CBP(mb_type)) { s->bdsp.clear_blocks(s->block[0]); - cbp = get_vlc2(&s->gb, ff_mb_pat_vlc.table, MB_PAT_VLC_BITS, 1); + cbp = get_vlc2(&s->gb, ff_mb_pat_vlc, MB_PAT_VLC_BITS, 1); if (mb_block_count > 6) { cbp *= 1 << mb_block_count - 6; cbp |= get_bits(&s->gb, mb_block_count - 6); @@ -1723,7 +1723,7 @@ static int mpeg_decode_slice(MpegEncContext *s, int mb_y, skip_bits1(&s->gb); } else { while (get_bits_left(&s->gb) > 0) { - int code = get_vlc2(&s->gb, ff_mbincr_vlc.table, + int code = get_vlc2(&s->gb, ff_mbincr_vlc, MBINCR_VLC_BITS, 2); if (code < 0) { av_log(s->avctx, AV_LOG_ERROR, "first mb_incr damaged\n"); @@ -1892,7 +1892,7 @@ static int mpeg_decode_slice(MpegEncContext *s, int mb_y, /* read increment again */ s->mb_skip_run = 0; for (;;) { - int code = get_vlc2(&s->gb, ff_mbincr_vlc.table, + int code = get_vlc2(&s->gb, ff_mbincr_vlc, MBINCR_VLC_BITS, 2); if (code < 0) { av_log(s->avctx, AV_LOG_ERROR, "mb incr damaged\n"); diff --git a/libavcodec/mpeg12dec.h b/libavcodec/mpeg12dec.h index 4c015d3096..4641179149 100644 --- a/libavcodec/mpeg12dec.h +++ b/libavcodec/mpeg12dec.h @@ -30,9 +30,9 @@ static inline int decode_dc(GetBitContext *gb, int component) int code, diff; if (component == 0) { - code = get_vlc2(gb, ff_dc_lum_vlc.table, DC_VLC_BITS, 2); + code = get_vlc2(gb, ff_dc_lum_vlc, DC_VLC_BITS, 2); } else { - code = get_vlc2(gb, ff_dc_chroma_vlc.table, DC_VLC_BITS, 2); + code = get_vlc2(gb, ff_dc_chroma_vlc, DC_VLC_BITS, 2); } if (code == 0) { diff = 0; diff --git a/libavcodec/mpeg12vlc.h b/libavcodec/mpeg12vlc.h index 3ed35968f6..53f53947c3 100644 --- a/libavcodec/mpeg12vlc.h +++ b/libavcodec/mpeg12vlc.h @@ -39,13 +39,13 @@ #define MB_PTYPE_VLC_BITS 6 #define MB_BTYPE_VLC_BITS 6 -extern VLC ff_dc_lum_vlc; -extern VLC ff_dc_chroma_vlc; -extern VLC ff_mbincr_vlc; -extern VLC ff_mb_ptype_vlc; -extern VLC ff_mb_btype_vlc; -extern VLC ff_mb_pat_vlc; -extern VLC ff_mv_vlc; +extern VLCElem ff_dc_lum_vlc[]; +extern VLCElem ff_dc_chroma_vlc[]; +extern VLCElem ff_mbincr_vlc[]; +extern VLCElem ff_mb_ptype_vlc[]; +extern VLCElem ff_mb_btype_vlc[]; +extern VLCElem ff_mb_pat_vlc[]; +extern VLCElem ff_mv_vlc[]; void ff_mpeg12_init_vlcs(void);