From patchwork Tue Nov 10 10:48:18 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 23557 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 6AB5244A3F2 for ; Tue, 10 Nov 2020 13:08:44 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7125468BF8A; Tue, 10 Nov 2020 12:50:56 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7E00868BF32 for ; Tue, 10 Nov 2020 12:50:41 +0200 (EET) Received: by mail-wr1-f46.google.com with SMTP id b8so12149766wrn.0 for ; Tue, 10 Nov 2020 02:50:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references:reply-to :mime-version:content-transfer-encoding; bh=PL8+An9Qwb5cNv2P2ozkRJ384tS5VefCKYspD/mc6Xc=; b=j0I18OfD48w3WDlElE4fg23M2WN2NErxvbS8N+vS9xF8eOp5boMHNm58g1nmbBCz8+ ifNEEnRMZ9SUFRW1nCjFNc6z1cR7GZfdNrkizULGqYmkpwmwK+7Y92qL1+5SU+ZGq5cD 94KS3wymP1z7OaqZnJl7aFiN8fJve0Xelr+AQbEyiGMrMDOPs1XVnNttUfgckcWJJGra CQvhwOrpjFYAWCqfQzhnKHQxU7ykEe/ZZWENCxWuj4aunjmXlWJQMXOoLdxsvOaNaRWp i/NLilVYyybtRPcDf7pO31+ykGvr4p9MHM7VDE4yKfN6lVKHCuaa8FMuZvq20NdqKgeP Ltzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:reply-to:mime-version:content-transfer-encoding; bh=PL8+An9Qwb5cNv2P2ozkRJ384tS5VefCKYspD/mc6Xc=; b=mpTz7OSINgFoAzKVQLZEPywrgXaO/at3/G/nJwsa0qFDgIUDxLRi53XVRNlVT3I9BF 8AfCd2ZOKpVUOGG7SvwUVmRsRcoEcxkPZICN1eTAeuPQZvil9UzFUPK9uMoXzIkLAPox iLedHZIGVrDPVRbNVCKfSrONU43DpMmE1W04Bx6VNMPcKsVO3rywaxTEsq4/ucXN05n+ CWMxmFE0SwCfYSbGtWp+yceRYYe+HEpMc28i6oUPcWjS1QAz53Jys5ueO0hOlhbv2rGQ lzvii6ScPG91GlhBCVKKDcqcw9tVe4rx+QPe+iq1NRwkK1q4ldyA3gBfoMqTVnjx53lV XGWQ== X-Gm-Message-State: AOAM533dS5GWAg9CvSi2I0NwfUf/48WV/JSRvj1FJgDXCa+Cp4oOxbo1 SIuAzYz6wkwAJb4o2qrBgzdZhMsLsqE= X-Google-Smtp-Source: ABdhPJxXApuKGZmJs2J2KzB4A8wCWKdhm3ZROlddegyIFzrIS5WMMxGC7P7uFER0zzrxcWqDkTipFA== X-Received: by 2002:adf:f542:: with SMTP id j2mr6426475wrp.107.1605005439115; Tue, 10 Nov 2020 02:50:39 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc1aa4b.dynamic.kabel-deutschland.de. [188.193.170.75]) by smtp.gmail.com with ESMTPSA id l24sm2572543wmi.7.2020.11.10.02.50.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Nov 2020 02:50:38 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 10 Nov 2020 11:48:18 +0100 Message-Id: <20201110104851.321029-82-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20201110104851.321029-1-andreas.rheinhardt@gmail.com> References: <20201110104851.321029-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 081/114] avcodec/vc1: Use symbols table to decode AC coefficients X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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" The VC1 decoder currently follows the spec very closely when decoding AC coefficients: The spec uses tables with contiguous indexes. The last of each of these is an escape code; the other codes encode three other variables via tables: run, length and whether this is the last coefficient. This commit changes this: Given that both run and length fit into 6bits each, all three of these fit into a VLC symbol (without touching the sign bit which is needed because some of the VLCs used here aren't complete). This already makes the tables for the conversion from index to run etc. superfluous; furthermore while just at it, this commit also switches to ff_init_vlc_from_lengths(), thereby making the codes tables superfluous, too (and said code tables were interleaved with the length tables, so that the latter were using an uint32_t just as the former, wasting lots of space). Moreover, the number of codes for each table differed and the old approach padded the shorter ones to the length of the longer ones; this is no longer done either. All in all, this saves about 11KB of tables. Finally, the symbol and length tables have been added to vc1data.c; the interleaved codes and lengths tables which they replace was directly in vc1.c since 3c715383ea7012ac69507e6b9189c98675c77461 in order to make the VC1 parser compilable without decoder, but the data for the other VLCs which are also only used in the decoder is in vc1data.c, so moving it improves consistency. Signed-off-by: Andreas Rheinhardt --- libavcodec/vc1.c | 231 ++--------------------------------------- libavcodec/vc1_block.c | 28 ++--- libavcodec/vc1acdata.h | 174 ------------------------------- libavcodec/vc1data.c | 227 +++++++++++++++++++++++++++++++++++++++- libavcodec/vc1data.h | 5 + 5 files changed, 251 insertions(+), 414 deletions(-) diff --git a/libavcodec/vc1.c b/libavcodec/vc1.c index 2e39870057..599a77af31 100644 --- a/libavcodec/vc1.c +++ b/libavcodec/vc1.c @@ -1345,227 +1345,6 @@ int ff_vc1_parse_frame_header_adv(VC1Context *v, GetBitContext* gb) return 0; } -static const uint32_t vc1_ac_tables[AC_MODES][186][2] = { -{ -{ 0x0001, 2}, { 0x0005, 3}, { 0x000D, 4}, { 0x0012, 5}, { 0x000E, 6}, { 0x0015, 7}, -{ 0x0013, 8}, { 0x003F, 8}, { 0x004B, 9}, { 0x011F, 9}, { 0x00B8, 10}, { 0x03E3, 10}, -{ 0x0172, 11}, { 0x024D, 12}, { 0x03DA, 12}, { 0x02DD, 13}, { 0x1F55, 13}, { 0x05B9, 14}, -{ 0x3EAE, 14}, { 0x0000, 4}, { 0x0010, 5}, { 0x0008, 7}, { 0x0020, 8}, { 0x0029, 9}, -{ 0x01F4, 9}, { 0x0233, 10}, { 0x01E0, 11}, { 0x012A, 12}, { 0x03DD, 12}, { 0x050A, 13}, -{ 0x1F29, 13}, { 0x0A42, 14}, { 0x1272, 15}, { 0x1737, 15}, { 0x0003, 5}, { 0x0011, 7}, -{ 0x00C4, 8}, { 0x004B, 10}, { 0x00B4, 11}, { 0x07D4, 11}, { 0x0345, 12}, { 0x02D7, 13}, -{ 0x07BF, 13}, { 0x0938, 14}, { 0x0BBB, 14}, { 0x095E, 15}, { 0x0013, 5}, { 0x0078, 7}, -{ 0x0069, 9}, { 0x0232, 10}, { 0x0461, 11}, { 0x03EC, 12}, { 0x0520, 13}, { 0x1F2A, 13}, -{ 0x3E50, 14}, { 0x3E51, 14}, { 0x1486, 15}, { 0x000C, 6}, { 0x0024, 9}, { 0x0094, 11}, -{ 0x08C0, 12}, { 0x0F09, 14}, { 0x1EF0, 15}, { 0x003D, 6}, { 0x0053, 9}, { 0x01A0, 11}, -{ 0x02D6, 13}, { 0x0F08, 14}, { 0x0013, 7}, { 0x007C, 9}, { 0x07C1, 11}, { 0x04AC, 14}, -{ 0x001B, 7}, { 0x00A0, 10}, { 0x0344, 12}, { 0x0F79, 14}, { 0x0079, 7}, { 0x03E1, 10}, -{ 0x02D4, 13}, { 0x2306, 14}, { 0x0021, 8}, { 0x023C, 10}, { 0x0FAE, 12}, { 0x23DE, 14}, -{ 0x0035, 8}, { 0x0175, 11}, { 0x07B3, 13}, { 0x00C5, 8}, { 0x0174, 11}, { 0x0785, 13}, -{ 0x0048, 9}, { 0x01A3, 11}, { 0x049E, 13}, { 0x002C, 9}, { 0x00FA, 10}, { 0x07D6, 11}, -{ 0x0092, 10}, { 0x05CC, 13}, { 0x1EF1, 15}, { 0x00A3, 10}, { 0x03ED, 12}, { 0x093E, 14}, -{ 0x01E2, 11}, { 0x1273, 15}, { 0x07C4, 11}, { 0x1487, 15}, { 0x0291, 12}, { 0x0293, 12}, -{ 0x0F8A, 12}, { 0x0509, 13}, { 0x0508, 13}, { 0x078D, 13}, { 0x07BE, 13}, { 0x078C, 13}, -{ 0x04AE, 14}, { 0x0BBA, 14}, { 0x2307, 14}, { 0x0B9A, 14}, { 0x1736, 15}, { 0x000E, 4}, -{ 0x0045, 7}, { 0x01F3, 9}, { 0x047A, 11}, { 0x05DC, 13}, { 0x23DF, 14}, { 0x0019, 5}, -{ 0x0028, 9}, { 0x0176, 11}, { 0x049D, 13}, { 0x23DD, 14}, { 0x0030, 6}, { 0x00A2, 10}, -{ 0x02EF, 12}, { 0x05B8, 14}, { 0x003F, 6}, { 0x00A5, 10}, { 0x03DB, 12}, { 0x093F, 14}, -{ 0x0044, 7}, { 0x07CB, 11}, { 0x095F, 15}, { 0x0063, 7}, { 0x03C3, 12}, { 0x0015, 8}, -{ 0x08F6, 12}, { 0x0017, 8}, { 0x0498, 13}, { 0x002C, 8}, { 0x07B2, 13}, { 0x002F, 8}, -{ 0x1F54, 13}, { 0x008D, 8}, { 0x07BD, 13}, { 0x008E, 8}, { 0x1182, 13}, { 0x00FB, 8}, -{ 0x050B, 13}, { 0x002D, 8}, { 0x07C0, 11}, { 0x0079, 9}, { 0x1F5F, 13}, { 0x007A, 9}, -{ 0x1F56, 13}, { 0x0231, 10}, { 0x03E4, 10}, { 0x01A1, 11}, { 0x0143, 11}, { 0x01F7, 11}, -{ 0x016F, 12}, { 0x0292, 12}, { 0x02E7, 12}, { 0x016C, 12}, { 0x016D, 12}, { 0x03DC, 12}, -{ 0x0F8B, 12}, { 0x0499, 13}, { 0x03D8, 12}, { 0x078E, 13}, { 0x02D5, 13}, { 0x1F5E, 13}, -{ 0x1F2B, 13}, { 0x078F, 13}, { 0x04AD, 14}, { 0x3EAF, 14}, { 0x23DC, 14}, { 0x004A, 9} -}, -{ -{ 0x0000, 3}, { 0x0003, 4}, { 0x000B, 5}, { 0x0014, 6}, { 0x003F, 6}, { 0x005D, 7}, -{ 0x00A2, 8}, { 0x00AC, 9}, { 0x016E, 9}, { 0x020A, 10}, { 0x02E2, 10}, { 0x0432, 11}, -{ 0x05C9, 11}, { 0x0827, 12}, { 0x0B54, 12}, { 0x04E6, 13}, { 0x105F, 13}, { 0x172A, 13}, -{ 0x20B2, 14}, { 0x2D4E, 14}, { 0x39F0, 14}, { 0x4175, 15}, { 0x5A9E, 15}, { 0x0004, 4}, -{ 0x001E, 5}, { 0x0042, 7}, { 0x00B6, 8}, { 0x0173, 9}, { 0x0395, 10}, { 0x072E, 11}, -{ 0x0B94, 12}, { 0x16A4, 13}, { 0x20B3, 14}, { 0x2E45, 14}, { 0x0005, 5}, { 0x0040, 7}, -{ 0x0049, 9}, { 0x028F, 10}, { 0x05CB, 11}, { 0x048A, 13}, { 0x09DD, 14}, { 0x73E2, 15}, -{ 0x0018, 5}, { 0x0025, 8}, { 0x008A, 10}, { 0x051B, 11}, { 0x0E5F, 12}, { 0x09C9, 14}, -{ 0x139C, 15}, { 0x0029, 6}, { 0x004F, 9}, { 0x0412, 11}, { 0x048D, 13}, { 0x2E41, 14}, -{ 0x0038, 6}, { 0x010E, 9}, { 0x05A8, 11}, { 0x105C, 13}, { 0x39F2, 14}, { 0x0058, 7}, -{ 0x021F, 10}, { 0x0E7E, 12}, { 0x39FF, 14}, { 0x0023, 8}, { 0x02E3, 10}, { 0x04E5, 13}, -{ 0x2E40, 14}, { 0x00A1, 8}, { 0x05BE, 11}, { 0x09C8, 14}, { 0x0083, 8}, { 0x013A, 11}, -{ 0x1721, 13}, { 0x0044, 9}, { 0x0276, 12}, { 0x39F6, 14}, { 0x008B, 10}, { 0x04EF, 13}, -{ 0x5A9B, 15}, { 0x0208, 10}, { 0x1CFE, 13}, { 0x0399, 10}, { 0x1CB4, 13}, { 0x039E, 10}, -{ 0x39F3, 14}, { 0x05AB, 11}, { 0x73E3, 15}, { 0x0737, 11}, { 0x5A9F, 15}, { 0x082D, 12}, -{ 0x0E69, 12}, { 0x0E68, 12}, { 0x0433, 11}, { 0x0B7B, 12}, { 0x2DF8, 14}, { 0x2E56, 14}, -{ 0x2E57, 14}, { 0x39F7, 14}, { 0x51A5, 15}, { 0x0003, 3}, { 0x002A, 6}, { 0x00E4, 8}, -{ 0x028E, 10}, { 0x0735, 11}, { 0x1058, 13}, { 0x1CFA, 13}, { 0x2DF9, 14}, { 0x4174, 15}, -{ 0x0009, 4}, { 0x0054, 8}, { 0x0398, 10}, { 0x048B, 13}, { 0x139D, 15}, { 0x000D, 4}, -{ 0x00AD, 9}, { 0x0826, 12}, { 0x2D4C, 14}, { 0x0011, 5}, { 0x016B, 9}, { 0x0B7F, 12}, -{ 0x51A4, 15}, { 0x0019, 5}, { 0x021B, 10}, { 0x16FD, 13}, { 0x001D, 5}, { 0x0394, 10}, -{ 0x28D3, 14}, { 0x002B, 6}, { 0x05BC, 11}, { 0x5A9A, 15}, { 0x002F, 6}, { 0x0247, 12}, -{ 0x0010, 7}, { 0x0A35, 12}, { 0x003E, 6}, { 0x0B7A, 12}, { 0x0059, 7}, { 0x105E, 13}, -{ 0x0026, 8}, { 0x09CF, 14}, { 0x0055, 8}, { 0x1CB5, 13}, { 0x0057, 8}, { 0x0E5B, 12}, -{ 0x00A0, 8}, { 0x1468, 13}, { 0x0170, 9}, { 0x0090, 10}, { 0x01CE, 9}, { 0x021A, 10}, -{ 0x0218, 10}, { 0x0168, 9}, { 0x021E, 10}, { 0x0244, 12}, { 0x0736, 11}, { 0x0138, 11}, -{ 0x0519, 11}, { 0x0E5E, 12}, { 0x072C, 11}, { 0x0B55, 12}, { 0x09DC, 14}, { 0x20BB, 14}, -{ 0x048C, 13}, { 0x1723, 13}, { 0x2E44, 14}, { 0x16A5, 13}, { 0x0518, 11}, { 0x39FE, 14}, -{ 0x0169, 9} -}, -{ -{ 0x0001, 2}, { 0x0006, 3}, { 0x000F, 4}, { 0x0016, 5}, { 0x0020, 6}, { 0x0018, 7}, -{ 0x0008, 8}, { 0x009A, 8}, { 0x0056, 9}, { 0x013E, 9}, { 0x00F0, 10}, { 0x03A5, 10}, -{ 0x0077, 11}, { 0x01EF, 11}, { 0x009A, 12}, { 0x005D, 13}, { 0x0001, 4}, { 0x0011, 5}, -{ 0x0002, 7}, { 0x000B, 8}, { 0x0012, 9}, { 0x01D6, 9}, { 0x027E, 10}, { 0x0191, 11}, -{ 0x00EA, 12}, { 0x03DC, 12}, { 0x013B, 13}, { 0x0004, 5}, { 0x0014, 7}, { 0x009E, 8}, -{ 0x0009, 10}, { 0x01AC, 11}, { 0x01E2, 11}, { 0x03CA, 12}, { 0x005F, 13}, { 0x0017, 5}, -{ 0x004E, 7}, { 0x005E, 9}, { 0x00F3, 10}, { 0x01AD, 11}, { 0x00EC, 12}, { 0x05F0, 13}, -{ 0x000E, 6}, { 0x00E1, 8}, { 0x03A4, 10}, { 0x009C, 12}, { 0x013D, 13}, { 0x003B, 6}, -{ 0x001C, 9}, { 0x0014, 11}, { 0x09BE, 12}, { 0x0006, 7}, { 0x007A, 9}, { 0x0190, 11}, -{ 0x0137, 13}, { 0x001B, 7}, { 0x0008, 10}, { 0x075C, 11}, { 0x0071, 7}, { 0x00D7, 10}, -{ 0x09BF, 12}, { 0x0007, 8}, { 0x00AF, 10}, { 0x04CC, 11}, { 0x0034, 8}, { 0x0265, 10}, -{ 0x009F, 12}, { 0x00E0, 8}, { 0x0016, 11}, { 0x0327, 12}, { 0x0015, 9}, { 0x017D, 11}, -{ 0x0EBB, 12}, { 0x0014, 9}, { 0x00F6, 10}, { 0x01E4, 11}, { 0x00CB, 10}, { 0x099D, 12}, -{ 0x00CA, 10}, { 0x02FC, 12}, { 0x017F, 11}, { 0x04CD, 11}, { 0x02FD, 12}, { 0x04FE, 11}, -{ 0x013A, 13}, { 0x000A, 4}, { 0x0042, 7}, { 0x01D3, 9}, { 0x04DD, 11}, { 0x0012, 5}, -{ 0x00E8, 8}, { 0x004C, 11}, { 0x0136, 13}, { 0x0039, 6}, { 0x0264, 10}, { 0x0EBA, 12}, -{ 0x0000, 7}, { 0x00AE, 10}, { 0x099C, 12}, { 0x001F, 7}, { 0x04DE, 11}, { 0x0043, 7}, -{ 0x04DC, 11}, { 0x0003, 8}, { 0x03CB, 12}, { 0x0006, 8}, { 0x099E, 12}, { 0x002A, 8}, -{ 0x05F1, 13}, { 0x000F, 8}, { 0x09FE, 12}, { 0x0033, 8}, { 0x09FF, 12}, { 0x0098, 8}, -{ 0x099F, 12}, { 0x00EA, 8}, { 0x013C, 13}, { 0x002E, 8}, { 0x0192, 11}, { 0x0136, 9}, -{ 0x006A, 9}, { 0x0015, 11}, { 0x03AF, 10}, { 0x01E3, 11}, { 0x0074, 11}, { 0x00EB, 12}, -{ 0x02F9, 12}, { 0x005C, 13}, { 0x00ED, 12}, { 0x03DD, 12}, { 0x0326, 12}, { 0x005E, 13}, -{ 0x0016, 7} -}, -{ -{ 0x0004, 3}, { 0x0014, 5}, { 0x0017, 7}, { 0x007F, 8}, { 0x0154, 9}, { 0x01F2, 10}, -{ 0x00BF, 11}, { 0x0065, 12}, { 0x0AAA, 12}, { 0x0630, 13}, { 0x1597, 13}, { 0x03B7, 14}, -{ 0x2B22, 14}, { 0x0BE6, 15}, { 0x000B, 4}, { 0x0037, 7}, { 0x0062, 9}, { 0x0007, 11}, -{ 0x0166, 12}, { 0x00CE, 13}, { 0x1590, 13}, { 0x05F6, 14}, { 0x0BE7, 15}, { 0x0007, 5}, -{ 0x006D, 8}, { 0x0003, 11}, { 0x031F, 12}, { 0x05F2, 14}, { 0x0002, 6}, { 0x0061, 9}, -{ 0x0055, 12}, { 0x01DF, 14}, { 0x001A, 6}, { 0x001E, 10}, { 0x0AC9, 12}, { 0x2B23, 14}, -{ 0x001E, 6}, { 0x001F, 10}, { 0x0AC3, 12}, { 0x2B2B, 14}, { 0x0006, 7}, { 0x0004, 11}, -{ 0x02F8, 13}, { 0x0019, 7}, { 0x0006, 11}, { 0x063D, 13}, { 0x0057, 7}, { 0x0182, 11}, -{ 0x2AA2, 14}, { 0x0004, 8}, { 0x0180, 11}, { 0x059C, 14}, { 0x007D, 8}, { 0x0164, 12}, -{ 0x076D, 15}, { 0x0002, 9}, { 0x018D, 11}, { 0x1581, 13}, { 0x00AD, 8}, { 0x0060, 12}, -{ 0x0C67, 14}, { 0x001C, 9}, { 0x00EE, 13}, { 0x0003, 9}, { 0x02CF, 13}, { 0x00D9, 9}, -{ 0x1580, 13}, { 0x0002, 11}, { 0x0183, 11}, { 0x0057, 12}, { 0x0061, 12}, { 0x0031, 11}, -{ 0x0066, 12}, { 0x0631, 13}, { 0x0632, 13}, { 0x00AC, 13}, { 0x031D, 12}, { 0x0076, 12}, -{ 0x003A, 11}, { 0x0165, 12}, { 0x0C66, 14}, { 0x0003, 2}, { 0x0054, 7}, { 0x02AB, 10}, -{ 0x0016, 13}, { 0x05F7, 14}, { 0x0005, 4}, { 0x00F8, 9}, { 0x0AA9, 12}, { 0x005F, 15}, -{ 0x0004, 4}, { 0x001C, 10}, { 0x1550, 13}, { 0x0004, 5}, { 0x0077, 11}, { 0x076C, 15}, -{ 0x000E, 5}, { 0x000A, 12}, { 0x000C, 5}, { 0x0562, 11}, { 0x0004, 6}, { 0x031C, 12}, -{ 0x0006, 6}, { 0x00C8, 13}, { 0x000D, 6}, { 0x01DA, 13}, { 0x0007, 6}, { 0x00C9, 13}, -{ 0x0001, 7}, { 0x002E, 14}, { 0x0014, 7}, { 0x1596, 13}, { 0x000A, 7}, { 0x0AC2, 12}, -{ 0x0016, 7}, { 0x015B, 14}, { 0x0015, 7}, { 0x015A, 14}, { 0x000F, 8}, { 0x005E, 15}, -{ 0x007E, 8}, { 0x00AB, 8}, { 0x002D, 9}, { 0x00D8, 9}, { 0x000B, 9}, { 0x0014, 10}, -{ 0x02B3, 10}, { 0x01F3, 10}, { 0x003A, 10}, { 0x0000, 10}, { 0x0058, 10}, { 0x002E, 9}, -{ 0x005E, 10}, { 0x0563, 11}, { 0x00EC, 12}, { 0x0054, 12}, { 0x0AC1, 12}, { 0x1556, 13}, -{ 0x02FA, 13}, { 0x0181, 11}, { 0x1557, 13}, { 0x059D, 14}, { 0x2AA3, 14}, { 0x2B2A, 14}, -{ 0x01DE, 14}, { 0x063C, 13}, { 0x00CF, 13}, { 0x1594, 13}, { 0x000D, 9} -}, -{ -{ 0x0002, 2}, { 0x0006, 3}, { 0x000F, 4}, { 0x000D, 5}, { 0x000C, 5}, { 0x0015, 6}, -{ 0x0013, 6}, { 0x0012, 6}, { 0x0017, 7}, { 0x001F, 8}, { 0x001E, 8}, { 0x001D, 8}, -{ 0x0025, 9}, { 0x0024, 9}, { 0x0023, 9}, { 0x0021, 9}, { 0x0021, 10}, { 0x0020, 10}, -{ 0x000F, 10}, { 0x000E, 10}, { 0x0007, 11}, { 0x0006, 11}, { 0x0020, 11}, { 0x0021, 11}, -{ 0x0050, 12}, { 0x0051, 12}, { 0x0052, 12}, { 0x000E, 4}, { 0x0014, 6}, { 0x0016, 7}, -{ 0x001C, 8}, { 0x0020, 9}, { 0x001F, 9}, { 0x000D, 10}, { 0x0022, 11}, { 0x0053, 12}, -{ 0x0055, 12}, { 0x000B, 5}, { 0x0015, 7}, { 0x001E, 9}, { 0x000C, 10}, { 0x0056, 12}, -{ 0x0011, 6}, { 0x001B, 8}, { 0x001D, 9}, { 0x000B, 10}, { 0x0010, 6}, { 0x0022, 9}, -{ 0x000A, 10}, { 0x000D, 6}, { 0x001C, 9}, { 0x0008, 10}, { 0x0012, 7}, { 0x001B, 9}, -{ 0x0054, 12}, { 0x0014, 7}, { 0x001A, 9}, { 0x0057, 12}, { 0x0019, 8}, { 0x0009, 10}, -{ 0x0018, 8}, { 0x0023, 11}, { 0x0017, 8}, { 0x0019, 9}, { 0x0018, 9}, { 0x0007, 10}, -{ 0x0058, 12}, { 0x0007, 4}, { 0x000C, 6}, { 0x0016, 8}, { 0x0017, 9}, { 0x0006, 10}, -{ 0x0005, 11}, { 0x0004, 11}, { 0x0059, 12}, { 0x000F, 6}, { 0x0016, 9}, { 0x0005, 10}, -{ 0x000E, 6}, { 0x0004, 10}, { 0x0011, 7}, { 0x0024, 11}, { 0x0010, 7}, { 0x0025, 11}, -{ 0x0013, 7}, { 0x005A, 12}, { 0x0015, 8}, { 0x005B, 12}, { 0x0014, 8}, { 0x0013, 8}, -{ 0x001A, 8}, { 0x0015, 9}, { 0x0014, 9}, { 0x0013, 9}, { 0x0012, 9}, { 0x0011, 9}, -{ 0x0026, 11}, { 0x0027, 11}, { 0x005C, 12}, { 0x005D, 12}, { 0x005E, 12}, { 0x005F, 12}, -{ 0x0003, 7} -}, -{ -{ 0x0002, 2}, { 0x000F, 4}, { 0x0015, 6}, { 0x0017, 7}, { 0x001F, 8}, { 0x0025, 9}, -{ 0x0024, 9}, { 0x0021, 10}, { 0x0020, 10}, { 0x0007, 11}, { 0x0006, 11}, { 0x0020, 11}, -{ 0x0006, 3}, { 0x0014, 6}, { 0x001E, 8}, { 0x000F, 10}, { 0x0021, 11}, { 0x0050, 12}, -{ 0x000E, 4}, { 0x001D, 8}, { 0x000E, 10}, { 0x0051, 12}, { 0x000D, 5}, { 0x0023, 9}, -{ 0x000D, 10}, { 0x000C, 5}, { 0x0022, 9}, { 0x0052, 12}, { 0x000B, 5}, { 0x000C, 10}, -{ 0x0053, 12}, { 0x0013, 6}, { 0x000B, 10}, { 0x0054, 12}, { 0x0012, 6}, { 0x000A, 10}, -{ 0x0011, 6}, { 0x0009, 10}, { 0x0010, 6}, { 0x0008, 10}, { 0x0016, 7}, { 0x0055, 12}, -{ 0x0015, 7}, { 0x0014, 7}, { 0x001C, 8}, { 0x001B, 8}, { 0x0021, 9}, { 0x0020, 9}, -{ 0x001F, 9}, { 0x001E, 9}, { 0x001D, 9}, { 0x001C, 9}, { 0x001B, 9}, { 0x001A, 9}, -{ 0x0022, 11}, { 0x0023, 11}, { 0x0056, 12}, { 0x0057, 12}, { 0x0007, 4}, { 0x0019, 9}, -{ 0x0005, 11}, { 0x000F, 6}, { 0x0004, 11}, { 0x000E, 6}, { 0x000D, 6}, { 0x000C, 6}, -{ 0x0013, 7}, { 0x0012, 7}, { 0x0011, 7}, { 0x0010, 7}, { 0x001A, 8}, { 0x0019, 8}, -{ 0x0018, 8}, { 0x0017, 8}, { 0x0016, 8}, { 0x0015, 8}, { 0x0014, 8}, { 0x0013, 8}, -{ 0x0018, 9}, { 0x0017, 9}, { 0x0016, 9}, { 0x0015, 9}, { 0x0014, 9}, { 0x0013, 9}, -{ 0x0012, 9}, { 0x0011, 9}, { 0x0007, 10}, { 0x0006, 10}, { 0x0005, 10}, { 0x0004, 10}, -{ 0x0024, 11}, { 0x0025, 11}, { 0x0026, 11}, { 0x0027, 11}, { 0x0058, 12}, { 0x0059, 12}, -{ 0x005A, 12}, { 0x005B, 12}, { 0x005C, 12}, { 0x005D, 12}, { 0x005E, 12}, { 0x005F, 12}, -{ 0x0003, 7} -}, -{ -{ 0x0000, 2}, { 0x0003, 3}, { 0x000D, 4}, { 0x0005, 4}, { 0x001C, 5}, { 0x0016, 5}, -{ 0x003F, 6}, { 0x003A, 6}, { 0x002E, 6}, { 0x0022, 6}, { 0x007B, 7}, { 0x0067, 7}, -{ 0x005F, 7}, { 0x0047, 7}, { 0x0026, 7}, { 0x00EF, 8}, { 0x00CD, 8}, { 0x00C1, 8}, -{ 0x00A9, 8}, { 0x004F, 8}, { 0x01F2, 9}, { 0x01DD, 9}, { 0x0199, 9}, { 0x0185, 9}, -{ 0x015D, 9}, { 0x011B, 9}, { 0x03EF, 10}, { 0x03E1, 10}, { 0x03C8, 10}, { 0x0331, 10}, -{ 0x0303, 10}, { 0x02F1, 10}, { 0x02A0, 10}, { 0x0233, 10}, { 0x0126, 10}, { 0x07C0, 11}, -{ 0x076F, 11}, { 0x076C, 11}, { 0x0661, 11}, { 0x0604, 11}, { 0x0572, 11}, { 0x0551, 11}, -{ 0x046A, 11}, { 0x0274, 11}, { 0x0F27, 12}, { 0x0F24, 12}, { 0x0EDB, 12}, { 0x0C8E, 12}, -{ 0x0C0B, 12}, { 0x0C0A, 12}, { 0x0AE3, 12}, { 0x08D6, 12}, { 0x0490, 12}, { 0x0495, 12}, -{ 0x1F19, 13}, { 0x1DB5, 13}, { 0x0009, 4}, { 0x0010, 5}, { 0x0029, 6}, { 0x0062, 7}, -{ 0x00F3, 8}, { 0x00AD, 8}, { 0x01E5, 9}, { 0x0179, 9}, { 0x009C, 9}, { 0x03B1, 10}, -{ 0x02AE, 10}, { 0x0127, 10}, { 0x076E, 11}, { 0x0570, 11}, { 0x0275, 11}, { 0x0F25, 12}, -{ 0x0EC0, 12}, { 0x0AA0, 12}, { 0x08D7, 12}, { 0x1E4C, 13}, { 0x0008, 5}, { 0x0063, 7}, -{ 0x00AF, 8}, { 0x017B, 9}, { 0x03B3, 10}, { 0x07DD, 11}, { 0x0640, 11}, { 0x0F8D, 12}, -{ 0x0BC1, 12}, { 0x0491, 12}, { 0x0028, 6}, { 0x00C3, 8}, { 0x0151, 9}, { 0x02A1, 10}, -{ 0x0573, 11}, { 0x0EC3, 12}, { 0x1F35, 13}, { 0x0065, 7}, { 0x01DA, 9}, { 0x02AF, 10}, -{ 0x0277, 11}, { 0x08C9, 12}, { 0x1781, 13}, { 0x0025, 7}, { 0x0118, 9}, { 0x0646, 11}, -{ 0x0AA6, 12}, { 0x1780, 13}, { 0x00C9, 8}, { 0x0321, 10}, { 0x0F9B, 12}, { 0x191E, 13}, -{ 0x0048, 8}, { 0x07CC, 11}, { 0x0AA1, 12}, { 0x0180, 9}, { 0x0465, 11}, { 0x1905, 13}, -{ 0x03E2, 10}, { 0x0EC1, 12}, { 0x3C9B, 14}, { 0x02F4, 10}, { 0x08C8, 12}, { 0x07C1, 11}, -{ 0x0928, 13}, { 0x05E1, 11}, { 0x320D, 14}, { 0x0EC2, 12}, { 0x6418, 15}, { 0x1F34, 13}, -{ 0x0078, 7}, { 0x0155, 9}, { 0x0552, 11}, { 0x191F, 13}, { 0x00FA, 8}, { 0x07DC, 11}, -{ 0x1907, 13}, { 0x00AC, 8}, { 0x0249, 11}, { 0x13B1, 14}, { 0x01F6, 9}, { 0x0AE2, 12}, -{ 0x01DC, 9}, { 0x04ED, 12}, { 0x0184, 9}, { 0x1904, 13}, { 0x0156, 9}, { 0x09D9, 13}, -{ 0x03E7, 10}, { 0x0929, 13}, { 0x03B2, 10}, { 0x3B68, 14}, { 0x02F5, 10}, { 0x13B0, 14}, -{ 0x0322, 10}, { 0x3B69, 14}, { 0x0234, 10}, { 0x7935, 15}, { 0x07C7, 11}, { 0xC833, 16}, -{ 0x0660, 11}, { 0x7934, 15}, { 0x024B, 11}, { 0xC832, 16}, { 0x0AA7, 12}, { 0x1F18, 13}, -{ 0x007A, 7} -}, -{ -{ 0x0002, 2}, { 0x0000, 3}, { 0x001E, 5}, { 0x0004, 5}, { 0x0012, 6}, { 0x0070, 7}, -{ 0x001A, 7}, { 0x005F, 8}, { 0x0047, 8}, { 0x01D3, 9}, { 0x00B5, 9}, { 0x0057, 9}, -{ 0x03B5, 10}, { 0x016D, 10}, { 0x0162, 10}, { 0x07CE, 11}, { 0x0719, 11}, { 0x0691, 11}, -{ 0x02C6, 11}, { 0x0156, 11}, { 0x0F92, 12}, { 0x0D2E, 12}, { 0x0D20, 12}, { 0x059E, 12}, -{ 0x0468, 12}, { 0x02A6, 12}, { 0x1DA2, 13}, { 0x1C60, 13}, { 0x1A43, 13}, { 0x0B1D, 13}, -{ 0x08C0, 13}, { 0x055D, 13}, { 0x0003, 3}, { 0x000A, 5}, { 0x0077, 7}, { 0x00E5, 8}, -{ 0x01D9, 9}, { 0x03E5, 10}, { 0x0166, 10}, { 0x0694, 11}, { 0x0152, 11}, { 0x059F, 12}, -{ 0x1F3C, 13}, { 0x1A4B, 13}, { 0x055E, 13}, { 0x000C, 4}, { 0x007D, 7}, { 0x0044, 8}, -{ 0x03E0, 10}, { 0x0769, 11}, { 0x0E31, 12}, { 0x1F26, 13}, { 0x055C, 13}, { 0x001B, 5}, -{ 0x00E2, 8}, { 0x03A5, 10}, { 0x02C9, 11}, { 0x1F23, 13}, { 0x3B47, 14}, { 0x0007, 5}, -{ 0x01D8, 9}, { 0x02D8, 11}, { 0x1F27, 13}, { 0x3494, 14}, { 0x0035, 6}, { 0x03E1, 10}, -{ 0x059C, 12}, { 0x38C3, 14}, { 0x000C, 6}, { 0x0165, 10}, { 0x1D23, 13}, { 0x1638, 14}, -{ 0x0068, 7}, { 0x0693, 11}, { 0x3A45, 14}, { 0x0020, 7}, { 0x0F90, 12}, { 0x7CF6, 15}, -{ 0x00E8, 8}, { 0x058F, 12}, { 0x2CEF, 15}, { 0x0045, 8}, { 0x0B3A, 13}, { 0x01F1, 9}, -{ 0x3B46, 14}, { 0x01A7, 9}, { 0x1676, 14}, { 0x0056, 9}, { 0x692A, 15}, { 0x038D, 10}, -{ 0xE309, 16}, { 0x00AA, 10}, { 0x1C611, 17}, { 0x02DF, 11}, { 0xB3B9, 17}, { 0x02C8, 11}, -{ 0x38C20, 18}, { 0x01B0, 11}, { 0x16390, 18}, { 0x0F9F, 12}, { 0x16771, 18}, { 0x0ED0, 12}, -{ 0x71843, 19}, { 0x0D2A, 12}, { 0xF9E8C, 20}, { 0x0461, 12}, { 0xF9E8E, 20}, { 0x0B67, 13}, -{ 0x055F, 13}, { 0x003F, 6}, { 0x006D, 9}, { 0x0E90, 12}, { 0x054E, 13}, { 0x0013, 6}, -{ 0x0119, 10}, { 0x0B66, 13}, { 0x000B, 6}, { 0x0235, 11}, { 0x7CF5, 15}, { 0x0075, 7}, -{ 0x0D24, 12}, { 0xF9E9, 16}, { 0x002E, 7}, { 0x1F22, 13}, { 0x0021, 7}, { 0x054F, 13}, -{ 0x0014, 7}, { 0x3A44, 14}, { 0x00E4, 8}, { 0x7CF7, 15}, { 0x005E, 8}, { 0x7185, 15}, -{ 0x0037, 8}, { 0x2C73, 15}, { 0x01DB, 9}, { 0x59DD, 16}, { 0x01C7, 9}, { 0x692B, 15}, -{ 0x01A6, 9}, { 0x58E5, 16}, { 0x00B4, 9}, { 0x1F3D0, 17}, { 0x00B0, 9}, { 0xB1C9, 17}, -{ 0x03E6, 10}, { 0x16770, 18}, { 0x016E, 10}, { 0x3E7A2, 18}, { 0x011B, 10}, { 0xF9E8D, 20}, -{ 0x00D9, 10}, { 0xF9E8F, 20}, { 0x00A8, 10}, { 0x2C723, 19}, { 0x0749, 11}, { 0xE3084, 20}, -{ 0x0696, 11}, { 0x58E45, 20}, { 0x02DE, 11}, { 0xB1C88, 21}, { 0x0231, 11}, { 0x1C610A, 21}, -{ 0x01B1, 11}, { 0x71842D, 23}, { 0x0D2B, 12}, { 0x38C217, 22}, { 0x0D2F, 12}, { 0x163913, 22}, -{ 0x05B2, 12}, { 0x163912, 22}, { 0x0469, 12}, { 0x71842C, 23}, { 0x1A42, 13}, { 0x08C1, 13}, -{ 0x0073, 7} -} -}; - static const uint16_t vlc_offs[] = { 0, 520, 552, 616, 1128, 1160, 1224, 1740, 1772, 1836, 1900, 2436, 2986, 3050, 3610, 4154, 4218, 4746, 5326, 5390, 5902, 6554, 7658, 8342, @@ -1639,12 +1418,14 @@ av_cold int ff_vc1_init_common(VC1Context *v) ff_vc1_mv_diff_bits[i], 1, 1, ff_vc1_mv_diff_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC); } - for (i = 0; i < 8; i++) { + for (int i = 0, ac_offset = 0; i < 8; i++) { ff_vc1_ac_coeff_table[i].table = &vlc_table[vlc_offs[i * 2 + 21]]; ff_vc1_ac_coeff_table[i].table_allocated = vlc_offs[i * 2 + 22] - vlc_offs[i * 2 + 21]; - init_vlc(&ff_vc1_ac_coeff_table[i], AC_VLC_BITS, ff_vc1_ac_sizes[i], - &vc1_ac_tables[i][0][1], 8, 4, - &vc1_ac_tables[i][0][0], 8, 4, INIT_VLC_USE_NEW_STATIC); + ff_init_vlc_from_lengths(&ff_vc1_ac_coeff_table[i], AC_VLC_BITS, ff_vc1_ac_sizes[i], + ff_vc1_ac_coeff_lens + ac_offset, 1, + ff_vc1_ac_coeff_syms + ac_offset, 2, 2, + 0, INIT_VLC_USE_NEW_STATIC); + ac_offset += ff_vc1_ac_sizes[i]; /* initialize interlaced MVDATA tables (2-Ref) */ ff_vc1_2ref_mvdata_vlc[i].table = &vlc_table[vlc_offs[i * 2 + 22]]; ff_vc1_2ref_mvdata_vlc[i].table_allocated = vlc_offs[i * 2 + 23] - vlc_offs[i * 2 + 22]; diff --git a/libavcodec/vc1_block.c b/libavcodec/vc1_block.c index 3c9d1d4b8d..42de71eb25 100644 --- a/libavcodec/vc1_block.c +++ b/libavcodec/vc1_block.c @@ -504,25 +504,25 @@ static int vc1_decode_ac_coeff(VC1Context *v, int *last, int *skip, int *value, int codingset) { GetBitContext *gb = &v->s.gb; - int index, run, level, lst, sign; - - index = get_vlc2(gb, ff_vc1_ac_coeff_table[codingset].table, AC_VLC_BITS, 3); - if (index < 0) - return index; - if (index != ff_vc1_ac_sizes[codingset] - 1) { - run = vc1_index_decode_table[codingset][index][0]; - level = vc1_index_decode_table[codingset][index][1]; - lst = index >= vc1_last_decode_table[codingset] || get_bits_left(gb) < 0; + int symbol, run, level, lst, sign; + + symbol = get_vlc2(gb, ff_vc1_ac_coeff_table[codingset].table, AC_VLC_BITS, 3); + if (symbol < 0) + return symbol; + if (symbol > 0) { + run = symbol & 0xFF; + level = symbol >> 9; + lst = symbol & 0x100 || get_bits_left(gb) < 0; sign = get_bits1(gb); } else { int escape = decode210(gb); if (escape != 2) { - index = get_vlc2(gb, ff_vc1_ac_coeff_table[codingset].table, AC_VLC_BITS, 3); - if (index >= ff_vc1_ac_sizes[codingset] - 1U) + symbol = get_vlc2(gb, ff_vc1_ac_coeff_table[codingset].table, AC_VLC_BITS, 3); + if (symbol <= 0) return AVERROR_INVALIDDATA; - run = vc1_index_decode_table[codingset][index][0]; - level = vc1_index_decode_table[codingset][index][1]; - lst = index >= vc1_last_decode_table[codingset]; + run = symbol & 0xFF; + level = symbol >> 9; + lst = symbol & 0x100; if (escape == 0) { if (lst) level += vc1_last_delta_level_table[codingset][run]; diff --git a/libavcodec/vc1acdata.h b/libavcodec/vc1acdata.h index a70b44ae05..68a4ca82cf 100644 --- a/libavcodec/vc1acdata.h +++ b/libavcodec/vc1acdata.h @@ -26,180 +26,6 @@ #include "vc1data.h" -/* which indexes point to last=1 entries in tables */ -static const int vc1_last_decode_table[AC_MODES] = { - 119, 99, 85, 81, 67, 58, 126, 109 -}; - -static const uint8_t vc1_index_decode_table[AC_MODES][185][2] = { -{ -{ 0, 1}, { 0, 2}, { 0, 3}, { 0, 4}, { 0, 5}, { 0, 6}, { 0, 7}, { 0, 8}, -{ 0, 9}, { 0, 10}, { 0, 11}, { 0, 12}, { 0, 13}, { 0, 14}, { 0, 15}, { 0, 16}, -{ 0, 17}, { 0, 18}, { 0, 19}, { 1, 1}, { 1, 2}, { 1, 3}, { 1, 4}, { 1, 5}, -{ 1, 6}, { 1, 7}, { 1, 8}, { 1, 9}, { 1, 10}, { 1, 11}, { 1, 12}, { 1, 13}, -{ 1, 14}, { 1, 15}, { 2, 1}, { 2, 2}, { 2, 3}, { 2, 4}, { 2, 5}, { 2, 6}, -{ 2, 7}, { 2, 8}, { 2, 9}, { 2, 10}, { 2, 11}, { 2, 12}, { 3, 1}, { 3, 2}, -{ 3, 3}, { 3, 4}, { 3, 5}, { 3, 6}, { 3, 7}, { 3, 8}, { 3, 9}, { 3, 10}, -{ 3, 11}, { 4, 1}, { 4, 2}, { 4, 3}, { 4, 4}, { 4, 5}, { 4, 6}, { 5, 1}, -{ 5, 2}, { 5, 3}, { 5, 4}, { 5, 5}, { 6, 1}, { 6, 2}, { 6, 3}, { 6, 4}, -{ 7, 1}, { 7, 2}, { 7, 3}, { 7, 4}, { 8, 1}, { 8, 2}, { 8, 3}, { 8, 4}, -{ 9, 1}, { 9, 2}, { 9, 3}, { 9, 4}, { 10, 1}, { 10, 2}, { 10, 3}, { 11, 1}, -{ 11, 2}, { 11, 3}, { 12, 1}, { 12, 2}, { 12, 3}, { 13, 1}, { 13, 2}, { 13, 3}, -{ 14, 1}, { 14, 2}, { 14, 3}, { 15, 1}, { 15, 2}, { 15, 3}, { 16, 1}, { 16, 2}, -{ 17, 1}, { 17, 2}, { 18, 1}, { 19, 1}, { 20, 1}, { 21, 1}, { 22, 1}, { 23, 1}, -{ 24, 1}, { 25, 1}, { 26, 1}, { 27, 1}, { 28, 1}, { 29, 1}, { 30, 1}, { 0, 1}, -{ 0, 2}, { 0, 3}, { 0, 4}, { 0, 5}, { 0, 6}, { 1, 1}, { 1, 2}, { 1, 3}, -{ 1, 4}, { 1, 5}, { 2, 1}, { 2, 2}, { 2, 3}, { 2, 4}, { 3, 1}, { 3, 2}, -{ 3, 3}, { 3, 4}, { 4, 1}, { 4, 2}, { 4, 3}, { 5, 1}, { 5, 2}, { 6, 1}, -{ 6, 2}, { 7, 1}, { 7, 2}, { 8, 1}, { 8, 2}, { 9, 1}, { 9, 2}, { 10, 1}, -{ 10, 2}, { 11, 1}, { 11, 2}, { 12, 1}, { 12, 2}, { 13, 1}, { 13, 2}, { 14, 1}, -{ 14, 2}, { 15, 1}, { 15, 2}, { 16, 1}, { 17, 1}, { 18, 1}, { 19, 1}, { 20, 1}, -{ 21, 1}, { 22, 1}, { 23, 1}, { 24, 1}, { 25, 1}, { 26, 1}, { 27, 1}, { 28, 1}, -{ 29, 1}, { 30, 1}, { 31, 1}, { 32, 1}, { 33, 1}, { 34, 1}, { 35, 1}, { 36, 1}, -{ 37, 1} -}, -{ -{ 0, 1}, { 0, 2}, { 0, 3}, { 0, 4}, { 0, 5}, { 0, 6}, { 0, 7}, { 0, 8}, -{ 0, 9}, { 0, 10}, { 0, 11}, { 0, 12}, { 0, 13}, { 0, 14}, { 0, 15}, { 0, 16}, -{ 0, 17}, { 0, 18}, { 0, 19}, { 0, 20}, { 0, 21}, { 0, 22}, { 0, 23}, { 1, 1}, -{ 1, 2}, { 1, 3}, { 1, 4}, { 1, 5}, { 1, 6}, { 1, 7}, { 1, 8}, { 1, 9}, -{ 1, 10}, { 1, 11}, { 2, 1}, { 2, 2}, { 2, 3}, { 2, 4}, { 2, 5}, { 2, 6}, -{ 2, 7}, { 2, 8}, { 3, 1}, { 3, 2}, { 3, 3}, { 3, 4}, { 3, 5}, { 3, 6}, -{ 3, 7}, { 4, 1}, { 4, 2}, { 4, 3}, { 4, 4}, { 4, 5}, { 5, 1}, { 5, 2}, -{ 5, 3}, { 5, 4}, { 5, 5}, { 6, 1}, { 6, 2}, { 6, 3}, { 6, 4}, { 7, 1}, -{ 7, 2}, { 7, 3}, { 7, 4}, { 8, 1}, { 8, 2}, { 8, 3}, { 9, 1}, { 9, 2}, -{ 9, 3}, { 10, 1}, { 10, 2}, { 10, 3}, { 11, 1}, { 11, 2}, { 11, 3}, { 12, 1}, -{ 12, 2}, { 13, 1}, { 13, 2}, { 14, 1}, { 14, 2}, { 15, 1}, { 15, 2}, { 16, 1}, -{ 16, 2}, { 17, 1}, { 18, 1}, { 19, 1}, { 20, 1}, { 21, 1}, { 22, 1}, { 23, 1}, -{ 24, 1}, { 25, 1}, { 26, 1}, { 0, 1}, { 0, 2}, { 0, 3}, { 0, 4}, { 0, 5}, -{ 0, 6}, { 0, 7}, { 0, 8}, { 0, 9}, { 1, 1}, { 1, 2}, { 1, 3}, { 1, 4}, -{ 1, 5}, { 2, 1}, { 2, 2}, { 2, 3}, { 2, 4}, { 3, 1}, { 3, 2}, { 3, 3}, -{ 3, 4}, { 4, 1}, { 4, 2}, { 4, 3}, { 5, 1}, { 5, 2}, { 5, 3}, { 6, 1}, -{ 6, 2}, { 6, 3}, { 7, 1}, { 7, 2}, { 8, 1}, { 8, 2}, { 9, 1}, { 9, 2}, -{ 10, 1}, { 10, 2}, { 11, 1}, { 11, 2}, { 12, 1}, { 12, 2}, { 13, 1}, { 13, 2}, -{ 14, 1}, { 14, 2}, { 15, 1}, { 16, 1}, { 17, 1}, { 18, 1}, { 19, 1}, { 20, 1}, -{ 21, 1}, { 22, 1}, { 23, 1}, { 24, 1}, { 25, 1}, { 26, 1}, { 27, 1}, { 28, 1}, -{ 29, 1}, { 30, 1}, { 31, 1}, { 32, 1}, { 33, 1}, { 34, 1}, { 35, 1}, { 36, 1} -}, -{ -{ 0, 1}, { 0, 2}, { 0, 3}, { 0, 4}, { 0, 5}, { 0, 6}, { 0, 7}, { 0, 8}, -{ 0, 9}, { 0, 10}, { 0, 11}, { 0, 12}, { 0, 13}, { 0, 14}, { 0, 15}, { 0, 16}, -{ 1, 1}, { 1, 2}, { 1, 3}, { 1, 4}, { 1, 5}, { 1, 6}, { 1, 7}, { 1, 8}, -{ 1, 9}, { 1, 10}, { 1, 11}, { 2, 1}, { 2, 2}, { 2, 3}, { 2, 4}, { 2, 5}, -{ 2, 6}, { 2, 7}, { 2, 8}, { 3, 1}, { 3, 2}, { 3, 3}, { 3, 4}, { 3, 5}, -{ 3, 6}, { 3, 7}, { 4, 1}, { 4, 2}, { 4, 3}, { 4, 4}, { 4, 5}, { 5, 1}, -{ 5, 2}, { 5, 3}, { 5, 4}, { 6, 1}, { 6, 2}, { 6, 3}, { 6, 4}, { 7, 1}, -{ 7, 2}, { 7, 3}, { 8, 1}, { 8, 2}, { 8, 3}, { 9, 1}, { 9, 2}, { 9, 3}, -{ 10, 1}, { 10, 2}, { 10, 3}, { 11, 1}, { 11, 2}, { 11, 3}, { 12, 1}, { 12, 2}, -{ 12, 3}, { 13, 1}, { 13, 2}, { 13, 3}, { 14, 1}, { 14, 2}, { 15, 1}, { 15, 2}, -{ 16, 1}, { 17, 1}, { 18, 1}, { 19, 1}, { 20, 1}, { 0, 1}, { 0, 2}, { 0, 3}, -{ 0, 4}, { 1, 1}, { 1, 2}, { 1, 3}, { 1, 4}, { 2, 1}, { 2, 2}, { 2, 3}, -{ 3, 1}, { 3, 2}, { 3, 3}, { 4, 1}, { 4, 2}, { 5, 1}, { 5, 2}, { 6, 1}, -{ 6, 2}, { 7, 1}, { 7, 2}, { 8, 1}, { 8, 2}, { 9, 1}, { 9, 2}, { 10, 1}, -{ 10, 2}, { 11, 1}, { 11, 2}, { 12, 1}, { 12, 2}, { 13, 1}, { 13, 2}, { 14, 1}, -{ 15, 1}, { 16, 1}, { 17, 1}, { 18, 1}, { 19, 1}, { 20, 1}, { 21, 1}, { 22, 1}, -{ 23, 1}, { 24, 1}, { 25, 1}, { 26, 1} -}, -{ -{ 0, 1}, { 0, 2}, { 0, 3}, { 0, 4}, { 0, 5}, { 0, 6}, { 0, 7}, { 0, 8}, -{ 0, 9}, { 0, 10}, { 0, 11}, { 0, 12}, { 0, 13}, { 0, 14}, { 1, 1}, { 1, 2}, -{ 1, 3}, { 1, 4}, { 1, 5}, { 1, 6}, { 1, 7}, { 1, 8}, { 1, 9}, { 2, 1}, -{ 2, 2}, { 2, 3}, { 2, 4}, { 2, 5}, { 3, 1}, { 3, 2}, { 3, 3}, { 3, 4}, -{ 4, 1}, { 4, 2}, { 4, 3}, { 4, 4}, { 5, 1}, { 5, 2}, { 5, 3}, { 5, 4}, -{ 6, 1}, { 6, 2}, { 6, 3}, { 7, 1}, { 7, 2}, { 7, 3}, { 8, 1}, { 8, 2}, -{ 8, 3}, { 9, 1}, { 9, 2}, { 9, 3}, { 10, 1}, { 10, 2}, { 10, 3}, { 11, 1}, -{ 11, 2}, { 11, 3}, { 12, 1}, { 12, 2}, { 12, 3}, { 13, 1}, { 13, 2}, { 14, 1}, -{ 14, 2}, { 15, 1}, { 15, 2}, { 16, 1}, { 17, 1}, { 18, 1}, { 19, 1}, { 20, 1}, -{ 21, 1}, { 22, 1}, { 23, 1}, { 24, 1}, { 25, 1}, { 26, 1}, { 27, 1}, { 28, 1}, -{ 29, 1}, { 0, 1}, { 0, 2}, { 0, 3}, { 0, 4}, { 0, 5}, { 1, 1}, { 1, 2}, -{ 1, 3}, { 1, 4}, { 2, 1}, { 2, 2}, { 2, 3}, { 3, 1}, { 3, 2}, { 3, 3}, -{ 4, 1}, { 4, 2}, { 5, 1}, { 5, 2}, { 6, 1}, { 6, 2}, { 7, 1}, { 7, 2}, -{ 8, 1}, { 8, 2}, { 9, 1}, { 9, 2}, { 10, 1}, { 10, 2}, { 11, 1}, { 11, 2}, -{ 12, 1}, { 12, 2}, { 13, 1}, { 13, 2}, { 14, 1}, { 14, 2}, { 15, 1}, { 15, 2}, -{ 16, 1}, { 17, 1}, { 18, 1}, { 19, 1}, { 20, 1}, { 21, 1}, { 22, 1}, { 23, 1}, -{ 24, 1}, { 25, 1}, { 26, 1}, { 27, 1}, { 28, 1}, { 29, 1}, { 30, 1}, { 31, 1}, -{ 32, 1}, { 33, 1}, { 34, 1}, { 35, 1}, { 36, 1}, { 37, 1}, { 38, 1}, { 39, 1}, -{ 40, 1}, { 41, 1}, { 42, 1}, { 43, 1} -}, -{ -{ 0, 1}, { 0, 2}, { 0, 3}, { 0, 4}, { 0, 5}, { 0, 6}, { 0, 7}, { 0, 8}, -{ 0, 9}, { 0, 10}, { 0, 11}, { 0, 12}, { 0, 13}, { 0, 14}, { 0, 15}, { 0, 16}, -{ 0, 17}, { 0, 18}, { 0, 19}, { 0, 20}, { 0, 21}, { 0, 22}, { 0, 23}, { 0, 24}, -{ 0, 25}, { 0, 26}, { 0, 27}, { 1, 1}, { 1, 2}, { 1, 3}, { 1, 4}, { 1, 5}, -{ 1, 6}, { 1, 7}, { 1, 8}, { 1, 9}, { 1, 10}, { 2, 1}, { 2, 2}, { 2, 3}, -{ 2, 4}, { 2, 5}, { 3, 1}, { 3, 2}, { 3, 3}, { 3, 4}, { 4, 1}, { 4, 2}, -{ 4, 3}, { 5, 1}, { 5, 2}, { 5, 3}, { 6, 1}, { 6, 2}, { 6, 3}, { 7, 1}, -{ 7, 2}, { 7, 3}, { 8, 1}, { 8, 2}, { 9, 1}, { 9, 2}, { 10, 1}, { 11, 1}, -{ 12, 1}, { 13, 1}, { 14, 1}, { 0, 1}, { 0, 2}, { 0, 3}, { 0, 4}, { 0, 5}, -{ 0, 6}, { 0, 7}, { 0, 8}, { 1, 1}, { 1, 2}, { 1, 3}, { 2, 1}, { 2, 2}, -{ 3, 1}, { 3, 2}, { 4, 1}, { 4, 2}, { 5, 1}, { 5, 2}, { 6, 1}, { 6, 2}, -{ 7, 1}, { 8, 1}, { 9, 1}, { 10, 1}, { 11, 1}, { 12, 1}, { 13, 1}, { 14, 1}, -{ 15, 1}, { 16, 1}, { 17, 1}, { 18, 1}, { 19, 1}, { 20, 1} -}, -{ -{ 0, 1}, { 0, 2}, { 0, 3}, { 0, 4}, { 0, 5}, { 0, 6}, { 0, 7}, { 0, 8}, -{ 0, 9}, { 0, 10}, { 0, 11}, { 0, 12}, { 1, 1}, { 1, 2}, { 1, 3}, { 1, 4}, -{ 1, 5}, { 1, 6}, { 2, 1}, { 2, 2}, { 2, 3}, { 2, 4}, { 3, 1}, { 3, 2}, -{ 3, 3}, { 4, 1}, { 4, 2}, { 4, 3}, { 5, 1}, { 5, 2}, { 5, 3}, { 6, 1}, -{ 6, 2}, { 6, 3}, { 7, 1}, { 7, 2}, { 8, 1}, { 8, 2}, { 9, 1}, { 9, 2}, -{ 10, 1}, { 10, 2}, { 11, 1}, { 12, 1}, { 13, 1}, { 14, 1}, { 15, 1}, { 16, 1}, -{ 17, 1}, { 18, 1}, { 19, 1}, { 20, 1}, { 21, 1}, { 22, 1}, { 23, 1}, { 24, 1}, -{ 25, 1}, { 26, 1}, { 0, 1}, { 0, 2}, { 0, 3}, { 1, 1}, { 1, 2}, { 2, 1}, -{ 3, 1}, { 4, 1}, { 5, 1}, { 6, 1}, { 7, 1}, { 8, 1}, { 9, 1}, { 10, 1}, -{ 11, 1}, { 12, 1}, { 13, 1}, { 14, 1}, { 15, 1}, { 16, 1}, { 17, 1}, { 18, 1}, -{ 19, 1}, { 20, 1}, { 21, 1}, { 22, 1}, { 23, 1}, { 24, 1}, { 25, 1}, { 26, 1}, -{ 27, 1}, { 28, 1}, { 29, 1}, { 30, 1}, { 31, 1}, { 32, 1}, { 33, 1}, { 34, 1}, -{ 35, 1}, { 36, 1}, { 37, 1}, { 38, 1}, { 39, 1}, { 40, 1} -}, -{ -{ 0, 1}, { 0, 2}, { 0, 3}, { 0, 4}, { 0, 5}, { 0, 6}, { 0, 7}, { 0, 8}, -{ 0, 9}, { 0, 10}, { 0, 11}, { 0, 12}, { 0, 13}, { 0, 14}, { 0, 15}, { 0, 16}, -{ 0, 17}, { 0, 18}, { 0, 19}, { 0, 20}, { 0, 21}, { 0, 22}, { 0, 23}, { 0, 24}, -{ 0, 25}, { 0, 26}, { 0, 27}, { 0, 28}, { 0, 29}, { 0, 30}, { 0, 31}, { 0, 32}, -{ 0, 33}, { 0, 34}, { 0, 35}, { 0, 36}, { 0, 37}, { 0, 38}, { 0, 39}, { 0, 40}, -{ 0, 41}, { 0, 42}, { 0, 43}, { 0, 44}, { 0, 45}, { 0, 46}, { 0, 47}, { 0, 48}, -{ 0, 49}, { 0, 50}, { 0, 51}, { 0, 52}, { 0, 53}, { 0, 54}, { 0, 55}, { 0, 56}, -{ 1, 1}, { 1, 2}, { 1, 3}, { 1, 4}, { 1, 5}, { 1, 6}, { 1, 7}, { 1, 8}, -{ 1, 9}, { 1, 10}, { 1, 11}, { 1, 12}, { 1, 13}, { 1, 14}, { 1, 15}, { 1, 16}, -{ 1, 17}, { 1, 18}, { 1, 19}, { 1, 20}, { 2, 1}, { 2, 2}, { 2, 3}, { 2, 4}, -{ 2, 5}, { 2, 6}, { 2, 7}, { 2, 8}, { 2, 9}, { 2, 10}, { 3, 1}, { 3, 2}, -{ 3, 3}, { 3, 4}, { 3, 5}, { 3, 6}, { 3, 7}, { 4, 1}, { 4, 2}, { 4, 3}, -{ 4, 4}, { 4, 5}, { 4, 6}, { 5, 1}, { 5, 2}, { 5, 3}, { 5, 4}, { 5, 5}, -{ 6, 1}, { 6, 2}, { 6, 3}, { 6, 4}, { 7, 1}, { 7, 2}, { 7, 3}, { 8, 1}, -{ 8, 2}, { 8, 3}, { 9, 1}, { 9, 2}, { 9, 3}, { 10, 1}, { 10, 2}, { 11, 1}, -{ 11, 2}, { 12, 1}, { 12, 2}, { 13, 1}, { 13, 2}, { 14, 1}, { 0, 1}, { 0, 2}, -{ 0, 3}, { 0, 4}, { 1, 1}, { 1, 2}, { 1, 3}, { 2, 1}, { 2, 2}, { 2, 3}, -{ 3, 1}, { 3, 2}, { 4, 1}, { 4, 2}, { 5, 1}, { 5, 2}, { 6, 1}, { 6, 2}, -{ 7, 1}, { 7, 2}, { 8, 1}, { 8, 2}, { 9, 1}, { 9, 2}, { 10, 1}, { 10, 2}, -{ 11, 1}, { 11, 2}, { 12, 1}, { 12, 2}, { 13, 1}, { 13, 2}, { 14, 1}, { 14, 2}, -{ 15, 1}, { 16, 1} -}, -{ -{ 0, 1}, { 0, 2}, { 0, 3}, { 0, 4}, { 0, 5}, { 0, 6}, { 0, 7}, { 0, 8}, -{ 0, 9}, { 0, 10}, { 0, 11}, { 0, 12}, { 0, 13}, { 0, 14}, { 0, 15}, { 0, 16}, -{ 0, 17}, { 0, 18}, { 0, 19}, { 0, 20}, { 0, 21}, { 0, 22}, { 0, 23}, { 0, 24}, -{ 0, 25}, { 0, 26}, { 0, 27}, { 0, 28}, { 0, 29}, { 0, 30}, { 0, 31}, { 0, 32}, -{ 1, 1}, { 1, 2}, { 1, 3}, { 1, 4}, { 1, 5}, { 1, 6}, { 1, 7}, { 1, 8}, -{ 1, 9}, { 1, 10}, { 1, 11}, { 1, 12}, { 1, 13}, { 2, 1}, { 2, 2}, { 2, 3}, -{ 2, 4}, { 2, 5}, { 2, 6}, { 2, 7}, { 2, 8}, { 3, 1}, { 3, 2}, { 3, 3}, -{ 3, 4}, { 3, 5}, { 3, 6}, { 4, 1}, { 4, 2}, { 4, 3}, { 4, 4}, { 4, 5}, -{ 5, 1}, { 5, 2}, { 5, 3}, { 5, 4}, { 6, 1}, { 6, 2}, { 6, 3}, { 6, 4}, -{ 7, 1}, { 7, 2}, { 7, 3}, { 8, 1}, { 8, 2}, { 8, 3}, { 9, 1}, { 9, 2}, -{ 9, 3}, { 10, 1}, { 10, 2}, { 11, 1}, { 11, 2}, { 12, 1}, { 12, 2}, { 13, 1}, -{ 13, 2}, { 14, 1}, { 14, 2}, { 15, 1}, { 15, 2}, { 16, 1}, { 16, 2}, { 17, 1}, -{ 17, 2}, { 18, 1}, { 18, 2}, { 19, 1}, { 19, 2}, { 20, 1}, { 20, 2}, { 21, 1}, -{ 21, 2}, { 22, 1}, { 22, 2}, { 23, 1}, { 24, 1}, { 0, 1}, { 0, 2}, { 0, 3}, -{ 0, 4}, { 1, 1}, { 1, 2}, { 1, 3}, { 2, 1}, { 2, 2}, { 2, 3}, { 3, 1}, -{ 3, 2}, { 3, 3}, { 4, 1}, { 4, 2}, { 5, 1}, { 5, 2}, { 6, 1}, { 6, 2}, -{ 7, 1}, { 7, 2}, { 8, 1}, { 8, 2}, { 9, 1}, { 9, 2}, { 10, 1}, { 10, 2}, -{ 11, 1}, { 11, 2}, { 12, 1}, { 12, 2}, { 13, 1}, { 13, 2}, { 14, 1}, { 14, 2}, -{ 15, 1}, { 15, 2}, { 16, 1}, { 16, 2}, { 17, 1}, { 17, 2}, { 18, 1}, { 18, 2}, -{ 19, 1}, { 19, 2}, { 20, 1}, { 20, 2}, { 21, 1}, { 21, 2}, { 22, 1}, { 22, 2}, -{ 23, 1}, { 23, 2}, { 24, 1}, { 24, 2}, { 25, 1}, { 25, 2}, { 26, 1}, { 26, 2}, -{ 27, 1}, { 27, 2}, { 28, 1}, { 28, 2}, { 29, 1}, { 30, 1} -} -}; - static const uint8_t vc1_delta_level_table[AC_MODES][31] = { { 19, 15, 12, 11, 6, 5, 4, 4, 4, 4, diff --git a/libavcodec/vc1data.c b/libavcodec/vc1data.c index de41afdc81..bde500ebe5 100644 --- a/libavcodec/vc1data.c +++ b/libavcodec/vc1data.c @@ -1127,6 +1127,231 @@ const uint16_t ff_vc1_b_field_mvpred_scales[7][4] = { { 7, 4, 3, 3 } // ZONE1OFFSET_Y }; +/* +1 to account for dummy nodes added because some trees are incomplete. */ const int ff_vc1_ac_sizes[AC_MODES] = { - 186, 169, 133, 149, 103, 103, 163, 175 + 186, 169, 133, 149, 103 + 1, 103 + 1, 163, 175 }; + +const uint8_t ff_vc1_ac_coeff_lens[] = { + /* High Motion Intra Tables (#177-179) - 186 entries */ + 4, 7, 9, 11, 12, 14, 14, 14, 15, 15, 10, 8, 9, 9, 8, 9, 11, 13, 13, + 13, 13, 12, 12, 14, 14, 13, 12, 8, 5, 8, 8, 7, 9, 10, 13, 13, 12, 14, + 15, 15, 13, 13, 14, 14, 9, 9, 7, 10, 13, 13, 13, 13, 11, 10, 10, 13, 14, + 15, 15, 12, 12, 12, 10, 9, 7, 8, 8, 10, 11, 13, 14, 15, 15, 12, 11, 11, + 11, 13, 14, 14, 12, 8, 6, 11, 11, 12, 12, 11, 9, 8, 7, 6, 11, 14, 14, + 13, 12, 11, 13, 13, 13, 13, 9, 9, 12, 13, 13, 12, 12, 12, 12, 15, 15, 14, + 13, 13, 13, 9, 10, 12, 12, 11, 8, 2, 5, 7, 7, 12, 13, 14, 14, 11, 10, + 10, 10, 8, 8, 10, 11, 12, 14, 14, 14, 14, 9, 5, 5, 3, 6, 8, 8, 7, + 5, 4, 4, 7, 7, 6, 11, 11, 10, 11, 12, 12, 10, 10, 14, 14, 13, 13, 13, + 11, 9, 9, 11, 13, 13, 13, 14, 14, 11, 12, 13, 13, 8, 6, + /* High Motion Inter Tables (#184-186) - 169 entries */ + 3, 7, 9, 10, 10, 8, 10, 12, 13, 13, 13, 13, 12, 9, 8, 8, 11, 14, 14, + 13, 13, 15, 15, 14, 11, 12, 14, 14, 13, 9, 5, 4, 4, 6, 8, 8, 9, 9, + 8, 5, 3, 7, 10, 11, 12, 12, 10, 13, 14, 14, 12, 13, 15, 15, 14, 13, 13, + 8, 7, 10, 11, 11, 10, 10, 9, 10, 10, 5, 4, 8, 8, 8, 11, 11, 13, 15, + 15, 14, 12, 11, 10, 10, 6, 6, 6, 7, 7, 9, 9, 11, 13, 13, 14, 15, 15, + 14, 15, 15, 12, 12, 11, 9, 8, 9, 11, 12, 12, 11, 14, 14, 13, 12, 9, 10, + 10, 14, 14, 13, 14, 14, 13, 11, 12, 13, 14, 14, 11, 9, 7, 6, 5, 5, 4, + 6, 8, 10, 10, 11, 13, 13, 12, 11, 12, 12, 10, 10, 12, 12, 11, 11, 11, 9, + 10, 14, 15, 15, 14, 14, 13, 14, 14, 12, 13, 14, 14, 5, 5, 6, 6, + /* Low Motion Intra Tables (#191-193) - 133 entries */ + 7, 10, 10, 11, 11, 11, 13, 13, 13, 13, 8, 7, 8, 8, 8, 9, 11, 12, 13, + 13, 12, 13, 13, 13, 13, 12, 9, 9, 8, 7, 9, 11, 12, 12, 12, 12, 11, 8, + 4, 5, 7, 8, 9, 10, 10, 7, 8, 9, 13, 13, 12, 11, 12, 12, 11, 7, 11, + 11, 11, 12, 12, 10, 10, 8, 8, 9, 11, 11, 10, 7, 6, 10, 11, 11, 11, 12, + 12, 10, 9, 10, 12, 12, 11, 7, 2, 6, 7, 7, 5, 5, 8, 10, 10, 11, 11, + 12, 12, 12, 12, 8, 9, 11, 11, 11, 12, 12, 7, 8, 9, 10, 11, 12, 12, 4, + 5, 5, 3, 8, 8, 7, 6, 8, 10, 10, 9, 8, 9, 11, 12, 12, 10, 6, 4, + /* Low Motion Inter Tables (#198-200) - 149 entries */ + 10, 11, 11, 11, 12, 13, 14, 15, 15, 11, 11, 9, 9, 7, 8, 10, 12, 12, 13, + 14, 14, 12, 9, 12, 12, 11, 13, 13, 12, 12, 13, 13, 9, 10, 11, 12, 13, 14, + 14, 10, 10, 6, 7, 9, 10, 12, 13, 15, 15, 14, 11, 8, 6, 7, 10, 12, 12, + 12, 14, 14, 13, 9, 9, 10, 13, 14, 15, 15, 13, 14, 14, 11, 6, 6, 5, 7, + 7, 7, 7, 11, 11, 11, 11, 9, 9, 13, 13, 13, 14, 14, 11, 12, 12, 13, 13, + 12, 7, 6, 5, 4, 4, 5, 6, 9, 9, 8, 7, 5, 6, 9, 10, 10, 8, 8, + 8, 3, 5, 7, 9, 13, 14, 14, 12, 12, 13, 13, 10, 8, 13, 13, 12, 12, 12, + 11, 11, 13, 14, 14, 12, 13, 14, 14, 13, 13, 10, 8, 7, 4, 2, + /* Mid Rate Intra Tables (#205-207) - 103 + 1 entries */ + -9, 11, 11, 11, 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, + 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 7, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 5, 5, 5, 4, 2, 3, 4, 4, + /* Mid Rate Inter Tables (#212-214) - 103 + 1 entries */ + -9, 11, 11, 11, 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, + 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 7, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 5, 5, 5, 4, 2, 3, 4, 4, + /* High Rate Intra Tables (#219-221) - 163 entries */ + 2, 5, 8, 12, 12, 11, 13, 13, 12, 11, 10, 10, 7, 7, 9, 11, 11, 14, 14, + 13, 12, 11, 8, 4, 3, 5, 6, 9, 12, 12, 11, 10, 10, 11, 12, 12, 9, 7, + 4, 6, 6, 10, 10, 9, 8, 12, 12, 11, 11, 12, 12, 9, 9, 10, 10, 8, 8, + 11, 12, 12, 11, 11, 9, 8, 5, 6, 13, 13, 12, 11, 10, 9, 10, 10, 9, 7, + 9, 11, 12, 12, 10, 8, 9, 9, 8, 7, 7, 11, 13, 13, 15, 16, 16, 14, 13, + 10, 10, 11, 12, 13, 13, 8, 7, 11, 11, 10, 9, 8, 7, 4, 5, 6, 12, 12, + 12, 12, 10, 10, 10, 9, 11, 14, 14, 13, 12, 11, 11, 9, 9, 8, 7, 10, 12, + 12, 13, 15, 15, 14, 12, 9, 8, 7, 7, 11, 11, 10, 10, 13, 13, 12, 11, 9, + 11, 13, 13, 12, 10, 8, 9, 11, 11, 10, 6, + /* High Rate Inter Tables (#226-228) - 175 entries */ + 3, 5, 7, 10, 11, 12, 13, 13, 10, 11, 13, 13, 13, 13, 9, 9, 6, 6, 7, + 11, 11, 10, 9, 8, 5, 7, 7, 8, 8, 13, 13, 12, 11, 10, 12, 12, 11, 10, + 8, 6, 6, 5, 9, 10, 11, 14, 18, 21, 22, 22, 20, 19, 17, 16, 15, 13, 12, + 11, 11, 10, 10, 12, 13, 14, 18, 18, 17, 16, 15, 12, 12, 9, 9, 11, 12, 13, + 13, 10, 10, 11, 11, 7, 8, 8, 3, 2, 4, 7, 12, 13, 13, 11, 12, 14, 15, + 15, 13, 11, 11, 12, 12, 11, 12, 12, 9, 9, 6, 5, 7, 8, 13, 18, 20, 21, + 23, 23, 22, 19, 17, 16, 15, 14, 12, 11, 10, 9, 8, 8, 7, 8, 12, 14, 14, + 13, 11, 10, 9, 7, 9, 9, 12, 13, 14, 14, 11, 10, 9, 7, 5, 10, 10, 9, + 12, 13, 13, 12, 13, 13, 10, 10, 11, 13, 17, 18, 20, 20, 20, 20, 16, 15, 15, + 15, 12, 7, 6, +}; + +#define ESCAPE 0 +const uint16_t ff_vc1_ac_coeff_syms[] = { + /* High Motion Intra Tables (#177-179) - 186 entries */ + 0x0201, 0x0601, 0x0404, 0x0604, 0x1201, 0x0806, 0x0323, 0x021A, 0x1802, + 0x0704, 0x0802, 0x0E00, 0x0501, 0x0A01, 0x0306, 0x020D, 0x0A02, 0x0608, + 0x031F, 0x0805, 0x1002, 0x0318, 0x0319, 0x0902, 0x2400, 0x2000, 0x0315, + 0x0307, 0x0202, 0x0801, 0x0209, 0x0402, 0x020C, 0x020E, 0x0507, 0x031C, + 0x1C00, 0x1402, 0x1C01, 0x0410, 0x0901, 0x060C, 0x060F, 0x0903, ESCAPE, + 0x1200, 0x0206, 0x0407, 0x0216, 0x0215, 0x1601, 0x050C, 0x0313, 0x0502, + 0x020F, 0x0E03, 0x1A01, 0x1603, 0x0411, 0x0212, 0x0316, 0x0213, 0x0503, + 0x0405, 0x0C00, 0x0308, 0x030D, 0x1600, 0x1A00, 0x040E, 0x021D, 0x021E, + 0x1E01, 0x0317, 0x040B, 0x040A, 0x0701, 0x0B00, 0x021B, 0x1602, 0x0702, + 0x0309, 0x0204, 0x0605, 0x0312, 0x0607, 0x0E02, 0x040C, 0x0603, 0x020A, + 0x0207, 0x0A00, 0x1001, 0x0A05, 0x0A04, 0x060B, 0x0505, 0x0210, 0x0219, + 0x0217, 0x031E, 0x0322, 0x030E, 0x030F, 0x031D, 0x0508, 0x060A, 0x1E00, + 0x0703, 0x031A, 0x1401, 0x0C04, 0x060E, 0x0807, 0x050A, 0x0218, 0x1202, + 0x0406, 0x040D, 0x0C03, 0x040F, 0x0314, 0x1000, 0x0200, 0x0401, 0x0304, + 0x0500, 0x0804, 0x050B, 0x0808, 0x021C, 0x0A03, 0x0310, 0x0803, 0x0E01, + 0x030A, 0x030B, 0x0409, 0x0900, 0x0506, 0x0325, 0x0B01, 0x0809, 0x0D00, + 0x1400, 0x0800, 0x0203, 0x0400, 0x0302, 0x0602, 0x020B, 0x0305, 0x0301, + 0x0600, 0x0300, 0x0403, 0x0208, 0x0205, 0x050D, 0x0606, 0x0408, 0x0211, + 0x0214, 0x031B, 0x1800, 0x0311, 0x1203, 0x1403, 0x1801, 0x1003, 0x0321, + 0x0504, 0x0700, 0x0C01, 0x0C02, 0x0509, 0x2200, 0x050F, 0x2600, 0x0324, + 0x060D, 0x0609, 0x0320, 0x050E, 0x030C, 0x0303, + /* High Motion Inter Tables (#184-186) - 169 entries */ + 0x0200, 0x0308, 0x020A, 0x0603, 0x020B, 0x0207, 0x0310, 0x0316, 0x0C02, + 0x0901, 0x031F, 0x0804, 0x0507, 0x0602, 0x0403, 0x030B, 0x0318, 0x0608, + 0x0C03, 0x0607, 0x2000, 0x0E03, 0x0B01, 0x050B, 0x0409, 0x040A, 0x031D, + 0x0E02, 0x040B, 0x0404, 0x0202, 0x0400, 0x0201, 0x0800, 0x0501, 0x030C, + 0x1000, 0x0502, 0x030D, 0x0600, 0x0300, 0x0402, 0x020C, 0x0604, 0x0702, + 0x1C00, 0x1400, 0x0D00, 0x2600, 0x1401, 0x0211, 0x0805, 0x1300, 0x2C00, + 0x031E, 0x050A, 0x2200, 0x0209, 0x0601, 0x0313, 0x1800, 0x0214, 0x0312, + 0x0504, 0x0405, 0x0315, 0x0406, 0x0303, 0x0301, 0x030E, 0x0208, 0x0E00, + 0x0323, 0x0319, 0x050E, 0x0903, 0x021A, 0x0705, 0x0508, 0x0803, 0x0900, + 0x0802, 0x0204, 0x0500, 0x0306, 0x0206, 0x030A, 0x0314, ESCAPE, 0x0605, + 0x1201, 0x0322, 0x0902, 0x0706, 0x060B, 0x2800, 0x2E00, 0x0410, 0x1E00, + 0x031C, 0x020F, 0x0503, 0x0801, 0x1200, 0x0506, 0x0509, 0x0215, 0x0408, + 0x0216, 0x1100, 0x0704, 0x0703, 0x030F, 0x1600, 0x0407, 0x0807, 0x0A04, + 0x0609, 0x0321, 0x1601, 0x0320, 0x1A00, 0x1001, 0x2400, 0x0217, 0x0218, + 0x0A02, 0x0A01, 0x0C00, 0x0307, 0x0203, 0x0304, 0x0302, 0x0205, 0x0700, + 0x0505, 0x0C01, 0x031B, 0x040D, 0x050C, 0x050D, 0x0E01, 0x031A, 0x0A03, + 0x0701, 0x020D, 0x0213, 0x0212, 0x0B00, 0x0317, 0x0210, 0x0311, 0x020E, + 0x2A00, 0x1002, 0x040F, 0x0A05, 0x040E, 0x0F00, 0x060A, 0x0219, 0x0606, + 0x040C, 0x0324, 0x0806, 0x0305, 0x0401, 0x0309, 0x0A00, + /* Low Motion Intra Tables (#191-193) - 133 entries */ + 0x0303, 0x0407, 0x0802, 0x0605, 0x0310, 0x040B, 0x0316, 0x2000, 0x031A, + 0x1002, 0x0306, 0x0601, 0x0307, 0x0209, 0x0E00, 0x0A01, 0x0701, 0x1E00, + 0x0901, 0x0806, 0x0804, 0x0214, 0x1601, 0x050C, 0x0A04, 0x060A, 0x020D, + 0x020C, 0x0801, 0x0206, 0x0405, 0x0313, 0x1201, 0x0314, 0x0C03, 0x0317, + 0x1A00, 0x0309, 0x0201, 0x0202, 0x0402, 0x0308, 0x1200, 0x0503, 0x0409, + ESCAPE, 0x030D, 0x0603, 0x0E03, 0x0508, 0x0315, 0x040C, 0x040F, 0x0212, + 0x0210, 0x0C00, 0x0606, 0x1001, 0x050D, 0x0319, 0x060B, 0x020F, 0x020E, + 0x030A, 0x020A, 0x030F, 0x0A02, 0x0A03, 0x0408, 0x0207, 0x0204, 0x1600, + 0x0C02, 0x0312, 0x060D, 0x0E02, 0x0506, 0x0803, 0x0406, 0x040D, 0x1401, + 0x0318, 0x1C00, 0x0304, 0x0200, 0x0A00, 0x0500, 0x0305, 0x0401, 0x0301, + 0x030B, 0x0502, 0x040A, 0x0609, 0x0211, 0x0703, 0x040E, 0x0507, 0x050B, + 0x1000, 0x030E, 0x0505, 0x0900, 0x0504, 0x0805, 0x0608, 0x0403, 0x0602, + 0x1400, 0x0E01, 0x0213, 0x0509, 0x050A, 0x0300, 0x0800, 0x0203, 0x0400, + 0x020B, 0x0404, 0x0208, 0x0302, 0x0501, 0x0604, 0x1800, 0x0700, 0x030C, + 0x0C01, 0x0607, 0x0702, 0x060C, 0x0311, 0x0205, 0x0600, + /* Low Motion Inter Tables (#198-200) - 149 entries */ + 0x0319, 0x0210, 0x0602, 0x0406, 0x0504, 0x0900, 0x050A, 0x050F, 0x0901, + 0x0407, 0x0801, 0x020B, 0x020E, 0x030A, 0x0209, 0x0315, 0x031F, 0x0603, + 0x0218, 0x050E, 0x050D, 0x0212, 0x0314, 0x040C, 0x0213, 0x0214, 0x0507, + 0x0509, 0x1000, 0x0215, 0x0C01, 0x032A, ESCAPE, 0x0502, 0x021B, 0x021A, + 0x040D, 0x0328, 0x0803, 0x0404, 0x0405, 0x0203, 0x0206, 0x020D, 0x0318, + 0x031E, 0x0508, 0x0703, 0x060A, 0x1800, 0x0503, 0x030F, 0x0306, 0x030C, + 0x031A, 0x040A, 0x021C, 0x0A01, 0x0609, 0x0325, 0x040E, 0x0312, 0x031B, + 0x031C, 0x0606, 0x0A02, 0x1C00, 0x1201, 0x0322, 0x1001, 0x0B00, 0x0E00, + 0x0307, 0x0309, 0x0303, 0x030B, 0x030E, 0x030D, 0x0600, 0x0409, 0x0323, + 0x0408, 0x0211, 0x0403, 0x0601, 0x1400, 0x0216, 0x0217, 0x021D, 0x060C, + 0x040B, 0x0506, 0x0219, 0x0329, 0x0607, 0x0802, 0x0207, 0x0308, 0x0202, + 0x0302, 0x0301, 0x0305, 0x0204, 0x0313, 0x020F, 0x0402, 0x0401, 0x0304, + 0x0205, 0x0501, 0x0C00, 0x0317, 0x020A, 0x0310, 0x0800, 0x0200, 0x0400, + 0x0500, 0x0A00, 0x0702, 0x0608, 0x0326, 0x0701, 0x1200, 0x0321, 0x0324, + 0x0700, 0x0311, 0x040F, 0x060B, 0x0320, 0x050C, 0x0605, 0x0505, 0x031D, + 0x0E01, 0x1A00, 0x0804, 0x0604, 0x032B, 0x0327, 0x0805, 0x050B, 0x1600, + 0x0316, 0x020C, 0x0208, 0x0201, 0x0300, + /* Mid Rate Intra Tables (#205-207) - 103 + 1 entries */ + 0, 0x0F00, 0x0D00, 0x2C00, 0x2A00, 0x0502, 0x0701, 0x0B00, 0x020D, + 0x0605, 0x0408, 0x0604, 0x0803, 0x0802, 0x0E01, 0x2800, 0x2600, 0x2E00, + 0x3000, 0x1001, 0x0409, 0x0503, 0x0504, 0x030F, 0x0310, 0x3200, 0x3400, + 0x3600, 0x1201, 0x0606, 0x1401, 0x0A02, 0x0607, 0x020E, 0x1100, 0x0505, + 0x0506, 0x0311, 0x0312, 0x0313, 0x0314, ESCAPE, 0x2400, 0x2200, 0x030E, + 0x030D, 0x030C, 0x030B, 0x030A, 0x0501, 0x0900, 0x020C, 0x020B, 0x0407, + 0x0406, 0x0405, 0x0603, 0x0602, 0x0C01, 0x0A01, 0x2000, 0x0404, 0x1E00, + 0x1C00, 0x1A00, 0x0308, 0x0307, 0x0306, 0x0700, 0x020A, 0x0209, 0x0208, + 0x0309, 0x0403, 0x0801, 0x1800, 0x1600, 0x1400, 0x0304, 0x0303, 0x0206, + 0x0305, 0x0207, 0x0402, 0x0601, 0x1200, 0x0500, 0x0205, 0x0302, 0x0301, + 0x0204, 0x0203, 0x1000, 0x0E00, 0x0401, 0x0C00, 0x0202, 0x0A00, 0x0800, + 0x0300, 0x0200, 0x0400, 0x0201, 0x0600, + /* Mid Rate Inter Tables (#212-214) - 103 + 1 entries */ + 0, 0x0501, 0x0700, 0x1600, 0x1400, 0x031C, 0x031B, 0x031A, 0x0319, + 0x0409, 0x0408, 0x0407, 0x0406, 0x0405, 0x0603, 0x0602, 0x0801, 0x1800, + 0x0A01, 0x0217, 0x0218, 0x031D, 0x031E, 0x031F, 0x0320, 0x0C01, 0x0802, + 0x0604, 0x0605, 0x0606, 0x040A, 0x0219, 0x021A, 0x0321, 0x0322, 0x0323, + 0x0324, 0x0325, 0x0326, 0x0327, 0x0328, ESCAPE, 0x1200, 0x1000, 0x0318, + 0x0317, 0x0316, 0x0315, 0x0314, 0x0313, 0x0312, 0x0311, 0x0500, 0x0216, + 0x0215, 0x0214, 0x0213, 0x0212, 0x0211, 0x0210, 0x020F, 0x0404, 0x0403, + 0x0E00, 0x0C00, 0x0310, 0x030F, 0x030E, 0x030D, 0x030C, 0x030B, 0x030A, + 0x0309, 0x020E, 0x020D, 0x0402, 0x0601, 0x0A00, 0x0308, 0x0307, 0x0306, + 0x0305, 0x020C, 0x020B, 0x020A, 0x0800, 0x0304, 0x0303, 0x0302, 0x0301, + 0x0209, 0x0208, 0x0207, 0x0206, 0x0401, 0x0600, 0x0205, 0x0204, 0x0203, + 0x0300, 0x0200, 0x0201, 0x0202, 0x0400, + /* High Rate Intra Tables (#219-221) - 163 entries */ + 0x0200, 0x0202, 0x0207, 0x6A00, 0x1402, 0x0502, 0x040B, 0x0507, 0x6C00, + 0x030E, 0x4600, 0x1801, 0x0205, 0x1E00, 0x1201, 0x5800, 0x1E01, 0x0509, + 0x0702, 0x0506, 0x0504, 0x0804, 0x2800, 0x0800, 0x0400, 0x0401, 0x1400, + 0x0405, 0x040A, 0x0A04, 0x0408, 0x4400, 0x030B, 0x5600, 0x6800, 0x2601, + 0x3400, 0x1C00, 0x0201, 0x0203, 0x0601, 0x4200, 0x0803, 0x0603, 0x2600, + 0x2401, 0x0607, 0x5400, 0x0700, 0x0805, 0x030F, 0x0500, 0x0306, 0x1601, + 0x0604, 0x0302, 0x0C01, 0x1C01, 0x0503, 0x6600, 0x5200, 0x0A03, 0x3200, + 0x0602, 0x0C00, 0x1200, 0x0A05, 0x0C04, 0x1202, 0x020C, 0x4000, 0x1001, + 0x020A, 0x0309, 0x0802, 0x1A00, 0x0208, 0x5000, 0x6400, 0x6200, 0x3E00, + 0x2400, 0x0305, 0x3000, 0x0403, 0x0801, 0x0402, 0x0E02, 0x0505, 0x0608, + 0x040D, 0x050E, 0x050C, 0x040C, 0x0701, 0x0406, 0x030A, 0x0605, 0x6000, + 0x0806, 0x0900, 0x0206, 0x0204, 0x030D, 0x4E00, 0x3C00, 0x2E00, 0x2200, + 0x1800, 0x0600, 0x0A00, 0x1000, 0x2201, 0x0409, 0x020D, 0x0C03, 0x1401, + 0x0308, 0x0A02, 0x0404, 0x4C00, 0x0508, 0x050A, 0x7000, 0x5E00, 0x1A01, + 0x4A00, 0x0304, 0x2C00, 0x2000, 0x0300, 0x3A00, 0x5C00, 0x2001, 0x2801, + 0x050D, 0x050B, 0x0609, 0x5A00, 0x0E01, 0x0A01, ESCAPE, 0x1600, 0x4800, + 0x020B, 0x3800, 0x0209, 0x0310, 0x6E00, 0x1002, 0x030C, 0x2A00, 0x0407, + 0x020E, 0x0E03, 0x0606, 0x0307, 0x0301, 0x0303, 0x0501, 0x0C02, 0x3600, + 0x0E00, + /* High Rate Inter Tables (#226-228) - 175 entries */ + 0x0400, 0x0800, 0x0306, 0x0313, 0x1201, 0x3400, 0x0900, 0x0505, 0x020F, + 0x2800, 0x1002, 0x4000, 0x1A01, 0x0218, 0x020D, 0x1800, 0x0302, 0x0206, + 0x0E00, 0x0212, 0x0318, 0x0312, 0x0500, 0x0309, 0x0204, 0x0208, 0x0305, + 0x0602, 0x020A, 0x3E00, 0x031E, 0x0216, 0x0317, 0x0501, 0x3200, 0x031C, + 0x0502, 0x0311, 0x1200, 0x0A00, 0x0301, 0x0401, 0x030E, 0x1E00, 0x2600, + 0x0806, 0x0412, 0x0516, 0x051B, 0x051A, 0x0515, 0x0513, 0x050E, 0x050C, + 0x0509, 0x3C00, 0x0409, 0x0211, 0x0803, 0x0406, 0x0E01, 0x0605, 0x040A, + 0x040C, 0x050F, 0x0413, 0x0410, 0x050A, 0x0609, 0x3000, 0x1401, 0x030D, + 0x1600, 0x0604, 0x031B, 0x0701, 0x0217, 0x1C00, 0x0310, 0x0316, 0x0210, + 0x0304, 0x0308, 0x1000, 0x0201, 0x0200, 0x0202, 0x0207, 0x2E00, 0x031D, + 0x3A00, 0x2400, 0x0503, 0x0A04, 0x040D, 0x050B, 0x1801, 0x0407, 0x1001, + 0x0215, 0x0319, 0x0315, 0x2C00, 0x031A, 0x030C, 0x020C, 0x0205, 0x0203, + 0x0C00, 0x0403, 0x3800, 0x0411, 0x0514, 0x0517, 0x051C, 0x0518, 0x0519, + 0x0414, 0x040F, 0x040E, 0x0508, 0x0805, 0x0C02, 0x2200, 0x020E, 0x030B, + 0x0307, 0x0801, ESCAPE, 0x0209, 0x0700, 0x0506, 0x0607, 0x0606, 0x0314, + 0x0603, 0x1400, 0x0303, 0x0404, 0x0A01, 0x0214, 0x3600, 0x040B, 0x0C03, + 0x0A02, 0x1A00, 0x030A, 0x0601, 0x0600, 0x0802, 0x0405, 0x020B, 0x0408, + 0x0504, 0x0A03, 0x2A00, 0x0E02, 0x0804, 0x0C01, 0x030F, 0x2000, 0x1601, + 0x050D, 0x0510, 0x0415, 0x0511, 0x0416, 0x0512, 0x0703, 0x0702, 0x0608, + 0x0507, 0x0213, 0x0402, 0x0300, +}; +#undef ESCAPE diff --git a/libavcodec/vc1data.h b/libavcodec/vc1data.h index e83385b5c6..04cc9a22bf 100644 --- a/libavcodec/vc1data.h +++ b/libavcodec/vc1data.h @@ -201,5 +201,10 @@ extern const uint16_t ff_vc1_b_field_mvpred_scales[7][4]; #define AC_MODES 8 extern const int ff_vc1_ac_sizes[AC_MODES]; +/* Symbol == 0 belongs to the escape code; + * otherwise run is contained in bits 0x3F, level in 0x7E + * and 0x100 indicates whether this is the last code. */ +extern const uint16_t ff_vc1_ac_coeff_syms[]; +extern const uint8_t ff_vc1_ac_coeff_lens[]; #endif /* AVCODEC_VC1DATA_H */