]> git.sesse.net Git - ffmpeg/blob - libavcodec/rv40vlc2.h
drawtext: simplify chroma blend and fix chroma alpha.
[ffmpeg] / libavcodec / rv40vlc2.h
1 /*
2  * RealVideo 4 decoder
3  * copyright (c) 2007 Konstantin Shishkov
4  *
5  * This file is part of Libav.
6  *
7  * Libav is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * Libav is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with Libav; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21
22 /**
23  * @file
24  * RV40 VLC tables used for macroblock information decoding
25  */
26
27 #ifndef AVCODEC_RV40VLC2_H
28 #define AVCODEC_RV40VLC2_H
29
30 #include <stdint.h>
31
32 /**
33  * codes used for the first four block types
34  */
35 //@{
36 #define AIC_TOP_BITS  8
37 #define AIC_TOP_SIZE 16
38 static const uint8_t rv40_aic_top_vlc_codes[AIC_TOP_SIZE] = {
39  0x01, 0x05, 0x01, 0x00, 0x03, 0x3D, 0x1D, 0x02,
40  0x04, 0x3C, 0x3F, 0x1C, 0x0D, 0x3E, 0x0C, 0x01
41 };
42
43 static const uint8_t rv40_aic_top_vlc_bits[AIC_TOP_SIZE] = {
44  1, 4, 5, 5, 5, 7, 6, 5, 4, 7, 7, 6, 5, 7, 5, 3
45 };
46 //@}
47
48 /**
49  * codes used for determining a pair of block types
50  */
51 //@{
52 #define AIC_MODE2_NUM  20
53 #define AIC_MODE2_SIZE 81
54 #define AIC_MODE2_BITS  9
55
56 static const uint16_t aic_mode2_vlc_codes[AIC_MODE2_NUM][AIC_MODE2_SIZE] = {
57 { 0x0001, 0x0001, 0x0005, 0x01F5, 0x0011, 0x0049, 0x0000, 0x0048, 0x004B,
58   0x0035, 0x0003, 0x0034, 0x03C9, 0x01F4, 0x00C9, 0x004A, 0x0FD9, 0x03C8,
59   0x0010, 0x0037, 0x0001, 0x00C8, 0x0075, 0x01F7, 0x00CB, 0x0074, 0x0002,
60   0x01F6, 0x00CA, 0x01F1, 0x01F0, 0x1F81, 0x07F9, 0x1F80, 0x1F83, 0x07F8,
61   0x0077, 0x00F5, 0x0036, 0x07FB, 0x0076, 0x1F82, 0x00F4, 0x00F7, 0x07FA,
62   0x0071, 0x00F6, 0x03CB, 0x03CA, 0x0FD8, 0x00F1, 0x03F5, 0x1F8D, 0x07E5,
63   0x0013, 0x0031, 0x00F0, 0x0FDB, 0x00F3, 0x07E4, 0x0030, 0x01F3, 0x07E7,
64   0x03F4, 0x07E6, 0x0070, 0x3F19, 0x01F2, 0x3F18, 0x0FDA, 0x0033, 0x07E1,
65   0x01FD, 0x01FC, 0x0073, 0x01FF, 0x0FC5, 0x0FC4, 0x0FC7, 0x03F7, 0x0072, },
66 { 0x0005, 0x0005, 0x0005, 0x0079, 0x0005, 0x000D, 0x001D, 0x0078, 0x0069,
67   0x0004, 0x0001, 0x0007, 0x0068, 0x001C, 0x001F, 0x0004, 0x006B, 0x000C,
68   0x0004, 0x001E, 0x0006, 0x006A, 0x0015, 0x000F, 0x0014, 0x0017, 0x0007,
69   0x0016, 0x000E, 0x0011, 0x0009, 0x00D1, 0x00D0, 0x0181, 0x00D3, 0x007B,
70   0x0010, 0x0013, 0x0004, 0x00D2, 0x0007, 0x0319, 0x0008, 0x007A, 0x00DD,
71   0x0019, 0x0006, 0x000B, 0x0065, 0x00DC, 0x0012, 0x0064, 0x0180, 0x00DF,
72   0x0006, 0x0018, 0x0001, 0x00DE, 0x001D, 0x00D9, 0x001B, 0x0067, 0x000A,
73   0x00D8, 0x00DB, 0x001C, 0x0318, 0x00DA, 0x0635, 0x0183, 0x0000, 0x00C5,
74   0x0066, 0x0061, 0x0035, 0x00C4, 0x0182, 0x0634, 0x031B, 0x00C7, 0x001F, },
75 { 0x0005, 0x0001, 0x001D, 0x01C1, 0x0035, 0x00F1, 0x006D, 0x00F0, 0x0049,
76   0x0000, 0x0004, 0x0003, 0x00F3, 0x0048, 0x0034, 0x006C, 0x01C0, 0x01C3,
77   0x0007, 0x0006, 0x0001, 0x006F, 0x0002, 0x004B, 0x006E, 0x001C, 0x0005,
78   0x0069, 0x0068, 0x006B, 0x0037, 0x01C2, 0x00F2, 0x0395, 0x01CD, 0x00FD,
79   0x006A, 0x0036, 0x0015, 0x01CC, 0x0014, 0x0394, 0x004A, 0x00FC, 0x00FF,
80   0x0017, 0x0031, 0x00FE, 0x01CF, 0x0397, 0x00F9, 0x01CE, 0x0725, 0x0396,
81   0x0016, 0x0030, 0x0075, 0x0724, 0x00F8, 0x0727, 0x0033, 0x0391, 0x0390,
82   0x0011, 0x0032, 0x001F, 0x00FB, 0x0074, 0x0726, 0x00FA, 0x001E, 0x0077,
83   0x0019, 0x0018, 0x0004, 0x0010, 0x003D, 0x0076, 0x0071, 0x0013, 0x0001, },
84 { 0x000D, 0x0019, 0x0011, 0x0015, 0x0061, 0x0019, 0x0014, 0x01AD, 0x0060,
85   0x0018, 0x0001, 0x0005, 0x001B, 0x0010, 0x0019, 0x0005, 0x0017, 0x0018,
86   0x0016, 0x0004, 0x0004, 0x0013, 0x000C, 0x0012, 0x001A, 0x0018, 0x0005,
87   0x000F, 0x001B, 0x0004, 0x001D, 0x0011, 0x001C, 0x0010, 0x000E, 0x001B,
88   0x0013, 0x001F, 0x001A, 0x0029, 0x0005, 0x0063, 0x001E, 0x0009, 0x0062,
89   0x0008, 0x0007, 0x0007, 0x0019, 0x0004, 0x001A, 0x0018, 0x006D, 0x0007,
90   0x001B, 0x0007, 0x001A, 0x006C, 0x0006, 0x0012, 0x0005, 0x006F, 0x000B,
91   0x006E, 0x0069, 0x001D, 0x0359, 0x0028, 0x002B, 0x002A, 0x001C, 0x00D5,
92   0x0358, 0x001F, 0x0001, 0x001E, 0x0068, 0x00D4, 0x00D7, 0x0019, 0x0000, },
93 { 0x00B9, 0x0061, 0x0060, 0x00B8, 0x02B5, 0x01AD, 0x00BB, 0x0AF5, 0x0151,
94   0x0001, 0x0001, 0x0005, 0x0000, 0x0003, 0x0005, 0x0004, 0x0063, 0x0025,
95   0x00BA, 0x0004, 0x0007, 0x0062, 0x00A5, 0x0024, 0x006D, 0x0002, 0x006C,
96   0x02B4, 0x000D, 0x006F, 0x0027, 0x00A4, 0x0026, 0x01AC, 0x0150, 0x01AF,
97   0x01AE, 0x0021, 0x006E, 0x02B7, 0x0020, 0x0153, 0x0023, 0x00A7, 0x0152,
98   0x00A6, 0x0006, 0x000C, 0x0022, 0x01A9, 0x0019, 0x002D, 0x02B6, 0x01A8,
99   0x000F, 0x0007, 0x000E, 0x00A1, 0x0069, 0x002C, 0x0001, 0x01AB, 0x00A0,
100   0x02B1, 0x00A3, 0x002F, 0x0AF4, 0x02B0, 0x0AF7, 0x02B3, 0x0068, 0x015D,
101   0x0AF6, 0x01AA, 0x0055, 0x015C, 0x02B2, 0x0579, 0x0578, 0x015F, 0x00A2, },
102 { 0x0905, 0x013D, 0x013C, 0x0904, 0x121D, 0x049D, 0x049C, 0x243D, 0x0907,
103   0x00ED, 0x0001, 0x0015, 0x0041, 0x013F, 0x0031, 0x0014, 0x025D, 0x025C,
104   0x013E, 0x000D, 0x0000, 0x0040, 0x0139, 0x0043, 0x0030, 0x0017, 0x0033,
105   0x0906, 0x0032, 0x0042, 0x00EC, 0x025F, 0x00EF, 0x025E, 0x049F, 0x0138,
106   0x0901, 0x013B, 0x0259, 0x121C, 0x049E, 0x0900, 0x0258, 0x243C, 0x121F,
107   0x0903, 0x003D, 0x00EE, 0x025B, 0x025A, 0x004D, 0x013A, 0x0902, 0x0245,
108   0x00E9, 0x0016, 0x00E8, 0x0499, 0x0125, 0x0244, 0x004C, 0x0498, 0x090D,
109   0x00EB, 0x003C, 0x0011, 0x049B, 0x049A, 0x0485, 0x00EA, 0x003F, 0x0124,
110   0x090C, 0x003E, 0x0039, 0x0095, 0x0247, 0x0246, 0x0484, 0x0094, 0x0038, },
111 { 0x0F09, 0x00CD, 0x01FD, 0x0791, 0x1E6D, 0x0790, 0x03D9, 0x3CD1, 0x3CD0,
112   0x0075, 0x0001, 0x0001, 0x0035, 0x00CC, 0x0011, 0x0000, 0x03D8, 0x01FC,
113   0x03DB, 0x0010, 0x0003, 0x00CF, 0x03DA, 0x00CE, 0x0074, 0x0034, 0x0077,
114   0x0793, 0x0013, 0x0076, 0x0071, 0x03C5, 0x0070, 0x01FF, 0x0792, 0x01FE,
115   0x01F9, 0x0037, 0x00C9, 0x0F08, 0x01F8, 0x03C4, 0x00C8, 0x0F0B, 0x079D,
116   0x03C7, 0x0001, 0x0012, 0x0073, 0x00CB, 0x0005, 0x0036, 0x03C6, 0x0072,
117   0x007D, 0x0002, 0x00CA, 0x079C, 0x01FB, 0x00F5, 0x0031, 0x079F, 0x0F0A,
118   0x0F35, 0x079E, 0x01FA, 0x1E6C, 0x1E6F, 0x3CD3, 0x0799, 0x03C1, 0x1E6E,
119   0x3CD2, 0x0030, 0x00F4, 0x007C, 0x03C0, 0x03C3, 0x0798, 0x01E5, 0x00F7, },
120 { 0x01A5, 0x0001, 0x001D, 0x0021, 0x00A1, 0x000D, 0x0061, 0x06B9, 0x00A0,
121   0x0060, 0x0001, 0x0005, 0x000C, 0x0020, 0x001C, 0x0004, 0x01A4, 0x01A7,
122   0x00A3, 0x001F, 0x001E, 0x0023, 0x0022, 0x002D, 0x002C, 0x0063, 0x0062,
123   0x1A81, 0x01A6, 0x01A1, 0x06B8, 0x06BB, 0x00A2, 0x06BA, 0x0D59, 0x06A5,
124   0x01A0, 0x000F, 0x006D, 0x06A4, 0x002F, 0x00AD, 0x006C, 0x06A7, 0x00AC,
125   0x0D58, 0x000E, 0x01A3, 0x00AF, 0x00AE, 0x006F, 0x01A2, 0x0D5B, 0x00A9,
126   0x0019, 0x0001, 0x0009, 0x00A8, 0x006E, 0x002E, 0x0000, 0x01AD, 0x00AB,
127   0x00AA, 0x0355, 0x0029, 0x1A80, 0x1A83, 0x1A82, 0x0354, 0x01AC, 0x0D5A,
128   0x1A8D, 0x01AF, 0x0357, 0x0D45, 0x0D44, 0x0D47, 0x1A8C, 0x06A6, 0x06A1, },
129 { 0x0001, 0x0011, 0x0005, 0x0775, 0x00F9, 0x00F8, 0x0031, 0x0030, 0x0049,
130   0x00FB, 0x0010, 0x0033, 0x0EC9, 0x038D, 0x038C, 0x00FA, 0x038F, 0x0774,
131   0x0048, 0x0032, 0x0000, 0x01D5, 0x00E5, 0x038E, 0x00E4, 0x0013, 0x000D,
132   0x0389, 0x0777, 0x0388, 0x038B, 0x1DF9, 0x0EC8, 0x3BC9, 0x1DF8, 0x038A,
133   0x03B5, 0x0776, 0x00E7, 0x3BC8, 0x01D4, 0x3BCB, 0x0ECB, 0x0771, 0x0ECA,
134   0x01D7, 0x03B4, 0x01D6, 0x1DFB, 0x0EF5, 0x0770, 0x0EF4, 0x3BCA, 0x0773,
135   0x00E6, 0x03B7, 0x004B, 0x1DFA, 0x03B6, 0x0EF7, 0x00E1, 0x0EF6, 0x0EF1,
136   0x03B1, 0x01D1, 0x003D, 0x0EF0, 0x0772, 0x077D, 0x077C, 0x003C, 0x01D0,
137   0x03B0, 0x01D3, 0x003F, 0x03B3, 0x01D2, 0x0EF3, 0x077F, 0x00E0, 0x004A, },
138 { 0x0015, 0x0049, 0x0014, 0x07D1, 0x03FD, 0x03FC, 0x01C1, 0x01C0, 0x00F1,
139   0x0017, 0x0001, 0x0001, 0x01C3, 0x0048, 0x004B, 0x0016, 0x0031, 0x01C2,
140   0x004A, 0x0011, 0x0000, 0x01CD, 0x00F0, 0x01CC, 0x0075, 0x0010, 0x000D,
141   0x03FF, 0x01CF, 0x01CE, 0x07D0, 0x0F81, 0x07D3, 0x1F1D, 0x0F80, 0x07D2,
142   0x01C9, 0x03FE, 0x0074, 0x07DD, 0x00F3, 0x1F1C, 0x07DC, 0x03F9, 0x07DF,
143   0x00F2, 0x00FD, 0x0077, 0x07DE, 0x07D9, 0x01C8, 0x07D8, 0x0F83, 0x03F8,
144   0x0030, 0x0076, 0x0013, 0x0F82, 0x00FC, 0x03FB, 0x0033, 0x03FA, 0x03E5,
145   0x03E4, 0x01CB, 0x0032, 0x1F1F, 0x03E7, 0x07DB, 0x07DA, 0x003D, 0x01CA,
146   0x07C5, 0x03E6, 0x0071, 0x0F8D, 0x07C4, 0x1F1E, 0x0F8C, 0x03E1, 0x01F5, },
147 { 0x0019, 0x0065, 0x0018, 0x0351, 0x0350, 0x0353, 0x0021, 0x0020, 0x0064,
148   0x001D, 0x0005, 0x0005, 0x01A5, 0x0023, 0x0067, 0x0005, 0x0066, 0x0022,
149   0x001B, 0x0004, 0x0001, 0x0004, 0x001C, 0x0061, 0x001A, 0x0005, 0x0004,
150   0x0007, 0x002D, 0x0006, 0x002C, 0x01A4, 0x002F, 0x0352, 0x035D, 0x0060,
151   0x0001, 0x002E, 0x001F, 0x035C, 0x0000, 0x06B1, 0x01A7, 0x0029, 0x01A6,
152   0x0028, 0x0063, 0x0062, 0x035F, 0x01A1, 0x002B, 0x06B0, 0x06B3, 0x01A0,
153   0x0003, 0x006D, 0x001E, 0x035E, 0x006C, 0x06B2, 0x0002, 0x01A3, 0x01A2,
154   0x000D, 0x0005, 0x0007, 0x01AD, 0x006F, 0x002A, 0x006E, 0x0004, 0x0004,
155   0x000C, 0x0007, 0x0006, 0x000F, 0x000E, 0x00D5, 0x0009, 0x0006, 0x0007, },
156 { 0x0065, 0x0181, 0x0064, 0x36C9, 0x06D5, 0x0DB5, 0x0379, 0x0180, 0x0183,
157   0x00D5, 0x001D, 0x001C, 0x0DB4, 0x0182, 0x0378, 0x00D4, 0x00D7, 0x06D4,
158   0x0067, 0x001F, 0x0001, 0x00D6, 0x00D1, 0x018D, 0x0066, 0x0001, 0x0000,
159   0x037B, 0x06D7, 0x037A, 0x0DB7, 0x36C8, 0x06D6, 0x0DB6, 0x1B79, 0x0DB1,
160   0x018C, 0x0365, 0x00D0, 0x1B78, 0x00D3, 0x1B7B, 0x0364, 0x06D1, 0x06D0,
161   0x018F, 0x018E, 0x00D2, 0x36CB, 0x0367, 0x0366, 0x06D3, 0x0DB0, 0x06D2,
162   0x0361, 0x06DD, 0x0189, 0x36CA, 0x0360, 0x36F5, 0x0188, 0x0DB3, 0x36F4,
163   0x0009, 0x0008, 0x0005, 0x06DC, 0x00DD, 0x018B, 0x00DC, 0x0004, 0x000B,
164   0x018A, 0x0061, 0x0003, 0x0363, 0x00DF, 0x06DF, 0x0362, 0x000A, 0x001E, },
165 { 0x001D, 0x0061, 0x000D, 0x0D55, 0x06B9, 0x06B8, 0x01A5, 0x0021, 0x0020,
166   0x0023, 0x000C, 0x0060, 0x0D54, 0x00AD, 0x00AC, 0x0022, 0x00AF, 0x06BB,
167   0x000F, 0x001C, 0x0001, 0x002D, 0x0063, 0x01A4, 0x000E, 0x0001, 0x0005,
168   0x01A7, 0x06BA, 0x01A6, 0x06A5, 0x0D57, 0x0D56, 0x1ABD, 0x0D51, 0x00AE,
169   0x002C, 0x00A9, 0x002F, 0x0D50, 0x01A1, 0x1ABC, 0x06A4, 0x06A7, 0x06A6,
170   0x00A8, 0x06A1, 0x01A0, 0x1ABF, 0x0D53, 0x06A0, 0x0D52, 0x1ABE, 0x06A3,
171   0x0062, 0x002E, 0x0009, 0x0D5D, 0x01A3, 0x0D5C, 0x006D, 0x00AB, 0x06A2,
172   0x006C, 0x001F, 0x0001, 0x06AD, 0x0029, 0x01A2, 0x0028, 0x0004, 0x001E,
173   0x01AD, 0x006F, 0x0000, 0x01AC, 0x01AF, 0x06AC, 0x00AA, 0x006E, 0x0019, },
174 { 0x0019, 0x007D, 0x0018, 0x01B5, 0x000D, 0x01B4, 0x007C, 0x007F, 0x01B7,
175   0x000C, 0x001B, 0x001A, 0x01B6, 0x000F, 0x00D5, 0x0019, 0x007E, 0x00D4,
176   0x0018, 0x001B, 0x0001, 0x000E, 0x0011, 0x0009, 0x0005, 0x0005, 0x0005,
177   0x00D7, 0x01B1, 0x0008, 0x01B0, 0x0079, 0x06FD, 0x0371, 0x0370, 0x00D6,
178   0x0078, 0x01B3, 0x0010, 0x0373, 0x0013, 0x06FC, 0x007B, 0x007A, 0x00D1,
179   0x00D0, 0x00D3, 0x0065, 0x0372, 0x06FF, 0x0064, 0x06FE, 0x037D, 0x00D2,
180   0x00DD, 0x0067, 0x0004, 0x037C, 0x0012, 0x01B2, 0x0007, 0x0066, 0x01BD,
181   0x0006, 0x0061, 0x0004, 0x01BC, 0x001A, 0x0060, 0x001D, 0x0004, 0x001C,
182   0x0063, 0x0001, 0x0007, 0x000B, 0x0000, 0x0062, 0x000A, 0x0005, 0x0007, },
183 { 0x0069, 0x0045, 0x0068, 0x04BD, 0x0255, 0x04BC, 0x00E5, 0x00E4, 0x0031,
184   0x0030, 0x0019, 0x0001, 0x0121, 0x00E7, 0x00E6, 0x0033, 0x00E1, 0x00E0,
185   0x006B, 0x0018, 0x0001, 0x0044, 0x0032, 0x0047, 0x006A, 0x001B, 0x0005,
186   0x003D, 0x0046, 0x0015, 0x0041, 0x0120, 0x0123, 0x04BF, 0x0122, 0x0040,
187   0x003C, 0x00E3, 0x0014, 0x0254, 0x0043, 0x0975, 0x012D, 0x00E2, 0x00ED,
188   0x0042, 0x00EC, 0x004D, 0x0257, 0x0256, 0x0251, 0x04BE, 0x0974, 0x0250,
189   0x00EF, 0x00EE, 0x004C, 0x04B9, 0x012C, 0x04B8, 0x004F, 0x04BB, 0x0253,
190   0x003F, 0x0017, 0x0001, 0x0252, 0x00E9, 0x00E8, 0x00EB, 0x0000, 0x0003,
191   0x0016, 0x0002, 0x0004, 0x004E, 0x003E, 0x00EA, 0x0049, 0x000D, 0x0007, },
192 { 0x000D, 0x01BD, 0x000C, 0x0D31, 0x0D30, 0x0D33, 0x0359, 0x0358, 0x002D,
193   0x0065, 0x001D, 0x001C, 0x0D32, 0x035B, 0x035A, 0x002C, 0x01BC, 0x0345,
194   0x000F, 0x001F, 0x0001, 0x002F, 0x0064, 0x01BF, 0x0067, 0x0001, 0x0005,
195   0x0066, 0x002E, 0x0061, 0x0029, 0x0695, 0x0694, 0x0697, 0x0696, 0x0060,
196   0x01BE, 0x0D3D, 0x0028, 0x1A49, 0x0344, 0x1A48, 0x1A4B, 0x0D3C, 0x0691,
197   0x002B, 0x01B9, 0x002A, 0x0D3F, 0x0690, 0x0347, 0x0D3E, 0x1A4A, 0x0346,
198   0x00D5, 0x0341, 0x0063, 0x0D39, 0x0340, 0x0D38, 0x01B8, 0x0D3B, 0x0D3A,
199   0x00D4, 0x0062, 0x0000, 0x0693, 0x01BB, 0x0343, 0x0342, 0x001E, 0x000E,
200   0x006D, 0x0009, 0x0001, 0x006C, 0x00D7, 0x034D, 0x01BA, 0x0008, 0x0004, },
201 { 0x0075, 0x00CD, 0x0035, 0x03C1, 0x03C0, 0x07F9, 0x03C3, 0x1F8D, 0x00CC,
202   0x0074, 0x0011, 0x0010, 0x03C2, 0x0FD9, 0x01F1, 0x00CF, 0x03CD, 0x00CE,
203   0x0034, 0x0001, 0x0001, 0x0037, 0x00C9, 0x00C8, 0x0036, 0x0000, 0x0001,
204   0x0FD8, 0x03CC, 0x00CB, 0x01F0, 0x07F8, 0x03CF, 0x07FB, 0x07FA, 0x00CA,
205   0x01F3, 0x03CE, 0x00F5, 0x0FDB, 0x00F4, 0x07E5, 0x07E4, 0x07E7, 0x01F2,
206   0x07E6, 0x03C9, 0x01FD, 0x0FDA, 0x1F8C, 0x07E1, 0x1F8F, 0x1F8E, 0x03C8,
207   0x03CB, 0x0077, 0x0076, 0x0FC5, 0x03CA, 0x07E0, 0x00F7, 0x0FC4, 0x03F5,
208   0x00F6, 0x01FC, 0x0003, 0x03F4, 0x0071, 0x03F7, 0x00F1, 0x0013, 0x0031,
209   0x0030, 0x0070, 0x0005, 0x0012, 0x0073, 0x01FF, 0x0072, 0x007D, 0x0002, },
210 { 0x0061, 0x0055, 0x0060, 0x02C9, 0x02C8, 0x02CB, 0x0171, 0x00B5, 0x0054,
211   0x0001, 0x0001, 0x0001, 0x0057, 0x0001, 0x0063, 0x001D, 0x0062, 0x0039,
212   0x006D, 0x0000, 0x0005, 0x0038, 0x0056, 0x00B4, 0x006C, 0x0003, 0x001C,
213   0x006F, 0x003B, 0x0002, 0x003A, 0x0170, 0x00B7, 0x0173, 0x0051, 0x006E,
214   0x0025, 0x0050, 0x0069, 0x02CA, 0x0024, 0x0027, 0x0172, 0x00B6, 0x00B1,
215   0x000D, 0x000C, 0x001F, 0x017D, 0x0026, 0x0068, 0x0053, 0x017C, 0x006B,
216   0x001E, 0x000F, 0x0004, 0x017F, 0x006A, 0x02F5, 0x0019, 0x0021, 0x0052,
217   0x02F4, 0x02F7, 0x0020, 0x0BCD, 0x05E5, 0x05E4, 0x0BCC, 0x0023, 0x00B0,
218   0x02F6, 0x00B3, 0x0022, 0x02F1, 0x02F0, 0x0BCF, 0x0BCE, 0x017E, 0x005D, },
219 { 0x00BD, 0x0025, 0x01A1, 0x0159, 0x0299, 0x00BC, 0x0024, 0x0505, 0x0504,
220   0x01A0, 0x0001, 0x001D, 0x006D, 0x001C, 0x0001, 0x0005, 0x0027, 0x01A3,
221   0x0158, 0x001F, 0x001E, 0x01A2, 0x0026, 0x0021, 0x000D, 0x0020, 0x0023,
222   0x0298, 0x006C, 0x0022, 0x00BF, 0x00BE, 0x01AD, 0x002D, 0x029B, 0x00B9,
223   0x01AC, 0x00B8, 0x01AF, 0x029A, 0x006F, 0x015B, 0x006E, 0x0285, 0x0284,
224   0x01AE, 0x0019, 0x002C, 0x01A9, 0x01A8, 0x000C, 0x000F, 0x015A, 0x00BB,
225   0x000E, 0x0000, 0x0069, 0x01AB, 0x0018, 0x01AA, 0x0004, 0x0055, 0x00BA,
226   0x0507, 0x0145, 0x0054, 0x0506, 0x00A5, 0x0501, 0x00A4, 0x0057, 0x0500,
227   0x0A05, 0x0144, 0x00A7, 0x0287, 0x0286, 0x0503, 0x0147, 0x0A04, 0x0146, },
228 { 0x0759, 0x0041, 0x00E5, 0x03BD, 0x0E9D, 0x012D, 0x012C, 0x3A1D, 0x03BC,
229   0x012F, 0x000D, 0x0040, 0x00E4, 0x03BF, 0x0043, 0x0042, 0x0758, 0x03BE,
230   0x00E7, 0x0001, 0x0000, 0x003D, 0x00E6, 0x0015, 0x0014, 0x0017, 0x003C,
231   0x743D, 0x012E, 0x03B9, 0x03B8, 0x0E9C, 0x03BB, 0x075B, 0x3A1C, 0x0E9F,
232   0x0129, 0x00E1, 0x0128, 0x0E9E, 0x012B, 0x075A, 0x00E0, 0x0E99, 0x0745,
233   0x3A1F, 0x03BA, 0x0744, 0x0E98, 0x1D0D, 0x03A5, 0x0E9B, 0x743C, 0x0E9A,
234   0x012A, 0x004D, 0x00E3, 0x0E85, 0x01D5, 0x0E84, 0x004C, 0x0747, 0x1D0C,
235   0x01D4, 0x003F, 0x0016, 0x0746, 0x03A4, 0x0741, 0x004F, 0x003E, 0x01D7,
236   0x0740, 0x000C, 0x0011, 0x004E, 0x00E2, 0x00ED, 0x00EC, 0x0049, 0x0048, },
237 };
238
239 static const uint8_t aic_mode2_vlc_bits[AIC_MODE2_NUM][AIC_MODE2_SIZE] = {
240 {  1,  5,  4, 10,  6,  8,  5,  8,  8,
241    7,  5,  7, 11, 10,  9,  8, 13, 11,
242    6,  7,  3,  9,  8, 10,  9,  8,  5,
243   10,  9, 10, 10, 14, 12, 14, 14, 12,
244    8,  9,  7, 12,  8, 14,  9,  9, 12,
245    8,  9, 11, 11, 13,  9, 11, 14, 12,
246    6,  7,  9, 13,  9, 12,  7, 10, 12,
247   11, 12,  8, 15, 10, 15, 13,  7, 12,
248   10, 10,  8, 10, 13, 13, 13, 11,  8, },
249 {  4,  6,  5, 11,  8, 10,  7, 11,  9,
250    4,  1,  4,  9,  7,  7,  5,  9, 10,
251    6,  7,  4,  9,  9, 10,  9,  9,  6,
252    9, 10,  9, 10, 12, 12, 13, 12, 11,
253    9,  9,  8, 12,  8, 14, 10, 11, 12,
254    7,  8, 10, 11, 12,  9, 11, 13, 12,
255    6,  7,  8, 12,  9, 12,  7, 11, 10,
256   12, 12,  9, 14, 12, 15, 13,  8, 12,
257   11, 11, 10, 12, 13, 15, 14, 12,  9, },
258 {  5,  7,  6, 12,  9, 11,  8, 11, 10,
259    7,  5,  7, 11, 10,  9,  8, 12, 12,
260    5,  5,  1,  8,  7, 10,  8,  6,  4,
261    8,  8,  8,  9, 12, 11, 13, 12, 11,
262    8,  9,  8, 12,  8, 13, 10, 11, 11,
263    8,  9, 11, 12, 13, 11, 12, 14, 13,
264    8,  9, 10, 14, 11, 14,  9, 13, 13,
265    8,  9,  6, 11, 10, 14, 11,  6, 10,
266    6,  6,  4,  8,  9, 10, 10,  8,  5, },
267 { 11,  7,  8, 10, 12,  9, 10, 14, 12,
268    7,  1,  5,  7,  8,  6,  4, 10,  9,
269   10,  5,  4,  8, 11,  8,  7,  6,  7,
270   11,  6,  7,  8, 10,  8, 10, 11,  9,
271   10,  8,  9, 13,  9, 12,  8, 11, 12,
272   11,  4,  7,  8,  9,  6,  8, 12,  9,
273    8,  5,  8, 12,  9, 10,  6, 12, 11,
274   12, 12, 10, 15, 13, 13, 13, 10, 13,
275   15, 10,  9, 10, 12, 13, 13, 10,  9, },
276 { 11,  8,  8, 11, 13, 10, 11, 15, 12,
277    7,  1,  4,  7,  7,  5,  4,  8,  9,
278   11,  5,  5,  8, 11,  9,  8,  7,  8,
279   13,  7,  8,  9, 11,  9, 10, 12, 10,
280   10,  9,  8, 13,  9, 12,  9, 11, 12,
281   11,  5,  7,  9, 10,  6,  9, 13, 10,
282    7,  4,  7, 11,  8,  9,  5, 10, 11,
283   13, 11,  9, 15, 13, 15, 13,  8, 12,
284   15, 10, 10, 12, 13, 14, 14, 12, 11, },
285 { 12,  9,  9, 12, 13, 11, 11, 14, 12,
286    8,  2,  5,  7,  9,  6,  5, 10, 10,
287    9,  4,  2,  7,  9,  7,  6,  5,  6,
288   12,  6,  7,  8, 10,  8, 10, 11,  9,
289   12,  9, 10, 13, 11, 12, 10, 14, 13,
290   12,  6,  8, 10, 10,  7,  9, 12, 10,
291    8,  5,  8, 11,  9, 10,  7, 11, 12,
292    8,  6,  5, 11, 11, 11,  8,  6,  9,
293   12,  6,  6,  8, 10, 10, 11,  8,  6, },
294 { 13,  9, 10, 12, 14, 12, 11, 15, 15,
295    8,  1,  5,  7,  9,  6,  5, 11, 10,
296   11,  6,  5,  9, 11,  9,  8,  7,  8,
297   12,  6,  8,  8, 11,  8, 10, 12, 10,
298   10,  7,  9, 13, 10, 11,  9, 13, 12,
299   11,  3,  6,  8,  9,  4,  7, 11,  8,
300    8,  5,  9, 12, 10,  9,  7, 12, 13,
301   13, 12, 10, 14, 14, 15, 12, 11, 14,
302   15,  7,  9,  8, 11, 11, 12, 10,  9, },
303 { 10,  5,  6,  9, 11,  7,  8, 12, 11,
304    8,  1,  4,  7,  9,  6,  4, 10, 10,
305   11,  6,  6,  9,  9,  9,  9,  8,  8,
306   14, 10, 10, 12, 12, 11, 12, 13, 12,
307   10,  7,  8, 12,  9, 11,  8, 12, 11,
308   13,  7, 10, 11, 11,  8, 10, 13, 11,
309    6,  3,  7, 11,  8,  9,  5, 10, 11,
310   11, 11,  9, 14, 14, 14, 11, 10, 13,
311   14, 10, 11, 13, 13, 13, 14, 12, 12, },
312 {  2,  5,  3, 11,  8,  8,  6,  6,  7,
313    8,  5,  6, 12, 10, 10,  8, 10, 11,
314    7,  6,  2,  9,  8, 10,  8,  5,  4,
315   10, 11, 10, 10, 13, 12, 14, 13, 10,
316   10, 11,  8, 14,  9, 14, 12, 11, 12,
317    9, 10,  9, 13, 12, 11, 12, 14, 11,
318    8, 10,  7, 13, 10, 12,  8, 12, 12,
319   10,  9,  6, 12, 11, 11, 11,  6,  9,
320   10,  9,  6, 10,  9, 12, 11,  8,  7, },
321 {  6,  8,  6, 12, 11, 11, 10, 10,  9,
322    6,  1,  3, 10,  8,  8,  6,  7, 10,
323    8,  6,  3, 10,  9, 10,  8,  6,  5,
324   11, 10, 10, 12, 13, 12, 14, 13, 12,
325   10, 11,  8, 12,  9, 14, 12, 11, 12,
326    9,  9,  8, 12, 12, 10, 12, 13, 11,
327    7,  8,  6, 13,  9, 11,  7, 11, 11,
328   11, 10,  7, 14, 11, 12, 12,  7, 10,
329   12, 11,  8, 13, 12, 14, 13, 11, 10, },
330 {  7, 10,  7, 13, 13, 13, 11, 11, 10,
331    8,  5,  6, 12, 11, 10,  9, 10, 11,
332    7,  5,  1,  9,  8, 10,  7,  4,  4,
333    9, 11,  9, 11, 12, 11, 13, 13, 10,
334    9, 11,  8, 13,  9, 14, 12, 11, 12,
335   11, 10, 10, 13, 12, 11, 14, 14, 12,
336    9, 10,  8, 13, 10, 14,  9, 12, 12,
337    9,  7,  4, 12, 10, 11, 10,  6,  7,
338    9,  7,  4,  9,  9, 11,  9,  7,  5, },
339 {  7,  9,  7, 14, 11, 12, 10,  9,  9,
340    8,  5,  5, 12,  9, 10,  8,  8, 11,
341    7,  5,  2,  8,  8,  9,  7,  4,  4,
342   10, 11, 10, 12, 14, 11, 12, 13, 12,
343    9, 10,  8, 13,  8, 13, 10, 11, 11,
344    9,  9,  8, 14, 10, 10, 11, 12, 11,
345   10, 11,  9, 14, 10, 14,  9, 12, 14,
346    6,  6,  3, 11,  8,  9,  8,  3,  6,
347    9,  7,  4, 10,  8, 11, 10,  6,  5, },
348 {  6,  8,  7, 13, 12, 12, 10,  9,  9,
349    9,  7,  8, 13, 11, 11,  9, 11, 12,
350    7,  6,  1,  9,  8, 10,  7,  5,  4,
351   10, 12, 10, 12, 13, 13, 14, 13, 11,
352    9, 11,  9, 13, 10, 14, 12, 12, 12,
353   11, 12, 10, 14, 13, 12, 13, 14, 12,
354    8,  9,  7, 13, 10, 13,  8, 11, 12,
355    8,  6,  3, 12,  9, 10,  9,  4,  6,
356   10,  8,  5, 10, 10, 12, 11,  8,  6, },
357 {  7, 10,  7, 12,  9, 12, 10, 10, 12,
358    9,  7,  7, 12,  9, 11,  6, 10, 11,
359    6,  6,  1,  9,  8,  9,  7,  4,  5,
360   11, 12,  9, 12, 10, 14, 13, 13, 11,
361   10, 12,  8, 13,  8, 14, 10, 10, 11,
362   11, 11, 10, 13, 14, 10, 14, 13, 11,
363   11, 10,  7, 13,  8, 12,  7, 10, 12,
364    7, 10,  4, 12,  6, 10,  8,  5,  8,
365   10,  7,  4,  9,  7, 10,  9,  6,  5, },
366 {  7,  9,  7, 13, 12, 13, 10, 10,  8,
367    8,  5,  6, 11, 10, 10,  8, 10, 10,
368    7,  5,  2,  9,  8,  9,  7,  5,  3,
369    8,  9,  7,  9, 11, 11, 13, 11,  9,
370    8, 10,  7, 12,  9, 14, 11, 10, 10,
371    9, 10,  9, 12, 12, 12, 13, 14, 12,
372   10, 10,  9, 13, 11, 13,  9, 13, 12,
373    8,  7,  4, 12, 10, 10, 10,  6,  6,
374    7,  6,  3,  9,  8, 10,  9,  6,  3, },
375 {  7, 10,  7, 13, 13, 13, 11, 11,  9,
376    8,  6,  6, 13, 11, 11,  9, 10, 11,
377    7,  6,  1,  9,  8, 10,  8,  5,  4,
378    8,  9,  8,  9, 12, 12, 12, 12,  8,
379   10, 13,  9, 14, 11, 14, 14, 13, 12,
380    9, 10,  9, 13, 12, 11, 13, 14, 11,
381    9, 11,  8, 13, 11, 13, 10, 13, 13,
382    9,  8,  5, 12, 10, 11, 11,  6,  7,
383    8,  7,  3,  8,  9, 11, 10,  7,  4, },
384 {  8,  9,  7, 11, 11, 12, 11, 14,  9,
385    8,  6,  6, 11, 13, 10,  9, 11,  9,
386    7,  5,  1,  7,  9,  9,  7,  5,  3,
387   13, 11,  9, 10, 12, 11, 12, 12,  9,
388   10, 11,  9, 13,  9, 12, 12, 12, 10,
389   12, 11, 10, 13, 14, 12, 14, 14, 11,
390   11,  8,  8, 13, 11, 12,  9, 13, 11,
391    9, 10,  5, 11,  8, 11,  9,  6,  7,
392    7,  8,  4,  6,  8, 10,  8,  8,  5, },
393 {  8, 10,  8, 13, 13, 13, 12, 11, 10,
394    5,  1,  3, 10,  7,  8,  6,  8,  9,
395    8,  7,  4,  9, 10, 11,  8,  7,  6,
396    8,  9,  7,  9, 12, 11, 12, 10,  8,
397    9, 10,  8, 13,  9,  9, 12, 11, 11,
398    7,  7,  6, 12,  9,  8, 10, 12,  8,
399    6,  7,  4, 12,  8, 13,  6,  9, 10,
400   13, 13,  9, 15, 14, 14, 15,  9, 11,
401   13, 11,  9, 13, 13, 15, 15, 12, 10, },
402 { 10,  8,  9, 11, 12, 10,  8, 13, 13,
403    9,  2,  5,  7,  5,  4,  3,  8,  9,
404   11,  5,  5,  9,  8,  8,  6,  8,  8,
405   12,  7,  8, 10, 10,  9,  8, 12, 10,
406    9, 10,  9, 12,  7, 11,  7, 12, 12,
407    9,  5,  8,  9,  9,  6,  6, 11, 10,
408    6,  4,  7,  9,  5,  9,  3,  9, 10,
409   13, 11,  9, 13, 10, 13, 10,  9, 13,
410   14, 11, 10, 12, 12, 13, 11, 14, 11, },
411 { 11,  7,  8, 10, 12,  9,  9, 14, 10,
412    9,  4,  7,  8, 10,  7,  7, 11, 10,
413    8,  2,  2,  6,  8,  5,  5,  5,  6,
414   15,  9, 10, 10, 12, 10, 11, 14, 12,
415    9,  8,  9, 12,  9, 11,  8, 12, 11,
416   14, 10, 11, 12, 13, 10, 12, 15, 12,
417    9,  7,  8, 12,  9, 12,  7, 11, 13,
418    9,  6,  5, 11, 10, 11,  7,  6,  9,
419   11,  4,  5,  7,  8,  8,  8,  7,  7, },
420 };
421 //@}
422
423 /**
424  * Codes used for determining block type
425  */
426 //@{
427 #define AIC_MODE1_NUM  90
428 #define AIC_MODE1_SIZE  9
429 #define AIC_MODE1_BITS  7
430
431 static const uint8_t aic_mode1_vlc_codes[AIC_MODE1_NUM][AIC_MODE1_SIZE] = {
432  { 0x01, 0x01, 0x01, 0x11, 0x00, 0x09, 0x03, 0x10, 0x05,},
433  { 0x09, 0x01, 0x01, 0x05, 0x11, 0x00, 0x03, 0x21, 0x20,},
434  { 0x01, 0x01, 0x01, 0x11, 0x09, 0x10, 0x05, 0x00, 0x03,},
435  { 0x01, 0x01, 0x00, 0x03, 0x21, 0x05, 0x09, 0x20, 0x11,},
436  { 0x01, 0x09, 0x00, 0x29, 0x08, 0x15, 0x03, 0x0B, 0x28,},
437  { 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x03, 0x02,},
438  { 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x01, 0x09, 0x08,},
439  { 0x01, 0x01, 0x01, 0x09, 0x01, 0x08, 0x00, 0x03, 0x05,},
440  { 0x01, 0x01, 0x01, 0x00, 0x05, 0x11, 0x09, 0x10, 0x03,},
441  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,},
442
443  { 0x01, 0x01, 0x01, 0x05, 0x01, 0x00, 0x03, 0x09, 0x08,},
444  { 0x09, 0x01, 0x01, 0x05, 0x11, 0x00, 0x03, 0x21, 0x20,},
445  { 0x01, 0x01, 0x01, 0x0D, 0x05, 0x04, 0x00, 0x07, 0x0C,},
446  { 0x01, 0x01, 0x00, 0x05, 0x11, 0x03, 0x09, 0x21, 0x20,},
447  { 0x05, 0x01, 0x01, 0x11, 0x00, 0x09, 0x03, 0x21, 0x20,},
448  { 0x09, 0x01, 0x01, 0x00, 0x05, 0x01, 0x03, 0x11, 0x10,},
449  { 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x03, 0x02,},
450  { 0x01, 0x01, 0x01, 0x09, 0x00, 0x05, 0x01, 0x03, 0x08,},
451  { 0x01, 0x01, 0x01, 0x09, 0x11, 0x05, 0x00, 0x10, 0x03,},
452  { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,},
453
454  { 0x01, 0x00, 0x01, 0x09, 0x08, 0x15, 0x14, 0x0B, 0x03,},
455  { 0x0D, 0x01, 0x01, 0x05, 0x0C, 0x04, 0x01, 0x00, 0x07,},
456  { 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x03, 0x01, 0x01,},
457  { 0x05, 0x01, 0x01, 0x04, 0x19, 0x07, 0x18, 0x0D, 0x00,},
458  { 0x11, 0x09, 0x01, 0x21, 0x05, 0x20, 0x01, 0x00, 0x03,},
459  { 0x41, 0x01, 0x00, 0x05, 0x40, 0x03, 0x09, 0x21, 0x11,},
460  { 0x29, 0x01, 0x00, 0x28, 0x09, 0x15, 0x03, 0x08, 0x0B,},
461  { 0x01, 0x00, 0x01, 0x11, 0x09, 0x10, 0x05, 0x01, 0x03,},
462  { 0x05, 0x01, 0x01, 0x04, 0x0D, 0x0C, 0x07, 0x00, 0x01,},
463  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,},
464
465  { 0x01, 0x00, 0x03, 0x05, 0x11, 0x10, 0x25, 0x24, 0x13,},
466  { 0x21, 0x01, 0x01, 0x00, 0x11, 0x03, 0x05, 0x20, 0x09,},
467  { 0x01, 0x01, 0x01, 0x00, 0x09, 0x11, 0x10, 0x05, 0x03,},
468  { 0x21, 0x05, 0x01, 0x01, 0x09, 0x00, 0x11, 0x20, 0x03,},
469  { 0x05, 0x01, 0x00, 0x04, 0x01, 0x19, 0x07, 0x18, 0x0D,},
470  { 0x11, 0x01, 0x00, 0x01, 0x09, 0x01, 0x03, 0x10, 0x05,},
471  { 0x1D, 0x01, 0x05, 0x0D, 0x0C, 0x04, 0x00, 0x1C, 0x0F,},
472  { 0x05, 0x19, 0x01, 0x04, 0x00, 0x18, 0x1B, 0x1A, 0x07,},
473  { 0x09, 0x01, 0x00, 0x01, 0x05, 0x03, 0x11, 0x10, 0x01,},
474  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,},
475
476  { 0x01, 0x00, 0x03, 0x41, 0x05, 0x40, 0x09, 0x11, 0x21,},
477  { 0x05, 0x01, 0x01, 0x19, 0x04, 0x07, 0x00, 0x18, 0x0D,},
478  { 0x01, 0x01, 0x01, 0x05, 0x01, 0x04, 0x01, 0x00, 0x03,},
479  { 0x01, 0x05, 0x00, 0x0D, 0x01, 0x04, 0x07, 0x19, 0x18,},
480  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x03, 0x02,},
481  { 0x31, 0x01, 0x05, 0x19, 0x04, 0x07, 0x00, 0x30, 0x0D,},
482  { 0x01, 0x00, 0x03, 0x11, 0x01, 0x05, 0x01, 0x09, 0x10,},
483  { 0x01, 0x05, 0x01, 0x11, 0x01, 0x10, 0x00, 0x03, 0x09,},
484  { 0x01, 0x09, 0x00, 0x29, 0x03, 0x08, 0x28, 0x15, 0x0B,},
485  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,},
486
487  { 0x01, 0x01, 0x00, 0x09, 0x15, 0x03, 0x08, 0x14, 0x0B,},
488  { 0x11, 0x01, 0x01, 0x00, 0x09, 0x01, 0x03, 0x10, 0x05,},
489  { 0x01, 0x00, 0x03, 0x25, 0x11, 0x05, 0x10, 0x24, 0x13,},
490  { 0x11, 0x01, 0x00, 0x01, 0x09, 0x01, 0x05, 0x10, 0x03,},
491  { 0x05, 0x01, 0x00, 0x0D, 0x0C, 0x04, 0x0F, 0x1D, 0x1C,},
492  { 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x03, 0x02,},
493  { 0x21, 0x01, 0x05, 0x09, 0x11, 0x00, 0x03, 0x41, 0x40,},
494  { 0x05, 0x01, 0x00, 0x1D, 0x1C, 0x0D, 0x0C, 0x0F, 0x04,},
495  { 0x05, 0x01, 0x00, 0x0D, 0x31, 0x04, 0x19, 0x30, 0x07,},
496  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,},
497
498  { 0x01, 0x01, 0x00, 0x21, 0x05, 0x11, 0x03, 0x09, 0x20,},
499  { 0x01, 0x01, 0x00, 0x11, 0x03, 0x05, 0x01, 0x09, 0x10,},
500  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x03, 0x02,},
501  { 0x05, 0x01, 0x04, 0x19, 0x07, 0x0D, 0x00, 0x31, 0x30,},
502  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x03, 0x02,},
503  { 0x05, 0x01, 0x01, 0x11, 0x09, 0x00, 0x03, 0x21, 0x20,},
504  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x03, 0x02,},
505  { 0x01, 0x01, 0x01, 0x00, 0x01, 0x03, 0x01, 0x01, 0x02,},
506  { 0x09, 0x01, 0x00, 0x29, 0x08, 0x15, 0x03, 0x28, 0x0B,},
507  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,},
508
509  { 0x01, 0x01, 0x01, 0x05, 0x01, 0x04, 0x00, 0x01, 0x03,},
510  { 0x09, 0x01, 0x00, 0x29, 0x28, 0x15, 0x08, 0x03, 0x0B,},
511  { 0x01, 0x00, 0x01, 0x11, 0x05, 0x10, 0x09, 0x01, 0x03,},
512  { 0x05, 0x04, 0x01, 0x1D, 0x0D, 0x0C, 0x1C, 0x00, 0x0F,},
513  { 0x09, 0x11, 0x01, 0x41, 0x00, 0x40, 0x05, 0x03, 0x21,},
514  { 0x0D, 0x05, 0x01, 0x1D, 0x1C, 0x0C, 0x04, 0x00, 0x0F,},
515  { 0x41, 0x09, 0x01, 0x40, 0x00, 0x11, 0x05, 0x03, 0x21,},
516  { 0x01, 0x01, 0x01, 0x05, 0x01, 0x04, 0x00, 0x01, 0x03,},
517  { 0x05, 0x04, 0x01, 0x0D, 0x01, 0x0C, 0x07, 0x01, 0x00,},
518  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,},
519
520  { 0x05, 0x04, 0x01, 0x07, 0x19, 0x31, 0x30, 0x0D, 0x00,},
521  { 0x21, 0x01, 0x01, 0x00, 0x11, 0x09, 0x20, 0x05, 0x03,},
522  { 0x05, 0x01, 0x01, 0x04, 0x07, 0x0D, 0x0C, 0x00, 0x01,},
523  { 0x21, 0x09, 0x01, 0x00, 0x20, 0x05, 0x23, 0x22, 0x03,},
524  { 0x31, 0x0D, 0x01, 0x19, 0x05, 0x30, 0x04, 0x07, 0x00,},
525  { 0x31, 0x05, 0x01, 0x04, 0x19, 0x00, 0x0D, 0x30, 0x07,},
526  { 0x31, 0x01, 0x00, 0x0D, 0x05, 0x19, 0x04, 0x30, 0x07,},
527  { 0x01, 0x01, 0x01, 0x00, 0x01, 0x03, 0x02, 0x01, 0x01,},
528  { 0x01, 0x00, 0x01, 0x01, 0x05, 0x09, 0x08, 0x03, 0x01,},
529  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,},
530 };
531
532 static const uint8_t aic_mode1_vlc_bits[AIC_MODE1_NUM][AIC_MODE1_SIZE] = {
533  {  1,  4,  2,  7,  4,  6,  4,  7,  5,},
534  {  5,  1,  3,  4,  6,  3,  3,  7,  7,},
535  {  1,  4,  2,  7,  6,  7,  5,  4,  4,},
536  {  1,  3,  3,  3,  7,  4,  5,  7,  6,},
537  {  2,  4,  2,  6,  4,  5,  2,  4,  6,},
538  {  7,  2,  3,  4,  7,  1,  5,  7,  7,},
539  {  5,  1,  3,  6,  5,  5,  2,  7,  7,},
540  {  2,  5,  1,  7,  3,  7,  5,  5,  6,},
541  {  2,  4,  1,  4,  5,  7,  6,  7,  4,},
542  {  0,  0,  0,  0,  0,  0,  0,  0,  0,},
543
544  {  2,  1,  3,  6,  5,  5,  5,  7,  7,},
545  {  5,  1,  3,  4,  6,  3,  3,  7,  7,},
546  {  4,  1,  2,  6,  5,  5,  4,  5,  6,},
547  {  3,  1,  3,  4,  6,  3,  5,  7,  7,},
548  {  4,  1,  3,  6,  3,  5,  3,  7,  7,},
549  {  6,  1,  4,  4,  5,  2,  4,  7,  7,},
550  {  7,  1,  5,  7,  4,  3,  2,  7,  7,},
551  {  5,  3,  2,  7,  5,  6,  1,  5,  7,},
552  {  4,  1,  2,  6,  7,  5,  4,  7,  4,},
553  {  1,  0,  1,  0,  0,  0,  0,  0,  0,},
554
555  {  3,  3,  1,  5,  5,  6,  6,  5,  3,},
556  {  6,  2,  1,  5,  6,  5,  4,  4,  5,},
557  {  6,  4,  1,  7,  6,  7,  6,  3,  2,},
558  {  4,  3,  1,  4,  6,  4,  6,  5,  3,},
559  {  6,  5,  1,  7,  4,  7,  3,  3,  3,},
560  {  7,  2,  2,  3,  7,  2,  4,  6,  5,},
561  {  6,  2,  2,  6,  4,  5,  2,  4,  4,},
562  {  4,  4,  1,  7,  6,  7,  5,  2,  4,},
563  {  5,  4,  1,  5,  6,  6,  5,  4,  2,},
564  {  0,  0,  0,  0,  0,  0,  0,  0,  0,},
565
566  {  2,  2,  2,  3,  5,  5,  6,  6,  5,},
567  {  7,  1,  3,  3,  6,  3,  4,  7,  5,},
568  {  2,  4,  1,  4,  6,  7,  7,  5,  4,},
569  {  7,  4,  3,  1,  5,  3,  6,  7,  3,},
570  {  4,  3,  3,  4,  1,  6,  4,  6,  5,},
571  {  7,  4,  4,  2,  6,  1,  4,  7,  5,},
572  {  5,  2,  3,  4,  4,  3,  2,  5,  4,},
573  {  3,  5,  2,  3,  2,  5,  5,  5,  3,},
574  {  6,  4,  4,  2,  5,  4,  7,  7,  1,},
575  {  0,  0,  0,  0,  0,  0,  0,  0,  0,},
576
577  {  2,  2,  2,  7,  3,  7,  4,  5,  6,},
578  {  4,  1,  3,  6,  4,  4,  3,  6,  5,},
579  {  2,  4,  1,  7,  3,  7,  6,  6,  6,},
580  {  3,  4,  3,  5,  1,  4,  4,  6,  6,},
581  {  4,  5,  2,  7,  1,  7,  3,  7,  7,},
582  {  6,  2,  3,  5,  3,  3,  2,  6,  4,},
583  {  4,  4,  4,  7,  2,  5,  1,  6,  7,},
584  {  4,  5,  2,  7,  1,  7,  4,  4,  6,},
585  {  2,  4,  2,  6,  2,  4,  6,  5,  4,},
586  {  0,  0,  0,  0,  0,  0,  0,  0,  0,},
587
588  {  1,  3,  3,  5,  6,  3,  5,  6,  5,},
589  {  7,  1,  4,  4,  6,  2,  4,  7,  5,},
590  {  2,  2,  2,  6,  5,  3,  5,  6,  5,},
591  {  7,  4,  4,  2,  6,  1,  5,  7,  4,},
592  {  3,  2,  2,  4,  4,  3,  4,  5,  5,},
593  {  7,  2,  5,  3,  7,  1,  4,  7,  7,},
594  {  6,  2,  3,  4,  5,  2,  2,  7,  7,},
595  {  3,  2,  2,  5,  5,  4,  4,  4,  3,},
596  {  3,  2,  2,  4,  6,  3,  5,  6,  3,},
597  {  0,  0,  0,  0,  0,  0,  0,  0,  0,},
598
599  {  1,  3,  3,  7,  4,  6,  3,  5,  7,},
600  {  4,  1,  4,  7,  4,  5,  2,  6,  7,},
601  {  2,  4,  1,  7,  5,  7,  3,  7,  7,},
602  {  3,  2,  3,  5,  3,  4,  2,  6,  6,},
603  {  3,  5,  4,  7,  2,  7,  1,  7,  7,},
604  {  4,  1,  3,  6,  5,  3,  3,  7,  7,},
605  {  4,  2,  5,  7,  3,  7,  1,  7,  7,},
606  {  7,  4,  1,  7,  3,  7,  2,  5,  7,},
607  {  4,  2,  2,  6,  4,  5,  2,  6,  4,},
608  {  0,  0,  0,  0,  0,  0,  0,  0,  0,},
609
610  {  3,  4,  1,  7,  6,  7,  6,  2,  6,},
611  {  4,  2,  2,  6,  6,  5,  4,  2,  4,},
612  {  4,  4,  1,  7,  5,  7,  6,  2,  4,},
613  {  3,  3,  2,  5,  4,  4,  5,  2,  4,},
614  {  4,  5,  2,  7,  2,  7,  3,  2,  6,},
615  {  4,  3,  2,  5,  5,  4,  3,  2,  4,},
616  {  7,  4,  2,  7,  2,  5,  3,  2,  6,},
617  {  4,  6,  2,  7,  3,  7,  6,  1,  6,},
618  {  5,  5,  1,  6,  4,  6,  5,  2,  4,},
619  {  0,  0,  0,  0,  0,  0,  0,  0,  0,},
620
621  {  3,  3,  2,  3,  5,  6,  6,  4,  2,},
622  {  7,  1,  3,  3,  6,  5,  7,  4,  3,},
623  {  5,  4,  1,  5,  5,  6,  6,  4,  2,},
624  {  6,  4,  2,  2,  6,  3,  6,  6,  2,},
625  {  6,  4,  2,  5,  3,  6,  3,  3,  2,},
626  {  6,  3,  2,  3,  5,  2,  4,  6,  3,},
627  {  6,  2,  2,  4,  3,  5,  3,  6,  3,},
628  {  7,  5,  1,  7,  4,  7,  7,  3,  2,},
629  {  5,  5,  2,  3,  6,  7,  7,  5,  1,},
630  {  0,  0,  0,  0,  0,  0,  0,  0,  0,},
631 };
632
633 //@}
634
635 #define PBTYPE_ESCAPE 0xFF
636
637 /** tables used for P-frame macroblock type decoding */
638 //@{
639 #define NUM_PTYPE_VLCS 7
640 #define PTYPE_VLC_SIZE 8
641 #define PTYPE_VLC_BITS 7
642
643 static const uint8_t ptype_vlc_codes[NUM_PTYPE_VLCS][PTYPE_VLC_SIZE] = {
644  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00 },
645  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00 },
646  { 0x0D, 0x05, 0x01, 0x04, 0x01, 0x00, 0x07, 0x0C },
647  { 0x09, 0x11, 0x01, 0x00, 0x05, 0x03, 0x21, 0x20 },
648  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00 },
649  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00 },
650  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00 }
651 };
652
653 static const uint8_t ptype_vlc_bits[NUM_PTYPE_VLCS][PTYPE_VLC_SIZE] = {
654  { 1, 2, 3, 6, 5, 4, 7, 7 },
655  { 3, 1, 2, 7, 6, 5, 4, 7 },
656  { 5, 4, 1, 4, 3, 3, 4, 5 },
657  { 4, 5, 2, 2, 3, 2, 6, 6 },
658  { 5, 6, 1, 4, 2, 3, 7, 7 },
659  { 5, 6, 1, 4, 3, 2, 7, 7 },
660  { 6, 3, 2, 7, 5, 4, 1, 7 }
661 };
662
663 static const uint8_t ptype_vlc_syms[PTYPE_VLC_SIZE] = {
664  0, 1, 2, 3, 8, 9, 11, PBTYPE_ESCAPE
665 };
666
667 /** reverse of ptype_vlc_syms */
668 static const uint8_t block_num_to_ptype_vlc_num[12] = {
669  0, 1, 2, 3, 0, 0, 2, 0, 4, 5, 0, 6
670 };
671 //@}
672
673 /** tables used for P-frame macroblock type decoding */
674 //@{
675 #define NUM_BTYPE_VLCS 6
676 #define BTYPE_VLC_SIZE 7
677 #define BTYPE_VLC_BITS 6
678
679 static const uint8_t btype_vlc_codes[NUM_BTYPE_VLCS][BTYPE_VLC_SIZE] = {
680  { 0x01, 0x05, 0x00, 0x03, 0x11, 0x09, 0x10 },
681  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00 },
682  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00 },
683  { 0x09, 0x01, 0x00, 0x01, 0x05, 0x03, 0x08 },
684  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00 },
685  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00 }
686 };
687
688 static const uint8_t btype_vlc_bits[NUM_BTYPE_VLCS][PTYPE_VLC_SIZE] = {
689  { 2, 3, 2, 2, 5, 4, 5 },
690  { 4, 1, 3, 2, 6, 5, 6 },
691  { 6, 4, 1, 2, 5, 3, 6 },
692  { 5, 3, 3, 1, 4, 3, 5 },
693  { 6, 5, 3, 2, 4, 1, 6 },
694  { 6, 5, 3, 1, 4, 2, 6 }
695 };
696
697 static const uint8_t btype_vlc_syms[BTYPE_VLC_SIZE] = {
698  0, 1, 4, 5, 10, 7, PBTYPE_ESCAPE
699 };
700
701 /** reverse of btype_vlc_syms */
702 static const uint8_t block_num_to_btype_vlc_num[12] = {
703  0, 1, 0, 0, 2, 3, 0, 5, 0, 0, 4, 0
704 };
705 //@}
706 #endif /* AVCODEC_RV40VLC2_H */