]> git.sesse.net Git - ffmpeg/blob - libavcodec/rv40vlc2.h
avcodec/rv40: Make the tables used to initialize VLCs smaller
[ffmpeg] / libavcodec / rv40vlc2.h
1 /*
2  * RealVideo 4 decoder
3  * copyright (c) 2007 Konstantin Shishkov
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg 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  * FFmpeg 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 FFmpeg; 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  7
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 uint8_t aic_mode2_vlc_syms[AIC_MODE2_NUM][AIC_MODE2_SIZE] = {
57     {
58         0x06, 0x01, 0x1A, 0x0A, 0x14, 0x12, 0x04, 0x07, 0x05, 0x0F, 0x08, 0x36,
59         0x02, 0x3C, 0x37, 0x15, 0x0E, 0x1C, 0x18, 0x46, 0x0B, 0x09, 0x26, 0x13,
60         0x41, 0x2D, 0x50, 0x4A, 0x19, 0x16, 0x28, 0x24, 0x38, 0x32, 0x11, 0x0C,
61         0x30, 0x2F, 0x3A, 0x2A, 0x25, 0x2E, 0x2B, 0x1E, 0x1D, 0x43, 0x3D, 0x0D,
62         0x03, 0x1B, 0x17, 0x21, 0x1F, 0x29, 0x22, 0x47, 0x4D, 0x4C, 0x44, 0x42,
63         0x34, 0x4E, 0x3B, 0x35, 0x40, 0x3E, 0x3F, 0x33, 0x31, 0x10, 0x45, 0x39,
64         0x4F, 0x49, 0x48, 0x23, 0x20, 0x2C, 0x27, 0x4B, 0x00,
65     },
66     {
67         0x46, 0x38, 0x2A, 0x1E, 0x3E, 0x2F, 0x11, 0x05, 0x1C, 0x17, 0x26, 0x04,
68         0x2E, 0x28, 0x24, 0x1D, 0x32, 0x25, 0x18, 0x16, 0x1B, 0x19, 0x34, 0x21,
69         0x4C, 0x45, 0x49, 0x4B, 0x47, 0x42, 0x29, 0x4D, 0x44, 0x4E, 0x4F, 0x33,
70         0x30, 0x48, 0x3D, 0x20, 0x1F, 0x27, 0x22, 0x4A, 0x3F, 0x3B, 0x43, 0x40,
71         0x31, 0x2C, 0x39, 0x35, 0x41, 0x3A, 0x07, 0x03, 0x2B, 0x23, 0x50, 0x12,
72         0x01, 0x36, 0x1A, 0x0F, 0x02, 0x37, 0x2D, 0x0C, 0x08, 0x15, 0x10, 0x3C,
73         0x0D, 0x06, 0x13, 0x0E, 0x09, 0x00, 0x14, 0x0B, 0x0A,
74     },
75     {
76         0x09, 0x01, 0x16, 0x0B, 0x50, 0x4B, 0x3F, 0x0D, 0x08, 0x2A, 0x17, 0x4F,
77         0x28, 0x26, 0x36, 0x2D, 0x37, 0x2E, 0x40, 0x3C, 0x0E, 0x04, 0x25, 0x1E,
78         0x10, 0x03, 0x1F, 0x11, 0x4E, 0x3E, 0x3D, 0x39, 0x34, 0x44, 0x3B, 0x29,
79         0x21, 0x35, 0x31, 0x27, 0x22, 0x33, 0x30, 0x43, 0x38, 0x4D, 0x47, 0x07,
80         0x05, 0x20, 0x0C, 0x4C, 0x3A, 0x32, 0x45, 0x42, 0x2B, 0x23, 0x2F, 0x2C,
81         0x0A, 0x00, 0x13, 0x12, 0x4A, 0x1A, 0x49, 0x48, 0x1C, 0x1B, 0x24, 0x1D,
82         0x0F, 0x06, 0x18, 0x15, 0x19, 0x02, 0x46, 0x41, 0x14,
83     },
84     {
85         0x50, 0x4A, 0x2D, 0x2B, 0x43, 0x27, 0x45, 0x44, 0x3E, 0x16, 0x00, 0x22,
86         0x1B, 0x31, 0x28, 0x3A, 0x35, 0x21, 0x1F, 0x3B, 0x24, 0x06, 0x03, 0x12,
87         0x10, 0x08, 0x04, 0x2C, 0x29, 0x4F, 0x4C, 0x40, 0x4D, 0x47, 0x48, 0x42,
88         0x07, 0x4E, 0x39, 0x34, 0x3F, 0x3D, 0x46, 0x41, 0x4B, 0x49, 0x1D, 0x1A,
89         0x11, 0x05, 0x26, 0x23, 0x2F, 0x0D, 0x02, 0x17, 0x15, 0x3C, 0x33, 0x30,
90         0x38, 0x36, 0x20, 0x1E, 0x2A, 0x25, 0x13, 0x0B, 0x09, 0x01, 0x18, 0x0C,
91         0x37, 0x14, 0x0F, 0x19, 0x0E, 0x32, 0x1C, 0x2E, 0x0A,
92     },
93     {
94         0x0C, 0x09, 0x19, 0x0D, 0x3C, 0x28, 0x25, 0x30, 0x2A, 0x17, 0x11, 0x20,
95         0x1E, 0x3E, 0x39, 0x50, 0x40, 0x1F, 0x16, 0x2D, 0x2B, 0x22, 0x08, 0x2C,
96         0x29, 0x4A, 0x43, 0x3F, 0x4C, 0x45, 0x1B, 0x04, 0x34, 0x27, 0x4B, 0x47,
97         0x4E, 0x4D, 0x42, 0x07, 0x48, 0x44, 0x4F, 0x3B, 0x33, 0x03, 0x00, 0x12,
98         0x06, 0x41, 0x2F, 0x1C, 0x38, 0x36, 0x13, 0x0E, 0x2E, 0x14, 0x0F, 0x0B,
99         0x02, 0x01, 0x15, 0x10, 0x32, 0x46, 0x3A, 0x35, 0x31, 0x49, 0x3D, 0x21,
100         0x05, 0x24, 0x23, 0x1A, 0x18, 0x26, 0x1D, 0x37, 0x0A,
101     },
102     {
103         0x14, 0x0A, 0x15, 0x0C, 0x1D, 0x17, 0x41, 0x29, 0x24, 0x34, 0x2D, 0x03,
104         0x00, 0x1B, 0x08, 0x4E, 0x44, 0x48, 0x3E, 0x27, 0x04, 0x2B, 0x07, 0x2C,
105         0x3B, 0x35, 0x4D, 0x4C, 0x47, 0x3A, 0x3D, 0x39, 0x43, 0x42, 0x06, 0x05,
106         0x28, 0x22, 0x4F, 0x4B, 0x2A, 0x26, 0x31, 0x30, 0x11, 0x10, 0x21, 0x1F,
107         0x3C, 0x32, 0x23, 0x16, 0x33, 0x25, 0x02, 0x01, 0x12, 0x0D, 0x0F, 0x0B,
108         0x37, 0x19, 0x18, 0x0E, 0x1C, 0x1A, 0x13, 0x50, 0x4A, 0x38, 0x36, 0x45,
109         0x3F, 0x1E, 0x09, 0x2F, 0x20, 0x40, 0x2E, 0x49, 0x46,
110     },
111     {
112         0x0F, 0x0B, 0x37, 0x14, 0x2E, 0x13, 0x0E, 0x2F, 0x1C, 0x32, 0x49, 0x3C,
113         0x2A, 0x26, 0x38, 0x31, 0x0D, 0x01, 0x17, 0x15, 0x19, 0x0C, 0x33, 0x25,
114         0x20, 0x1E, 0x35, 0x30, 0x18, 0x09, 0x1D, 0x1A, 0x4C, 0x46, 0x27, 0x00,
115         0x3E, 0x2B, 0x4D, 0x29, 0x1F, 0x34, 0x2D, 0x05, 0x03, 0x22, 0x1B, 0x4F,
116         0x4E, 0x45, 0x08, 0x07, 0x48, 0x44, 0x3F, 0x42, 0x04, 0x47, 0x43, 0x39,
117         0x2C, 0x40, 0x3D, 0x4A, 0x3B, 0x10, 0x06, 0x16, 0x12, 0x50, 0x4B, 0x36,
118         0x28, 0x24, 0x41, 0x3A, 0x11, 0x02, 0x23, 0x21, 0x0A,
119     },
120     {
121         0x3C, 0x01, 0x0D, 0x03, 0x16, 0x15, 0x38, 0x08, 0x04, 0x20, 0x12, 0x41,
122         0x39, 0x35, 0x3F, 0x3E, 0x2C, 0x29, 0x31, 0x30, 0x18, 0x17, 0x3B, 0x28,
123         0x0C, 0x05, 0x2E, 0x25, 0x37, 0x0F, 0x0B, 0x09, 0x06, 0x1A, 0x19, 0x36,
124         0x24, 0x1D, 0x33, 0x2F, 0x10, 0x00, 0x1C, 0x11, 0x42, 0x1B, 0x44, 0x43,
125         0x50, 0x4C, 0x4B, 0x4E, 0x48, 0x4D, 0x27, 0x23, 0x4F, 0x2B, 0x45, 0x40,
126         0x2D, 0x22, 0x47, 0x34, 0x4A, 0x46, 0x3D, 0x1E, 0x07, 0x21, 0x1F, 0x49,
127         0x2A, 0x26, 0x3A, 0x32, 0x0E, 0x02, 0x14, 0x13, 0x0A,
128     },
129     {
130         0x14, 0x00, 0x0A, 0x01, 0x12, 0x08, 0x50, 0x38, 0x19, 0x02, 0x07, 0x06,
131         0x13, 0x0B, 0x1A, 0x4F, 0x3C, 0x1D, 0x1B, 0x23, 0x1E, 0x0E, 0x0D, 0x17,
132         0x10, 0x18, 0x16, 0x36, 0x26, 0x47, 0x40, 0x4C, 0x49, 0x28, 0x15, 0x2F,
133         0x2D, 0x48, 0x3F, 0x20, 0x0C, 0x2C, 0x2A, 0x4B, 0x2E, 0x24, 0x3A, 0x37,
134         0x32, 0x2B, 0x43, 0x35, 0x11, 0x03, 0x25, 0x1C, 0x42, 0x3E, 0x27, 0x21,
135         0x34, 0x29, 0x4D, 0x33, 0x31, 0x3D, 0x3B, 0x45, 0x44, 0x22, 0x1F, 0x39,
136         0x30, 0x4E, 0x46, 0x41, 0x05, 0x04, 0x0F, 0x09, 0x4A,
137     },
138     {
139         0x14, 0x0B, 0x19, 0x13, 0x0D, 0x01, 0x12, 0x0E, 0x38, 0x02, 0x00, 0x0F,
140         0x09, 0x36, 0x10, 0x41, 0x3C, 0x1A, 0x07, 0x06, 0x11, 0x0C, 0x4A, 0x32,
141         0x24, 0x47, 0x40, 0x17, 0x15, 0x1D, 0x1C, 0x26, 0x18, 0x37, 0x2F, 0x16,
142         0x08, 0x2D, 0x28, 0x46, 0x22, 0x1F, 0x39, 0x34, 0x4F, 0x4C, 0x48, 0x4E,
143         0x4B, 0x29, 0x21, 0x4D, 0x42, 0x3F, 0x3E, 0x49, 0x43, 0x1E, 0x03, 0x23,
144         0x20, 0x50, 0x33, 0x31, 0x45, 0x44, 0x2A, 0x27, 0x30, 0x2C, 0x3A, 0x2E,
145         0x35, 0x2B, 0x3D, 0x3B, 0x05, 0x04, 0x25, 0x1B, 0x0A,
146     },
147     {
148         0x28, 0x24, 0x3C, 0x36, 0x15, 0x0F, 0x1D, 0x1B, 0x07, 0x06, 0x11, 0x0D,
149         0x4E, 0x2D, 0x2B, 0x44, 0x32, 0x1E, 0x1C, 0x25, 0x20, 0x48, 0x3F, 0x4C,
150         0x4B, 0x47, 0x40, 0x4F, 0x49, 0x46, 0x0B, 0x23, 0x17, 0x2F, 0x2E, 0x08,
151         0x01, 0x10, 0x0E, 0x35, 0x31, 0x3E, 0x3D, 0x1F, 0x0C, 0x2C, 0x2A, 0x04,
152         0x03, 0x21, 0x05, 0x4D, 0x33, 0x29, 0x3B, 0x34, 0x42, 0x27, 0x22, 0x39,
153         0x30, 0x3A, 0x37, 0x45, 0x43, 0x16, 0x09, 0x38, 0x26, 0x13, 0x0A, 0x02,
154         0x00, 0x18, 0x12, 0x50, 0x1A, 0x19, 0x4A, 0x41, 0x14,
155     },
156     {
157         0x1A, 0x19, 0x40, 0x3F, 0x4F, 0x47, 0x4A, 0x14, 0x46, 0x41, 0x07, 0x01,
158         0x0D, 0x08, 0x49, 0x3C, 0x38, 0x48, 0x44, 0x24, 0x17, 0x2E, 0x2D, 0x02,
159         0x00, 0x18, 0x12, 0x26, 0x16, 0x2F, 0x28, 0x0F, 0x09, 0x15, 0x10, 0x3A,
160         0x36, 0x4E, 0x4B, 0x2A, 0x25, 0x32, 0x31, 0x2C, 0x2B, 0x35, 0x33, 0x11,
161         0x04, 0x20, 0x1C, 0x34, 0x23, 0x1F, 0x03, 0x39, 0x30, 0x3D, 0x0C, 0x05,
162         0x21, 0x1E, 0x42, 0x37, 0x27, 0x22, 0x3E, 0x3B, 0x29, 0x4D, 0x45, 0x43,
163         0x0E, 0x06, 0x1D, 0x1B, 0x4C, 0x0B, 0x0A, 0x50, 0x13,
164     },
165     {
166         0x4A, 0x19, 0x08, 0x07, 0x0F, 0x09, 0x38, 0x45, 0x43, 0x2D, 0x25, 0x4E,
167         0x3D, 0x0E, 0x0D, 0x23, 0x10, 0x24, 0x15, 0x37, 0x26, 0x0A, 0x02, 0x18,
168         0x12, 0x41, 0x46, 0x1A, 0x0B, 0x01, 0x36, 0x16, 0x50, 0x2F, 0x28, 0x44,
169         0x3A, 0x17, 0x06, 0x1D, 0x1B, 0x32, 0x2E, 0x3E, 0x35, 0x2A, 0x1E, 0x2C,
170         0x2B, 0x27, 0x22, 0x33, 0x31, 0x0C, 0x03, 0x20, 0x1F, 0x4D, 0x42, 0x3B,
171         0x39, 0x29, 0x21, 0x34, 0x30, 0x4B, 0x48, 0x05, 0x04, 0x1C, 0x11, 0x4C,
172         0x3F, 0x3C, 0x4F, 0x49, 0x13, 0x00, 0x47, 0x40, 0x14,
173     },
174     {
175         0x4C, 0x49, 0x1D, 0x17, 0x4E, 0x4B, 0x09, 0x04, 0x15, 0x0D, 0x38, 0x18,
176         0x3F, 0x3C, 0x26, 0x16, 0x3A, 0x28, 0x4F, 0x44, 0x40, 0x4D, 0x48, 0x32,
177         0x2F, 0x3D, 0x37, 0x2D, 0x2C, 0x35, 0x2E, 0x11, 0x0E, 0x23, 0x1B, 0x1E,
178         0x1C, 0x3B, 0x25, 0x05, 0x03, 0x0C, 0x08, 0x22, 0x21, 0x30, 0x27, 0x36,
179         0x42, 0x3E, 0x39, 0x34, 0x29, 0x20, 0x33, 0x31, 0x47, 0x45, 0x24, 0x1F,
180         0x2B, 0x2A, 0x06, 0x01, 0x10, 0x07, 0x46, 0x1A, 0x02, 0x00, 0x0B, 0x0A,
181         0x50, 0x41, 0x19, 0x12, 0x0F, 0x43, 0x13, 0x4A, 0x14,
182     },
183     {
184         0x46, 0x0B, 0x49, 0x47, 0x41, 0x23, 0x1E, 0x2D, 0x28, 0x15, 0x01, 0x1C,
185         0x17, 0x1F, 0x0C, 0x22, 0x20, 0x4E, 0x35, 0x32, 0x42, 0x3E, 0x27, 0x04,
186         0x31, 0x30, 0x3A, 0x2A, 0x3B, 0x39, 0x34, 0x29, 0x3D, 0x05, 0x03, 0x33,
187         0x21, 0x38, 0x2F, 0x4B, 0x3C, 0x26, 0x1D, 0x48, 0x40, 0x09, 0x08, 0x16,
188         0x0F, 0x4F, 0x11, 0x10, 0x2B, 0x25, 0x07, 0x06, 0x0E, 0x0D, 0x44, 0x43,
189         0x4D, 0x45, 0x2E, 0x2C, 0x37, 0x36, 0x24, 0x1B, 0x4C, 0x3F, 0x14, 0x4A,
190         0x1A, 0x13, 0x0A, 0x02, 0x00, 0x18, 0x12, 0x19, 0x50,
191     },
192     {
193         0x41, 0x19, 0x4F, 0x49, 0x26, 0x1E, 0x2F, 0x2D, 0x0F, 0x08, 0x1C, 0x15,
194         0x02, 0x00, 0x47, 0x12, 0x4A, 0x50, 0x1A, 0x23, 0x1D, 0x40, 0x38, 0x16,
195         0x09, 0x1B, 0x18, 0x3A, 0x37, 0x45, 0x44, 0x28, 0x11, 0x35, 0x32, 0x31,
196         0x2C, 0x29, 0x27, 0x34, 0x2A, 0x42, 0x20, 0x1F, 0x22, 0x21, 0x04, 0x03,
197         0x0C, 0x05, 0x4D, 0x3B, 0x39, 0x3E, 0x3D, 0x2B, 0x25, 0x33, 0x30, 0x3F,
198         0x36, 0x07, 0x06, 0x0E, 0x0D, 0x4C, 0x4B, 0x48, 0x3C, 0x2E, 0x4E, 0x43,
199         0x10, 0x01, 0x24, 0x17, 0x0B, 0x0A, 0x46, 0x13, 0x14,
200     },
201     {
202         0x19, 0x13, 0x50, 0x41, 0x1A, 0x0B, 0x0A, 0x4B, 0x46, 0x4A, 0x48, 0x47,
203         0x17, 0x16, 0x23, 0x1D, 0x08, 0x01, 0x11, 0x0F, 0x12, 0x02, 0x18, 0x15,
204         0x49, 0x43, 0x4E, 0x4C, 0x09, 0x00, 0x38, 0x37, 0x04, 0x03, 0x0C, 0x06,
205         0x45, 0x35, 0x2E, 0x3A, 0x36, 0x1C, 0x10, 0x25, 0x20, 0x28, 0x26, 0x3F,
206         0x3C, 0x1E, 0x0E, 0x2C, 0x24, 0x4F, 0x3B, 0x32, 0x3D, 0x39, 0x31, 0x07,
207         0x34, 0x33, 0x2A, 0x29, 0x2D, 0x2B, 0x42, 0x3E, 0x1B, 0x0D, 0x30, 0x27,
208         0x44, 0x40, 0x2F, 0x1F, 0x05, 0x22, 0x21, 0x4D, 0x14,
209     },
210     {
211         0x13, 0x0D, 0x1D, 0x19, 0x09, 0x41, 0x3D, 0x4A, 0x46, 0x28, 0x24, 0x31,
212         0x29, 0x25, 0x22, 0x3E, 0x33, 0x08, 0x01, 0x16, 0x0C, 0x47, 0x2C, 0x04,
213         0x03, 0x27, 0x05, 0x49, 0x17, 0x07, 0x2B, 0x20, 0x1F, 0x06, 0x2A, 0x21,
214         0x50, 0x4C, 0x4B, 0x44, 0x43, 0x45, 0x42, 0x4E, 0x4D, 0x3F, 0x3B, 0x48,
215         0x40, 0x34, 0x30, 0x4F, 0x39, 0x2E, 0x2D, 0x15, 0x11, 0x1E, 0x1C, 0x37,
216         0x0B, 0x38, 0x14, 0x02, 0x00, 0x10, 0x0E, 0x3C, 0x32, 0x26, 0x3A, 0x35,
217         0x18, 0x12, 0x23, 0x1B, 0x1A, 0x0F, 0x36, 0x2F, 0x0A,
218     },
219     {
220         0x37, 0x0E, 0x19, 0x17, 0x1D, 0x1A, 0x06, 0x01, 0x16, 0x10, 0x47, 0x44,
221         0x4F, 0x48, 0x4D, 0x08, 0x07, 0x42, 0x3F, 0x2C, 0x2B, 0x4C, 0x4B, 0x49,
222         0x40, 0x50, 0x4E, 0x45, 0x43, 0x1B, 0x04, 0x27, 0x22, 0x4A, 0x41, 0x3D,
223         0x12, 0x03, 0x34, 0x29, 0x46, 0x2F, 0x21, 0x25, 0x23, 0x3E, 0x35, 0x05,
224         0x00, 0x1F, 0x1E, 0x32, 0x18, 0x36, 0x33, 0x0A, 0x3C, 0x0F, 0x3A, 0x2E,
225         0x09, 0x02, 0x15, 0x11, 0x38, 0x31, 0x30, 0x3B, 0x39, 0x24, 0x20, 0x2D,
226         0x26, 0x1C, 0x0C, 0x2A, 0x28, 0x0D, 0x0B, 0x14, 0x13,
227     },
228     {
229         0x14, 0x13, 0x0B, 0x01, 0x0F, 0x0E, 0x4A, 0x50, 0x4F, 0x26, 0x24, 0x36,
230         0x28, 0x06, 0x05, 0x1C, 0x09, 0x3C, 0x37, 0x4B, 0x45, 0x18, 0x17, 0x41,
231         0x19, 0x49, 0x0A, 0x2A, 0x25, 0x4C, 0x38, 0x0C, 0x02, 0x16, 0x12, 0x48,
232         0x44, 0x3B, 0x39, 0x3E, 0x31, 0x22, 0x07, 0x34, 0x1B, 0x2D, 0x2F, 0x2C,
233         0x42, 0x3D, 0x43, 0x32, 0x30, 0x2B, 0x35, 0x33, 0x1F, 0x04, 0x27, 0x23,
234         0x3F, 0x3A, 0x10, 0x00, 0x29, 0x21, 0x47, 0x4E, 0x4D, 0x1E, 0x1D, 0x2E,
235         0x20, 0x08, 0x03, 0x11, 0x0D, 0x1A, 0x15, 0x46, 0x40,
236     },
237 };
238
239 static const uint8_t aic_mode2_vlc_bits[AIC_MODE2_NUM][AIC_MODE2_SIZE] = {
240     {
241          5,  5,  5,  5,  3,  6,  6,  8,  8,  8,  8,  6,  4,  7,  7,  9,  9,
242          9,  9,  7,  7,  7,  7,  7,  8,  8,  8,  8,  8,  8,  8,  8,  9,  9,
243         11, 11, 11, 11,  9,  9,  9,  9,  9, 10, 10, 10, 10, 10, 10, 10, 10,
244         14, 14, 14, 14, 12, 13, 13, 15, 15, 14, 13, 12, 12, 12, 12, 11, 11,
245         13, 13, 13, 13, 11, 10, 10, 12, 12, 12, 12, 10,  1,
246     },
247     {
248          8,  8, 10, 10, 10, 10, 10, 10, 10, 10,  8,  8,  8,  8,  9,  9,  9,
249          9,  9,  9,  9,  9, 13, 13, 13, 13, 11, 12, 12, 14, 14, 15, 15, 14,
250         12, 11, 11, 11, 11, 12, 12, 12, 12, 10, 12, 12, 12, 12, 12, 12, 12,
251         12,  9,  9, 11, 11, 11, 11,  9,  6,  6,  6,  6,  5,  5,  7,  7,  9,
252          9,  9,  9,  7,  7,  7,  7,  7,  4,  4,  4,  4,  1,
253     },
254     {
255          7,  7,  7,  7,  5,  8,  8, 10, 10, 10, 10,  8,  8,  8,  8,  8,  9,
256          9,  9,  9,  9,  9,  9,  9, 12, 12, 12, 12, 10, 13, 13, 14, 14, 14,
257         14, 13, 13, 13, 13, 12, 12, 12, 12, 10, 10, 10, 10, 11, 11, 11, 11,
258          9, 11, 11, 11, 11, 11, 11, 11, 11,  5,  5,  5,  5,  4,  4,  6,  6,
259          8,  8,  8,  8,  8,  8,  8,  8,  6,  6,  6,  6,  1,
260     },
261     {
262          9,  9, 11, 11, 13, 13, 13, 13, 11, 11, 11, 11, 11,  9,  9,  9,  9,
263         10, 10, 10, 10, 10, 10, 10, 10, 12, 12, 12, 12, 10, 12, 12, 13, 13,
264         15, 15, 14, 13, 12, 12, 12, 12, 10, 10, 10, 10,  7,  7,  9,  9,  9,
265          9,  7,  8,  8,  8,  8,  6,  8,  8,  8,  8,  8,  8,  8,  8,  5,  5,
266          7,  7,  7,  7,  5,  4,  4,  6,  6,  6,  6,  4,  1,
267     },
268     {
269          7,  7,  7,  7,  5,  9,  9,  9,  9,  9,  9,  9,  9, 11, 11, 11, 11,
270         11, 11, 11, 11, 12, 12, 12, 12, 10, 13, 13, 13, 13, 13, 13, 13, 13,
271         12, 12, 14, 14, 15, 15, 15, 15, 12,  9,  9, 11, 11, 11, 11,  9,  7,
272          7,  7,  7,  5,  5,  5,  5,  4,  4,  8,  8,  8,  8,  6,  8,  8, 10,
273         10, 10, 10, 10, 10, 10, 10,  8,  8,  8,  8,  4,  1,
274     },
275     {
276          2,  2,  7,  7,  7,  7,  5, 12, 12, 12, 12, 12, 12, 12, 12, 11, 11,
277         12, 12, 13, 13, 14, 14, 13, 10, 10, 10, 10,  9,  9, 11, 11, 11, 11,
278         11, 11, 11, 11,  8,  8, 10, 10, 10, 10, 10, 10, 10, 10,  7,  7,  9,
279          9,  9,  9,  9,  9,  9,  9,  5,  5,  5,  5,  6,  6,  6,  6,  4,  6,
280          6,  8,  8,  8,  8,  8,  8,  8,  8,  6,  6,  6,  6,
281     },
282     {
283          5,  5,  5,  5,  3,  6,  6,  6,  6,  4,  7,  7,  9,  9,  9,  9,  9,
284          9,  9,  9,  7,  7,  7,  7,  8,  8,  8,  8,  8,  8,  8,  8, 11, 11,
285         13, 13, 13, 13, 11, 11, 11, 11, 11, 12, 12, 12, 12, 10, 12, 12, 15,
286         15, 15, 15, 13, 14, 14, 14, 14, 12, 12, 12, 12,  9,  9, 11, 11, 11,
287         11,  9,  8,  8, 10, 10, 10, 10, 10, 10, 10, 10,  1,
288     },
289     {
290          5,  5,  9,  9,  9,  9,  7, 11, 11, 11, 11,  9, 11, 11, 11, 11, 11,
291         11, 11, 11,  9,  9,  9,  9,  7,  7,  7,  7,  3,  4,  4,  8,  8,  8,
292          8,  6, 10, 10, 10, 10, 10, 10, 10, 10, 14, 14, 14, 14, 12, 13, 13,
293         14, 14, 13, 12, 12, 12, 12, 11, 11, 13, 13, 13, 13, 11, 10, 10, 12,
294         12, 12, 12, 10,  8,  8,  8,  8,  6,  6,  6,  6,  1,
295     },
296     {
297          2,  2,  5,  5,  7,  7,  7,  7,  5,  3,  6,  6,  6,  6,  4,  8,  8,
298         10, 10, 10, 10, 10, 10, 10, 10,  8,  8,  8,  8,  9,  9,  9,  9,  9,
299          9,  9,  9, 10, 10, 12, 12, 12, 12, 10, 10, 10, 10, 10, 11, 11, 11,
300         11, 11, 11, 11, 11, 12, 12, 14, 14, 14, 14, 12, 12, 12, 12, 12, 11,
301         11, 13, 13, 13, 13, 11,  6,  6,  8,  8,  8,  8,  6,
302     },
303     {
304          3,  3,  6,  6,  8,  8,  8,  8,  6,  6,  6,  6,  6,  7,  7,  7,  7,
305          5, 10, 10, 10, 10,  8, 10, 10, 10, 10, 10, 10, 10, 10,  8,  8,  8,
306          8,  9,  9,  9,  9,  7, 13, 13, 13, 13, 11, 12, 12, 13, 13, 14, 14,
307         14, 14, 11, 11, 11, 11, 12, 12, 12, 12, 10, 12, 12, 12, 12, 12, 12,
308         12, 12,  9,  9, 11, 11, 11, 11, 11, 11, 11, 11,  1,
309     },
310     {
311          9,  9,  9,  9,  9,  9,  9,  9, 11, 11, 11, 11,  9, 11, 11, 11, 11,
312         11, 11, 11, 11,  9,  9,  9,  9,  7,  7,  7,  7,  6,  6, 10, 10, 10,
313         10, 10, 10, 10, 10, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13,
314         11, 14, 14, 14, 14, 12, 13, 13, 13, 13, 10, 10, 10, 10,  8,  8,  8,
315          8,  5,  5,  7,  7,  7,  7,  5,  4,  4,  4,  4,  1,
316     },
317     {
318          4,  4,  6,  6,  6,  6,  4,  2,  3,  3,  9,  9,  9,  9,  7,  9,  9,
319          9,  9,  9,  9,  9,  9,  7,  7,  7,  7,  8,  8,  8,  8,  8,  8,  8,
320          8, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11,
321         12, 12, 14, 14, 14, 14, 12, 12, 12, 12, 12, 11, 11, 13, 13, 14, 14,
322         13, 11,  8,  8, 10, 10, 10, 10,  8,  5,  5,  5,  5,
323     },
324     {
325          5,  5,  9,  9,  9,  9,  7,  9,  9, 11, 11, 11, 11, 11, 11, 11, 11,
326          9,  9,  9,  9,  7,  7,  7,  7,  3,  4,  4,  8,  8,  8,  8,  6, 10,
327         10, 10, 10, 10, 10, 10, 10, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13,
328         13, 13, 13, 13, 13, 13, 12, 12, 13, 13, 14, 14, 14, 14, 10, 10, 12,
329         12, 12, 12, 10,  8,  8,  8,  8,  6,  6,  6,  6,  1,
330     },
331     {
332          7,  7,  9,  9,  9,  9,  9,  9,  9,  9,  7,  7,  7,  7,  8,  8,  8,
333          8,  6, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11,
334         11, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 11, 12, 12, 13,
335         13, 14, 14, 14, 14,  8,  8, 10, 10, 10, 10, 10, 10, 10, 10,  5,  5,
336          7,  7,  7,  7,  5,  4,  4,  6,  6,  6,  6,  4,  1,
337     },
338     {
339          6,  6,  6,  6,  4,  9,  9,  9,  9,  9,  9,  9,  9, 11, 11, 11, 11,
340          9, 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 13, 13, 14, 14, 13, 13,
341         13, 13, 13,  9,  9,  9,  9,  7,  7,  7,  7,  8,  8,  8,  8,  6, 10,
342         10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,  8,  8,
343          8,  8,  2,  3,  3,  5,  5,  7,  7,  7,  7,  5,  3,
344     },
345     {
346          5,  5,  7,  7,  9,  9,  9,  9,  9,  9,  9,  9,  7,  7,  7,  7,  3,
347          4,  4,  8,  8,  8,  8,  8,  8,  8,  8, 11, 11, 11, 11, 11, 11, 11,
348         11, 12, 12, 14, 14, 14, 14, 12, 12, 12, 12, 12, 13, 13, 13, 13, 11,
349         13, 13, 13, 13, 13, 13, 13, 13,  9,  9, 11, 11, 11, 11,  9,  8,  8,
350         10, 10, 10, 10, 10, 10, 10, 10,  6,  6,  6,  6,  1,
351     },
352     {
353          5,  5,  5,  5,  3,  6,  6,  6,  6,  4,  7,  7,  9,  9,  9,  9,  9,
354          9,  9,  9,  7,  7,  7,  7,  8,  8,  8,  8,  8,  8,  8,  8, 11, 11,
355         11, 11,  9, 11, 11, 11, 11, 11, 11, 11, 11,  9,  9,  9,  9, 10, 10,
356         10, 10,  8, 12, 12, 13, 13, 14, 14, 14, 14, 12, 12, 12, 12, 11, 11,
357         13, 13, 13, 13, 11, 10, 10, 12, 12, 12, 12, 10,  1,
358     },
359     {
360          7,  7,  7,  7,  5,  9,  9,  9,  9,  9,  9,  9,  9, 10, 10, 10, 10,
361         10, 10, 10, 10, 11, 11, 13, 13, 13, 13, 11, 11, 11, 11, 11, 12, 12,
362         12, 12, 10, 13, 13, 14, 14, 15, 15, 15, 15, 13, 13, 13, 13, 12, 12,
363         12, 12,  7,  7,  9,  9,  9,  9,  7,  3,  4,  4,  8,  8,  8,  8,  6,
364          8,  8,  8,  8,  8,  8,  8,  8,  6,  6,  6,  6,  1,
365     },
366     {
367          4,  4,  8,  8,  8,  8,  8,  8,  8,  8, 13, 13, 14, 14, 13, 13, 13,
368         13, 13, 12, 12, 12, 12, 11, 11, 11, 11, 10, 10, 12, 12, 12, 12, 10,
369          9,  9, 11, 11, 11, 11,  9,  8,  8, 10, 10, 10, 10, 10, 10, 10, 10,
370          6,  6,  6,  6,  2,  3,  3,  5,  5,  9,  9,  9,  9,  7,  9,  9,  9,
371          9,  9,  9,  9,  9,  7,  7,  7,  7,  5,  5,  5,  5,
372     },
373     {
374          2,  2,  7,  7,  7,  7,  5,  7,  7,  9,  9,  9,  9,  9,  9,  9,  9,
375          7,  7,  7,  7,  5,  5,  5,  5,  4,  4,  8,  8,  8,  8,  8,  8,  8,
376          8, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 14, 11, 11, 11, 11, 10,
377         10, 12, 12, 12, 12, 12, 12, 12, 12,  9,  9, 11, 11, 11, 11,  9,  8,
378          8, 10, 10, 10, 10, 10, 10, 10, 10,  6,  6,  6,  6,
379     },
380 };
381 //@}
382
383 /**
384  * Codes used for determining block type
385  */
386 //@{
387 #define AIC_MODE1_NUM  90
388 #define AIC_MODE1_SIZE  9
389 #define AIC_MODE1_BITS  7
390
391 static const uint8_t aic_mode1_vlc_codes[AIC_MODE1_NUM][AIC_MODE1_SIZE] = {
392  { 0x01, 0x01, 0x01, 0x11, 0x00, 0x09, 0x03, 0x10, 0x05,},
393  { 0x09, 0x01, 0x01, 0x05, 0x11, 0x00, 0x03, 0x21, 0x20,},
394  { 0x01, 0x01, 0x01, 0x11, 0x09, 0x10, 0x05, 0x00, 0x03,},
395  { 0x01, 0x01, 0x00, 0x03, 0x21, 0x05, 0x09, 0x20, 0x11,},
396  { 0x01, 0x09, 0x00, 0x29, 0x08, 0x15, 0x03, 0x0B, 0x28,},
397  { 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x03, 0x02,},
398  { 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x01, 0x09, 0x08,},
399  { 0x01, 0x01, 0x01, 0x09, 0x01, 0x08, 0x00, 0x03, 0x05,},
400  { 0x01, 0x01, 0x01, 0x00, 0x05, 0x11, 0x09, 0x10, 0x03,},
401  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,},
402
403  { 0x01, 0x01, 0x01, 0x05, 0x01, 0x00, 0x03, 0x09, 0x08,},
404  { 0x09, 0x01, 0x01, 0x05, 0x11, 0x00, 0x03, 0x21, 0x20,},
405  { 0x01, 0x01, 0x01, 0x0D, 0x05, 0x04, 0x00, 0x07, 0x0C,},
406  { 0x01, 0x01, 0x00, 0x05, 0x11, 0x03, 0x09, 0x21, 0x20,},
407  { 0x05, 0x01, 0x01, 0x11, 0x00, 0x09, 0x03, 0x21, 0x20,},
408  { 0x09, 0x01, 0x01, 0x00, 0x05, 0x01, 0x03, 0x11, 0x10,},
409  { 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x03, 0x02,},
410  { 0x01, 0x01, 0x01, 0x09, 0x00, 0x05, 0x01, 0x03, 0x08,},
411  { 0x01, 0x01, 0x01, 0x09, 0x11, 0x05, 0x00, 0x10, 0x03,},
412  { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,},
413
414  { 0x01, 0x00, 0x01, 0x09, 0x08, 0x15, 0x14, 0x0B, 0x03,},
415  { 0x0D, 0x01, 0x01, 0x05, 0x0C, 0x04, 0x01, 0x00, 0x07,},
416  { 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, 0x03, 0x01, 0x01,},
417  { 0x05, 0x01, 0x01, 0x04, 0x19, 0x07, 0x18, 0x0D, 0x00,},
418  { 0x11, 0x09, 0x01, 0x21, 0x05, 0x20, 0x01, 0x00, 0x03,},
419  { 0x41, 0x01, 0x00, 0x05, 0x40, 0x03, 0x09, 0x21, 0x11,},
420  { 0x29, 0x01, 0x00, 0x28, 0x09, 0x15, 0x03, 0x08, 0x0B,},
421  { 0x01, 0x00, 0x01, 0x11, 0x09, 0x10, 0x05, 0x01, 0x03,},
422  { 0x05, 0x01, 0x01, 0x04, 0x0D, 0x0C, 0x07, 0x00, 0x01,},
423  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,},
424
425  { 0x01, 0x00, 0x03, 0x05, 0x11, 0x10, 0x25, 0x24, 0x13,},
426  { 0x21, 0x01, 0x01, 0x00, 0x11, 0x03, 0x05, 0x20, 0x09,},
427  { 0x01, 0x01, 0x01, 0x00, 0x09, 0x11, 0x10, 0x05, 0x03,},
428  { 0x21, 0x05, 0x01, 0x01, 0x09, 0x00, 0x11, 0x20, 0x03,},
429  { 0x05, 0x01, 0x00, 0x04, 0x01, 0x19, 0x07, 0x18, 0x0D,},
430  { 0x11, 0x01, 0x00, 0x01, 0x09, 0x01, 0x03, 0x10, 0x05,},
431  { 0x1D, 0x01, 0x05, 0x0D, 0x0C, 0x04, 0x00, 0x1C, 0x0F,},
432  { 0x05, 0x19, 0x01, 0x04, 0x00, 0x18, 0x1B, 0x1A, 0x07,},
433  { 0x09, 0x01, 0x00, 0x01, 0x05, 0x03, 0x11, 0x10, 0x01,},
434  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,},
435
436  { 0x01, 0x00, 0x03, 0x41, 0x05, 0x40, 0x09, 0x11, 0x21,},
437  { 0x05, 0x01, 0x01, 0x19, 0x04, 0x07, 0x00, 0x18, 0x0D,},
438  { 0x01, 0x01, 0x01, 0x05, 0x01, 0x04, 0x01, 0x00, 0x03,},
439  { 0x01, 0x05, 0x00, 0x0D, 0x01, 0x04, 0x07, 0x19, 0x18,},
440  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x03, 0x02,},
441  { 0x31, 0x01, 0x05, 0x19, 0x04, 0x07, 0x00, 0x30, 0x0D,},
442  { 0x01, 0x00, 0x03, 0x11, 0x01, 0x05, 0x01, 0x09, 0x10,},
443  { 0x01, 0x05, 0x01, 0x11, 0x01, 0x10, 0x00, 0x03, 0x09,},
444  { 0x01, 0x09, 0x00, 0x29, 0x03, 0x08, 0x28, 0x15, 0x0B,},
445  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,},
446
447  { 0x01, 0x01, 0x00, 0x09, 0x15, 0x03, 0x08, 0x14, 0x0B,},
448  { 0x11, 0x01, 0x01, 0x00, 0x09, 0x01, 0x03, 0x10, 0x05,},
449  { 0x01, 0x00, 0x03, 0x25, 0x11, 0x05, 0x10, 0x24, 0x13,},
450  { 0x11, 0x01, 0x00, 0x01, 0x09, 0x01, 0x05, 0x10, 0x03,},
451  { 0x05, 0x01, 0x00, 0x0D, 0x0C, 0x04, 0x0F, 0x1D, 0x1C,},
452  { 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x03, 0x02,},
453  { 0x21, 0x01, 0x05, 0x09, 0x11, 0x00, 0x03, 0x41, 0x40,},
454  { 0x05, 0x01, 0x00, 0x1D, 0x1C, 0x0D, 0x0C, 0x0F, 0x04,},
455  { 0x05, 0x01, 0x00, 0x0D, 0x31, 0x04, 0x19, 0x30, 0x07,},
456  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,},
457
458  { 0x01, 0x01, 0x00, 0x21, 0x05, 0x11, 0x03, 0x09, 0x20,},
459  { 0x01, 0x01, 0x00, 0x11, 0x03, 0x05, 0x01, 0x09, 0x10,},
460  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x03, 0x02,},
461  { 0x05, 0x01, 0x04, 0x19, 0x07, 0x0D, 0x00, 0x31, 0x30,},
462  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x03, 0x02,},
463  { 0x05, 0x01, 0x01, 0x11, 0x09, 0x00, 0x03, 0x21, 0x20,},
464  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x03, 0x02,},
465  { 0x01, 0x01, 0x01, 0x00, 0x01, 0x03, 0x01, 0x01, 0x02,},
466  { 0x09, 0x01, 0x00, 0x29, 0x08, 0x15, 0x03, 0x28, 0x0B,},
467  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,},
468
469  { 0x01, 0x01, 0x01, 0x05, 0x01, 0x04, 0x00, 0x01, 0x03,},
470  { 0x09, 0x01, 0x00, 0x29, 0x28, 0x15, 0x08, 0x03, 0x0B,},
471  { 0x01, 0x00, 0x01, 0x11, 0x05, 0x10, 0x09, 0x01, 0x03,},
472  { 0x05, 0x04, 0x01, 0x1D, 0x0D, 0x0C, 0x1C, 0x00, 0x0F,},
473  { 0x09, 0x11, 0x01, 0x41, 0x00, 0x40, 0x05, 0x03, 0x21,},
474  { 0x0D, 0x05, 0x01, 0x1D, 0x1C, 0x0C, 0x04, 0x00, 0x0F,},
475  { 0x41, 0x09, 0x01, 0x40, 0x00, 0x11, 0x05, 0x03, 0x21,},
476  { 0x01, 0x01, 0x01, 0x05, 0x01, 0x04, 0x00, 0x01, 0x03,},
477  { 0x05, 0x04, 0x01, 0x0D, 0x01, 0x0C, 0x07, 0x01, 0x00,},
478  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,},
479
480  { 0x05, 0x04, 0x01, 0x07, 0x19, 0x31, 0x30, 0x0D, 0x00,},
481  { 0x21, 0x01, 0x01, 0x00, 0x11, 0x09, 0x20, 0x05, 0x03,},
482  { 0x05, 0x01, 0x01, 0x04, 0x07, 0x0D, 0x0C, 0x00, 0x01,},
483  { 0x21, 0x09, 0x01, 0x00, 0x20, 0x05, 0x23, 0x22, 0x03,},
484  { 0x31, 0x0D, 0x01, 0x19, 0x05, 0x30, 0x04, 0x07, 0x00,},
485  { 0x31, 0x05, 0x01, 0x04, 0x19, 0x00, 0x0D, 0x30, 0x07,},
486  { 0x31, 0x01, 0x00, 0x0D, 0x05, 0x19, 0x04, 0x30, 0x07,},
487  { 0x01, 0x01, 0x01, 0x00, 0x01, 0x03, 0x02, 0x01, 0x01,},
488  { 0x01, 0x00, 0x01, 0x01, 0x05, 0x09, 0x08, 0x03, 0x01,},
489  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,},
490 };
491
492 static const uint8_t aic_mode1_vlc_bits[AIC_MODE1_NUM][AIC_MODE1_SIZE] = {
493  {  1,  4,  2,  7,  4,  6,  4,  7,  5,},
494  {  5,  1,  3,  4,  6,  3,  3,  7,  7,},
495  {  1,  4,  2,  7,  6,  7,  5,  4,  4,},
496  {  1,  3,  3,  3,  7,  4,  5,  7,  6,},
497  {  2,  4,  2,  6,  4,  5,  2,  4,  6,},
498  {  7,  2,  3,  4,  7,  1,  5,  7,  7,},
499  {  5,  1,  3,  6,  5,  5,  2,  7,  7,},
500  {  2,  5,  1,  7,  3,  7,  5,  5,  6,},
501  {  2,  4,  1,  4,  5,  7,  6,  7,  4,},
502  {  0,  0,  0,  0,  0,  0,  0,  0,  0,},
503
504  {  2,  1,  3,  6,  5,  5,  5,  7,  7,},
505  {  5,  1,  3,  4,  6,  3,  3,  7,  7,},
506  {  4,  1,  2,  6,  5,  5,  4,  5,  6,},
507  {  3,  1,  3,  4,  6,  3,  5,  7,  7,},
508  {  4,  1,  3,  6,  3,  5,  3,  7,  7,},
509  {  6,  1,  4,  4,  5,  2,  4,  7,  7,},
510  {  7,  1,  5,  7,  4,  3,  2,  7,  7,},
511  {  5,  3,  2,  7,  5,  6,  1,  5,  7,},
512  {  4,  1,  2,  6,  7,  5,  4,  7,  4,},
513  {  1,  0,  1,  0,  0,  0,  0,  0,  0,},
514
515  {  3,  3,  1,  5,  5,  6,  6,  5,  3,},
516  {  6,  2,  1,  5,  6,  5,  4,  4,  5,},
517  {  6,  4,  1,  7,  6,  7,  6,  3,  2,},
518  {  4,  3,  1,  4,  6,  4,  6,  5,  3,},
519  {  6,  5,  1,  7,  4,  7,  3,  3,  3,},
520  {  7,  2,  2,  3,  7,  2,  4,  6,  5,},
521  {  6,  2,  2,  6,  4,  5,  2,  4,  4,},
522  {  4,  4,  1,  7,  6,  7,  5,  2,  4,},
523  {  5,  4,  1,  5,  6,  6,  5,  4,  2,},
524  {  0,  0,  0,  0,  0,  0,  0,  0,  0,},
525
526  {  2,  2,  2,  3,  5,  5,  6,  6,  5,},
527  {  7,  1,  3,  3,  6,  3,  4,  7,  5,},
528  {  2,  4,  1,  4,  6,  7,  7,  5,  4,},
529  {  7,  4,  3,  1,  5,  3,  6,  7,  3,},
530  {  4,  3,  3,  4,  1,  6,  4,  6,  5,},
531  {  7,  4,  4,  2,  6,  1,  4,  7,  5,},
532  {  5,  2,  3,  4,  4,  3,  2,  5,  4,},
533  {  3,  5,  2,  3,  2,  5,  5,  5,  3,},
534  {  6,  4,  4,  2,  5,  4,  7,  7,  1,},
535  {  0,  0,  0,  0,  0,  0,  0,  0,  0,},
536
537  {  2,  2,  2,  7,  3,  7,  4,  5,  6,},
538  {  4,  1,  3,  6,  4,  4,  3,  6,  5,},
539  {  2,  4,  1,  7,  3,  7,  6,  6,  6,},
540  {  3,  4,  3,  5,  1,  4,  4,  6,  6,},
541  {  4,  5,  2,  7,  1,  7,  3,  7,  7,},
542  {  6,  2,  3,  5,  3,  3,  2,  6,  4,},
543  {  4,  4,  4,  7,  2,  5,  1,  6,  7,},
544  {  4,  5,  2,  7,  1,  7,  4,  4,  6,},
545  {  2,  4,  2,  6,  2,  4,  6,  5,  4,},
546  {  0,  0,  0,  0,  0,  0,  0,  0,  0,},
547
548  {  1,  3,  3,  5,  6,  3,  5,  6,  5,},
549  {  7,  1,  4,  4,  6,  2,  4,  7,  5,},
550  {  2,  2,  2,  6,  5,  3,  5,  6,  5,},
551  {  7,  4,  4,  2,  6,  1,  5,  7,  4,},
552  {  3,  2,  2,  4,  4,  3,  4,  5,  5,},
553  {  7,  2,  5,  3,  7,  1,  4,  7,  7,},
554  {  6,  2,  3,  4,  5,  2,  2,  7,  7,},
555  {  3,  2,  2,  5,  5,  4,  4,  4,  3,},
556  {  3,  2,  2,  4,  6,  3,  5,  6,  3,},
557  {  0,  0,  0,  0,  0,  0,  0,  0,  0,},
558
559  {  1,  3,  3,  7,  4,  6,  3,  5,  7,},
560  {  4,  1,  4,  7,  4,  5,  2,  6,  7,},
561  {  2,  4,  1,  7,  5,  7,  3,  7,  7,},
562  {  3,  2,  3,  5,  3,  4,  2,  6,  6,},
563  {  3,  5,  4,  7,  2,  7,  1,  7,  7,},
564  {  4,  1,  3,  6,  5,  3,  3,  7,  7,},
565  {  4,  2,  5,  7,  3,  7,  1,  7,  7,},
566  {  7,  4,  1,  7,  3,  7,  2,  5,  7,},
567  {  4,  2,  2,  6,  4,  5,  2,  6,  4,},
568  {  0,  0,  0,  0,  0,  0,  0,  0,  0,},
569
570  {  3,  4,  1,  7,  6,  7,  6,  2,  6,},
571  {  4,  2,  2,  6,  6,  5,  4,  2,  4,},
572  {  4,  4,  1,  7,  5,  7,  6,  2,  4,},
573  {  3,  3,  2,  5,  4,  4,  5,  2,  4,},
574  {  4,  5,  2,  7,  2,  7,  3,  2,  6,},
575  {  4,  3,  2,  5,  5,  4,  3,  2,  4,},
576  {  7,  4,  2,  7,  2,  5,  3,  2,  6,},
577  {  4,  6,  2,  7,  3,  7,  6,  1,  6,},
578  {  5,  5,  1,  6,  4,  6,  5,  2,  4,},
579  {  0,  0,  0,  0,  0,  0,  0,  0,  0,},
580
581  {  3,  3,  2,  3,  5,  6,  6,  4,  2,},
582  {  7,  1,  3,  3,  6,  5,  7,  4,  3,},
583  {  5,  4,  1,  5,  5,  6,  6,  4,  2,},
584  {  6,  4,  2,  2,  6,  3,  6,  6,  2,},
585  {  6,  4,  2,  5,  3,  6,  3,  3,  2,},
586  {  6,  3,  2,  3,  5,  2,  4,  6,  3,},
587  {  6,  2,  2,  4,  3,  5,  3,  6,  3,},
588  {  7,  5,  1,  7,  4,  7,  7,  3,  2,},
589  {  5,  5,  2,  3,  6,  7,  7,  5,  1,},
590  {  0,  0,  0,  0,  0,  0,  0,  0,  0,},
591 };
592
593 //@}
594
595 #define PBTYPE_ESCAPE 0xFF
596
597 /** tables used for P-frame macroblock type decoding */
598 //@{
599 #define NUM_PTYPE_VLCS 7
600 #define PTYPE_VLC_SIZE 8
601 #define PTYPE_VLC_BITS 7
602
603 static const uint8_t ptype_vlc_tabs[NUM_PTYPE_VLCS][PTYPE_VLC_SIZE][2] = {
604     { { PBTYPE_ESCAPE, 7 }, { 11, 7 }, { 3, 6 }, { 8, 5 },
605       { 9, 4 }, { 2, 3 }, { 1, 2 }, { 0, 1 } },
606     { { PBTYPE_ESCAPE, 7 }, { 3, 7 }, { 8, 6 }, { 9, 5 },
607       { 11, 4 }, { 0, 3 }, { 2, 2 }, { 1, 1 } },
608     { { 9, 3 }, { 8, 3 }, { 3, 4 }, { 1, 4 }, { PBTYPE_ESCAPE, 5 },
609       { 0, 5 }, { 11, 4 }, { 2, 1 } },
610     { { 3, 2 }, { 2, 2 }, { PBTYPE_ESCAPE, 6 }, { 11, 6 },
611       { 1, 5 }, { 0, 4 }, { 8, 3 }, { 9, 2 } },
612     { { PBTYPE_ESCAPE, 7 }, { 11, 7 }, { 1, 6 }, { 0, 5 },
613       { 3, 4 }, { 9, 3 }, { 8, 2 }, { 2, 1 } },
614     { { PBTYPE_ESCAPE, 7 }, { 11, 7 }, { 1, 6 }, { 0, 5 },
615       { 3, 4 }, { 8, 3 }, { 9, 2 }, { 2, 1 } },
616     { { PBTYPE_ESCAPE, 7 }, { 3, 7 }, { 0, 6 }, { 8, 5 },
617       { 9, 4 }, { 1, 3 }, { 2, 2 }, { 11, 1 } },
618 };
619
620 static const uint8_t block_num_to_ptype_vlc_num[12] = {
621  0, 1, 2, 3, 0, 0, 2, 0, 4, 5, 0, 6
622 };
623 //@}
624
625 /** tables used for P-frame macroblock type decoding */
626 //@{
627 #define NUM_BTYPE_VLCS 6
628 #define BTYPE_VLC_SIZE 7
629 #define BTYPE_VLC_BITS 6
630
631 static const uint8_t btype_vlc_tabs[NUM_BTYPE_VLCS][BTYPE_VLC_SIZE][2] = {
632     { { 4, 2 }, { 0, 2 }, { PBTYPE_ESCAPE, 5 },
633       { 10, 5 }, { 7, 4 }, { 1, 3 }, { 5, 2 } },
634     { { PBTYPE_ESCAPE, 6 }, { 10, 6 }, { 7, 5 },
635       { 0, 4 }, { 4, 3 }, { 5, 2 }, { 1, 1 } },
636     { { PBTYPE_ESCAPE, 6 }, { 0, 6 }, { 10, 5 },
637       { 1, 4 }, { 7, 3 }, { 5, 2 }, { 4, 1 } },
638     { { 4, 3 }, { 1, 3 }, { PBTYPE_ESCAPE, 5 },
639       { 0, 5 }, { 10, 4 }, { 7, 3 }, { 5, 1 } },
640     { { PBTYPE_ESCAPE, 6 }, { 0, 6 }, { 1, 5 },
641       { 10, 4 }, { 4, 3 }, { 5, 2 }, { 7, 1 } },
642     { { PBTYPE_ESCAPE, 6 }, { 0, 6 }, { 1, 5 },
643       { 10, 4 }, { 4, 3 }, { 7, 2 }, { 5, 1 } },
644 };
645
646 static const uint8_t block_num_to_btype_vlc_num[12] = {
647  0, 1, 0, 0, 2, 3, 0, 5, 0, 0, 4, 0
648 };
649 //@}
650 #endif /* AVCODEC_RV40VLC2_H */