]> git.sesse.net Git - ffmpeg/blob - libavcodec/vc1data.c
Add prefix to some variables for consistency
[ffmpeg] / libavcodec / vc1data.c
1 /*
2  * VC-1 and WMV3 decoder
3  * copyright (c) 2006 Konstantin Shishkov
4  * (c) 2005 anonymous, Alex Beregszaszi, Michael Niedermayer
5  *
6  * This file is part of FFmpeg.
7  *
8  * FFmpeg is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * FFmpeg is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with FFmpeg; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22
23 /**
24  * @file vc1data.c
25  * VC-1 tables.
26  */
27
28 #include "avcodec.h"
29 #include "vc1.h"
30 #include "vc1data.h"
31
32 /** Table for conversion between TTBLK and TTMB */
33 const int vc1_ttblk_to_tt[3][8] = {
34   { TT_8X4, TT_4X8, TT_8X8, TT_4X4, TT_8X4_TOP, TT_8X4_BOTTOM, TT_4X8_RIGHT, TT_4X8_LEFT },
35   { TT_8X8, TT_4X8_RIGHT, TT_4X8_LEFT, TT_4X4, TT_8X4, TT_4X8, TT_8X4_BOTTOM, TT_8X4_TOP },
36   { TT_8X8, TT_4X8, TT_4X4, TT_8X4_BOTTOM, TT_4X8_RIGHT, TT_4X8_LEFT, TT_8X4, TT_8X4_TOP }
37 };
38
39 const int vc1_ttfrm_to_tt[4] = { TT_8X8, TT_8X4, TT_4X8, TT_4X4 };
40
41 /** MV P mode - the 5th element is only used for mode 1 */
42 const uint8_t vc1_mv_pmode_table[2][5] = {
43   { MV_PMODE_1MV_HPEL_BILIN, MV_PMODE_1MV, MV_PMODE_1MV_HPEL, MV_PMODE_INTENSITY_COMP, MV_PMODE_MIXED_MV },
44   { MV_PMODE_1MV, MV_PMODE_MIXED_MV, MV_PMODE_1MV_HPEL, MV_PMODE_INTENSITY_COMP, MV_PMODE_1MV_HPEL_BILIN }
45 };
46 const uint8_t vc1_mv_pmode_table2[2][4] = {
47   { MV_PMODE_1MV_HPEL_BILIN, MV_PMODE_1MV, MV_PMODE_1MV_HPEL, MV_PMODE_MIXED_MV },
48   { MV_PMODE_1MV, MV_PMODE_MIXED_MV, MV_PMODE_1MV_HPEL, MV_PMODE_1MV_HPEL_BILIN }
49 };
50
51 const int vc1_fps_nr[5] = { 24, 25, 30, 50, 60 },
52   vc1_fps_dr[2] = { 1000, 1001 };
53 const uint8_t vc1_pquant_table[3][32] = {
54   {  /* Implicit quantizer */
55      0,  1,  2,  3,  4,  5,  6,  7,  8,  6,  7,  8,  9, 10, 11, 12,
56     13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 29, 31
57   },
58   {  /* Explicit quantizer, pquantizer uniform */
59      0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
60     16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
61   },
62   {  /* Explicit quantizer, pquantizer non-uniform */
63      0,  1,  1,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13,
64     14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 31
65   }
66 };
67
68 /** @name VC-1 VLC tables and defines
69  *  @todo TODO move this into the context
70  */
71 //@{
72 #define VC1_BFRACTION_VLC_BITS 7
73 VLC vc1_bfraction_vlc;
74 #define VC1_IMODE_VLC_BITS 4
75 VLC vc1_imode_vlc;
76 #define VC1_NORM2_VLC_BITS 3
77 VLC vc1_norm2_vlc;
78 #define VC1_NORM6_VLC_BITS 9
79 VLC vc1_norm6_vlc;
80 /* Could be optimized, one table only needs 8 bits */
81 #define VC1_TTMB_VLC_BITS 9 //12
82 VLC vc1_ttmb_vlc[3];
83 #define VC1_MV_DIFF_VLC_BITS 9 //15
84 VLC vc1_mv_diff_vlc[4];
85 #define VC1_CBPCY_P_VLC_BITS 9 //14
86 VLC vc1_cbpcy_p_vlc[4];
87 #define VC1_4MV_BLOCK_PATTERN_VLC_BITS 6
88 VLC vc1_4mv_block_pattern_vlc[4];
89 #define VC1_TTBLK_VLC_BITS 5
90 VLC vc1_ttblk_vlc[3];
91 #define VC1_SUBBLKPAT_VLC_BITS 6
92 VLC vc1_subblkpat_vlc[3];
93
94 VLC vc1_ac_coeff_table[8];
95 //@}
96
97
98 #if B_FRACTION_DEN==840 //original bfraction from vc9data.h, not conforming to standard
99 /* bfraction is fractional, we scale to the GCD 3*5*7*8 = 840 */
100 const int16_t vc1_bfraction_lut[23] = {
101   420 /*1/2*/, 280 /*1/3*/, 560 /*2/3*/, 210 /*1/4*/,
102   630 /*3/4*/, 168 /*1/5*/, 336 /*2/5*/,
103   504 /*3/5*/, 672 /*4/5*/, 140 /*1/6*/, 700 /*5/6*/,
104   120 /*1/7*/, 240 /*2/7*/, 360 /*3/7*/, 480 /*4/7*/,
105   600 /*5/7*/, 720 /*6/7*/, 105 /*1/8*/, 315 /*3/8*/,
106   525 /*5/8*/, 735 /*7/8*/,
107   -1 /*inv.*/, 0 /*BI fm*/
108 };
109 #else
110 /* pre-computed scales for all bfractions and base=256 */
111 const int16_t vc1_bfraction_lut[23] = {
112   128 /*1/2*/,  85 /*1/3*/, 170 /*2/3*/,  64 /*1/4*/,
113   192 /*3/4*/,  51 /*1/5*/, 102 /*2/5*/,
114   153 /*3/5*/, 204 /*4/5*/,  43 /*1/6*/, 215 /*5/6*/,
115    37 /*1/7*/,  74 /*2/7*/, 111 /*3/7*/, 148 /*4/7*/,
116   185 /*5/7*/, 222 /*6/7*/,  32 /*1/8*/,  96 /*3/8*/,
117   160 /*5/8*/, 224 /*7/8*/,
118   -1 /*inv.*/, 0 /*BI fm*/
119 };
120 #endif
121
122 const uint8_t vc1_bfraction_bits[23] = {
123     3, 3, 3, 3,
124     3, 3, 3,
125     7, 7, 7, 7,
126     7, 7, 7, 7,
127     7, 7, 7, 7,
128     7, 7,
129     7, 7
130 };
131 const uint8_t vc1_bfraction_codes[23] = {
132      0,   1,   2,   3,
133      4,   5,   6,
134    112, 113, 114, 115,
135    116, 117, 118, 119,
136    120, 121, 122, 123,
137    124, 125,
138    126, 127
139 };
140
141 //Same as H.264
142 const AVRational vc1_pixel_aspect[16]={
143  {0, 1},
144  {1, 1},
145  {12, 11},
146  {10, 11},
147  {16, 11},
148  {40, 33},
149  {24, 11},
150  {20, 11},
151  {32, 11},
152  {80, 33},
153  {18, 11},
154  {15, 11},
155  {64, 33},
156  {160, 99},
157  {0, 1},
158  {0, 1}
159 };
160
161 /* BitPlane IMODE - such a small table... */
162 const uint8_t vc1_imode_codes[7] = {
163   0, 2, 1, 3, 1, 2, 3
164 };
165 const uint8_t vc1_imode_bits[7] = {
166   4, 2, 3, 2, 4, 3, 3
167 };
168
169 /* Normal-2 imode */
170 const uint8_t vc1_norm2_codes[4] = {
171   0, 4, 5, 3
172 };
173 const uint8_t vc1_norm2_bits[4] = {
174   1, 3, 3, 2
175 };
176
177 const uint16_t vc1_norm6_codes[64] = {
178 0x001, 0x002, 0x003, 0x000, 0x004, 0x001, 0x002, 0x047, 0x005, 0x003, 0x004, 0x04B, 0x005, 0x04D, 0x04E, 0x30E,
179 0x006, 0x006, 0x007, 0x053, 0x008, 0x055, 0x056, 0x30D, 0x009, 0x059, 0x05A, 0x30C, 0x05C, 0x30B, 0x30A, 0x037,
180 0x007, 0x00A, 0x00B, 0x043, 0x00C, 0x045, 0x046, 0x309, 0x00D, 0x049, 0x04A, 0x308, 0x04C, 0x307, 0x306, 0x036,
181 0x00E, 0x051, 0x052, 0x305, 0x054, 0x304, 0x303, 0x035, 0x058, 0x302, 0x301, 0x034, 0x300, 0x033, 0x032, 0x007,
182 };
183
184 const uint8_t vc1_norm6_bits[64] = {
185  1,  4,  4,  8,  4,  8,  8, 10,  4,  8,  8, 10,  8, 10, 10, 13,
186  4,  8,  8, 10,  8, 10, 10, 13,  8, 10, 10, 13, 10, 13, 13,  9,
187  4,  8,  8, 10,  8, 10, 10, 13,  8, 10, 10, 13, 10, 13, 13,  9,
188  8, 10, 10, 13, 10, 13, 13,  9, 10, 13, 13,  9, 13,  9,  9,  6,
189 };
190 /* Normal-6 imode */
191 const uint8_t vc1_norm6_spec[64][5] = {
192 { 0,  1, 1        },
193 { 1,  2, 4        },
194 { 2,  3, 4        },
195 { 3,  0, 8        },
196 { 4,  4, 4        },
197 { 5,  1, 8        },
198 { 6,  2, 8        },
199 { 7,  2, 5,  7, 5 },
200 { 8,  5, 4        },
201 { 9,  3, 8        },
202 {10,  4, 8        },
203 {11,  2, 5, 11, 5 },
204 {12,  5, 8        },
205 {13,  2, 5, 13, 5 },
206 {14,  2, 5, 14, 5 },
207 {15,  3, 5, 14, 8 },
208 {16,  6, 4        },
209 {17,  6, 8        },
210 {18,  7, 8        },
211 {19,  2, 5, 19, 5 },
212 {20,  8, 8        },
213 {21,  2, 5, 21, 5 },
214 {22,  2, 5, 22, 5 },
215 {23,  3, 5, 13, 8 },
216 {24,  9, 8        },
217 {25,  2, 5, 25, 5 },
218 {26,  2, 5, 26, 5 },
219 {27,  3, 5, 12, 8 },
220 {28,  2, 5, 28, 5 },
221 {29,  3, 5, 11, 8 },
222 {30,  3, 5, 10, 8 },
223 {31,  3, 5,  7, 4 },
224 {32,  7, 4        },
225 {33, 10, 8        },
226 {34, 11, 8        },
227 {35,  2, 5,  3, 5 },
228 {36, 12, 8        },
229 {37,  2, 5,  5, 5 },
230 {38,  2, 5,  6, 5 },
231 {39,  3, 5,  9, 8 },
232 {40, 13, 8        },
233 {41,  2, 5,  9, 5 },
234 {42,  2, 5, 10, 5 },
235 {43,  3, 5,  8, 8 },
236 {44,  2, 5, 12, 5 },
237 {45,  3, 5,  7, 8 },
238 {46,  3, 5,  6, 8 },
239 {47,  3, 5,  6, 4 },
240 {48, 14, 8        },
241 {49,  2, 5, 17, 5 },
242 {50,  2, 5, 18, 5 },
243 {51,  3, 5,  5, 8 },
244 {52,  2, 5, 20, 5 },
245 {53,  3, 5,  4, 8 },
246 {54,  3, 5,  3, 8 },
247 {55,  3, 5,  5, 4 },
248 {56,  2, 5, 24, 5 },
249 {57,  3, 5,  2, 8 },
250 {58,  3, 5,  1, 8 },
251 {59,  3, 5,  4, 4 },
252 {60,  3, 5,  0, 8 },
253 {61,  3, 5,  3, 4 },
254 {62,  3, 5,  2, 4 },
255 {63,  3, 5,  1, 1 },
256 };
257
258 /* 4MV Block pattern VLC tables */
259 const uint8_t vc1_4mv_block_pattern_codes[4][16] = {
260   { 14, 58, 59, 25, 12, 26, 15, 15, 13, 24, 27,  0, 28,  1,  2,  2},
261   {  8, 18, 19,  4, 20,  5, 30, 11, 21, 31,  6, 12,  7, 13, 14,  0},
262   { 15,  6,  7,  2,  8,  3, 28,  9, 10, 29,  4, 11,  5, 12, 13,  0},
263   {  0, 11, 12,  4, 13,  5, 30, 16, 14, 31,  6, 17,  7, 18, 19, 10}
264 };
265 const uint8_t vc1_4mv_block_pattern_bits[4][16] = {
266   { 5, 6, 6, 5, 5, 5, 5, 4, 5, 5, 5, 3, 5, 3, 3, 2},
267   { 4, 5, 5, 4, 5, 4, 5, 4, 5, 5, 4, 4, 4, 4, 4, 2},
268   { 4, 4, 4, 4, 4, 4, 5, 4, 4, 5, 4, 4, 4, 4, 4, 3},
269   { 2, 4, 4, 4, 4, 4, 5, 5, 4, 5, 4, 5, 4, 5, 5, 4}
270 };
271
272 const uint8_t wmv3_dc_scale_table[32]={
273     0, 2, 4, 8, 8, 8, 9, 9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,17,17,18,18,19,19,20,20,21,21
274 };
275
276 /* P-Picture CBPCY VLC tables */
277 #if 1 // Looks like original tables are not conforming to standard at all. Are they used for old WMV?
278 const uint16_t vc1_cbpcy_p_codes[4][64] = {
279   {
280       0,   6,  15,  13,  13,  11,   3,  13,   5,   8,  49,  10,  12, 114, 102, 119,
281       1,  54,  96,   8,  10, 111,   5,  15,  12,  10,   2,  12,  13, 115,  53,  63,
282       1,   7,   1,   7,  14,  12,   4,  14,   1,   9,  97,  11,   7,  58,  52,  62,
283       4, 103,   1,   9,  11,  56, 101, 118,   4, 110, 100,  30,   2,   5,   4,   3
284   },
285   {
286       0,   9,   1,  18,   5,  14, 237,  26,   3, 121,   3,  22,  13,  16,   6,  30,
287       2,  10,   1,  20,  12, 241,   5,  28,  16,  12,   3,  24,  28, 124, 239, 247,
288       1, 240,   1,  19,  18,  15,   4,  27,   1, 122,   2,  23,   1,  17,   7,  31,
289       1,  11,   2,  21,  19, 246, 238,  29,  17,  13, 236,  25,  58,  63,   8, 125
290   },
291   {
292       0, 201,  25, 231,   5, 221,   1,   3,   2, 414,   2, 241,  16, 225, 195, 492,
293       2, 412,   1, 240,   7, 224,  98, 245,   1, 220,  96,   5,   9, 230, 101, 247,
294       1, 102,   1, 415,  24,   3,   2, 244,   3,  54,   3, 484,  17, 114, 200, 493,
295       3, 413,   1,   4,  13, 113,  99, 485,   4, 111, 194, 243,   5,  29,  26,  31
296   },
297   {
298       0,  28,  12,  44,   3,  36,  20,  52,   2,  32,  16,  48,   8,  40,  24,  28,
299       1,  30,  14,  46,   6,  38,  22,  54,   3,  34,  18,  50,  10,  42,  26,  30,
300       1,  29,  13,  45,   5,  37,  21,  53,   2,  33,  17,  49,   9,  41,  25,  29,
301       1,  31,  15,  47,   7,  39,  23,  55,   4,  35,  19,  51,  11,  43,  27,  31
302    }
303 };
304
305 const uint8_t vc1_cbpcy_p_bits[4][64] = {
306   {
307     13,  13,   7,  13,   7,  13,  13,  12,   6,  13,   7,  12,   6,   8,   8,   8,
308      5,   7,   8,  12,   6,   8,  13,  12,   7,  13,  13,  12,   6,   8,   7,   7,
309      6,  13,   8,  12,   7,  13,  13,  12,   7,  13,   8,  12,   5,   7,   7,   7,
310      6,   8,  13,  12,   6,   7,   8,   8,   5,   8,   8,   6,   3,   3,   3,   2
311   },
312   {
313     14,  13,   8,  13,   3,  13,   8,  13,   3,   7,   8,  13,   4,  13,  13,  13,
314      3,  13,  13,  13,   4,   8,  13,  13,   5,  13,  13,  13,   5,   7,   8,   8,
315      3,   8,  14,  13,   5,  13,  13,  13,   4,   7,  13,  13,   6,  13,  13,  13,
316      5,  13,   8,  13,   5,   8,   8,  13,   5,  13,   8,  13,   6,   6,  13,   7
317   },
318   {
319     13,   8,   6,   8,   4,   8,  13,  12,   4,   9,   8,   8,   5,   8,   8,   9,
320      5,   9,  10,   8,   4,   8,   7,   8,   6,   8,   7,  13,   4,   8,   7,   8,
321      5,   7,   8,   9,   6,  13,  13,   8,   4,   6,   8,   9,   5,   7,   8,   9,
322      5,   9,   9,  13,   5,   7,   7,   9,   4,   7,   8,   8,   3,   5,   5,   5
323   },
324   {
325      9,   9,   9,   9,   2,   9,   9,   9,   2,   9,   9,   9,   9,   9,   9,   8,
326      3,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   8,
327      2,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   8,
328      9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   8
329   }
330 };
331 #else
332 const uint16_t vc1_cbpcy_p_codes[4][64] = {
333   {
334       0,   1,   1,   4,   5,   1,  12,   4,  13,  14,  10,  11,  12,   7,  13,   2,
335      15,   1,  96,   1,  49,  97,   2, 100,   3,   4,   5, 101, 102,  52,  53,   4,
336       6,   7,  54, 103,   8,   9,  10, 110,  11,  12, 111,  56, 114,  58, 115,   5,
337      13,   7,   8,   9,  10,  11,  12,  30,  13,  14,  15, 118, 119,  62,  63,   3
338   },
339   {
340       0,   1,   2,   1,   3,   1,  16,  17,   5,  18,  12,  19,  13,   1,  28,  58,
341       1,   1,   1,   2,   3,   2,   3, 236, 237,   4,   5, 238,   6,   7, 239,   8,
342       9, 240,  10,  11, 121, 122,  12,  13,  14,  15, 241, 246,  16,  17, 124,  63,
343      18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31, 247, 125
344   },
345   {
346       0,   1,   2,   3,   2,   3,   1,   4,   5,  24,   7,  13,  16,  17,   9,   5,
347      25,   1,   1,   1,   2,   3,  96, 194,   1,   2,  98,  99, 195, 200, 101,  26,
348     201, 102, 412, 413, 414,  54, 220, 111, 221,   3, 224, 113, 225, 114, 230,  29,
349     231, 415, 240,   4, 241, 484,   5, 243,   3, 244, 245, 485, 492, 493, 247,  31
350   },
351   {
352       0,   1,   1,   1,   2,   2,   3,   4,   3,   5,   6,   7,   8,   9,  10,  11,
353      12,  13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,
354      28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,
355      44,  45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  28,  29,  30,  31
356    }
357 };
358 const uint8_t vc1_cbpcy_p_bits[4][64] = {
359   {
360     13,  6,  5,  6,  6,  7,  7,  5,  7,  7,  6,  6,  6,  5,  6,  3,
361      7,  8,  8, 13,  7,  8, 13,  8, 13, 13, 13,  8,  8,  7,  7,  3,
362     13, 13,  7,  8, 13, 13, 13,  8, 13, 13,  8,  7,  8,  7,  8,  3,
363     13, 12, 12, 12, 12, 12, 12,  6, 12, 12, 12,  8,  8,  7,  7,  2
364   },
365   {
366     14,  3,  3,  5,  3,  4,  5,  5,  3,  5,  4,  5,  4,  6,  5,  6,
367      8, 14, 13,  8,  8, 13, 13,  8,  8, 13, 13,  8, 13, 13,  8, 13,
368     13,  8, 13, 13,  7,  7, 13, 13, 13, 13,  8,  8, 13, 13,  7,  6,
369     13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,  8,  7
370   },
371   {
372     13,  5,  5,  5,  4,  4,  6,  4,  4,  6,  4,  5,  5,  5,  4,  3,
373      6,  8, 10,  9,  8,  8,  7,  8, 13, 13,  7,  7,  8,  8,  7,  5,
374      8,  7,  9,  9,  9,  6,  8,  7,  8, 13,  8,  7,  8,  7,  8,  5,
375      8,  9,  8, 13,  8,  9, 13,  8, 12,  8,  8,  9,  9,  9,  8,  5
376   },
377   {
378      9,  2,  3,  9,  2,  9,  9,  9,  2,  9,  9,  9,  9,  9,  9,  9,
379      9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
380      9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
381      9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  8,  8,  8,  8
382   }
383 };
384 #endif
385
386 /* MacroBlock Transform Type: 7.1.3.11, p89
387  * 8x8:B
388  * 8x4:B:btm  8x4:B:top  8x4:B:both,
389  * 4x8:B:right  4x8:B:left  4x8:B:both
390  * 4x4:B  8x8:MB
391  * 8x4:MB:btm  8x4:MB:top  8x4,MB,both
392  * 4x8,MB,right  4x8,MB,left
393  * 4x4,MB                               */
394 const uint16_t vc1_ttmb_codes[3][16] = {
395   {
396     0x0003,
397     0x002E, 0x005F, 0x0000,
398     0x0016, 0x0015, 0x0001,
399     0x0004, 0x0014,
400     0x02F1, 0x0179, 0x017B,
401     0x0BC0, 0x0BC1, 0x05E1,
402     0x017A
403   },
404   {
405     0x0006,
406     0x0006, 0x0003, 0x0007,
407     0x000F, 0x000E, 0x0000,
408     0x0002, 0x0002,
409     0x0014, 0x0011, 0x000B,
410     0x0009, 0x0021, 0x0015,
411     0x0020
412   },
413   {
414     0x0006,
415     0x0000, 0x000E, 0x0005,
416     0x0002, 0x0003, 0x0003,
417     0x000F, 0x0002,
418     0x0081, 0x0021, 0x0009,
419     0x0101, 0x0041, 0x0011,
420     0x0100
421   }
422 };
423
424 const uint8_t vc1_ttmb_bits[3][16] = {
425   {
426      2,
427      6,  7,  2,
428      5,  5,  2,
429      3,  5,
430     10,  9,  9,
431     12, 12, 11,
432      9
433   },
434   {
435     3,
436     4, 4, 4,
437     4, 4, 3,
438     3, 2,
439     7, 7, 6,
440     6, 8, 7,
441     8
442   },
443   {
444      3,
445      3, 4, 5,
446      3, 3, 4,
447      4, 2,
448     10, 8, 6,
449     11, 9, 7,
450     11
451   }
452 };
453
454 /* TTBLK (Transform Type per Block) tables */
455 const uint8_t vc1_ttblk_codes[3][8] = {
456   {  0,  1,  3,  5, 16, 17, 18, 19},
457   {  3,  0,  1,  2,  3,  5,  8,  9},
458   {  1,  0,  1,  4,  6,  7, 10, 11}
459 };
460 const uint8_t vc1_ttblk_bits[3][8] = {
461   {  2,  2,  2,  3,  5,  5,  5,  5},
462   {  2,  3,  3,  3,  3,  3,  4,  4},
463   {  2,  3,  3,  3,  3,  3,  4,  4}
464 };
465
466 /* SUBBLKPAT tables, p93-94, reordered */
467 const uint8_t vc1_subblkpat_codes[3][15] = {
468   { 14, 12,  7, 11,  9, 26,  2, 10, 27,  8,  0,  6,  1, 15,  1},
469   { 14,  0,  8, 15, 10,  4, 23, 13,  5,  9, 25,  3, 24, 22,  1},
470   {  5,  6,  2,  2,  8,  0, 28,  3,  1,  3, 29,  1, 19, 18, 15}
471 };
472 const uint8_t vc1_subblkpat_bits[3][15] = {
473   {  5,  5,  5,  5,  5,  6,  4,  5,  6,  5,  4,  5,  4,  5,  1},
474   {  4,  3,  4,  4,  4,  5,  5,  4,  5,  4,  5,  4,  5,  5,  2},
475   {  3,  3,  4,  3,  4,  5,  5,  3,  5,  4,  5,  4,  5,  5,  4}
476 };
477
478 /* MV differential tables, p265 */
479 const uint16_t vc1_mv_diff_codes[4][73] = {
480   {
481        0,    2,    3,    8,  576,    3,    2,    6,
482        5,  577,  578,    7,    8,    9,   40,   19,
483       37,   82,   21,   22,   23,  579,  580,  166,
484       96,  167,   49,  194,  195,  581,  582,  583,
485      292,  293,  294,   13,    2,    7,   24,   50,
486      102,  295,   13,    7,    8,   18,   50,  103,
487       38,   20,   21,   22,   39,  204,  103,   23,
488       24,   25,  104,  410,  105,  106,  107,  108,
489      109,  220,  411,  442,  222,  443,  446,  447,
490        7 /* 73 elements */
491   },
492   {
493        0,    4,    5,    3,    4,    3,    4,    5,
494       20,    6,   21,   44,   45,   46, 3008,   95,
495      112,  113,   57, 3009, 3010,  116,  117, 3011,
496      118, 3012, 3013, 3014, 3015, 3016, 3017, 3018,
497     3019, 3020, 3021, 3022,    1,    4,   15,  160,
498      161,   41,    6,   11,   42,  162,   43,  119,
499       56,   57,   58,  163,  236,  237, 3023,  119,
500      120,  242,  122,  486, 1512,  487,  246,  494,
501     1513,  495, 1514, 1515, 1516, 1517, 1518, 1519,
502       31 /* 73 elements */
503   },
504   {
505        0,  512,  513,  514,  515,    2,    3,  258,
506      259,  260,  261,  262,  263,  264,  265,  266,
507      267,  268,  269,  270,  271,  272,  273,  274,
508      275,  276,  277,  278,  279,  280,  281,  282,
509      283,  284,  285,  286,    1,    5,  287,  288,
510      289,  290,    6,    7,  291,  292,  293,  294,
511      295,  296,  297,  298,  299,  300,  301,  302,
512      303,  304,  305,  306,  307,  308,  309,  310,
513      311,  312,  313,  314,  315,  316,  317,  318,
514      319 /* 73 elements */
515   },
516   {
517        0,    1,    1,    2,    3,    4,    1,    5,
518        4,    3,    5,    8,    6,    9,   10,   11,
519       12,    7,  104,   14,  105,    4,   10,   15,
520       11,    6,   14,    8,  106,  107,  108,   15,
521      109,    9,   55,   10,    1,    2,    1,    2,
522        3,   12,    6,    2,    6,    7,   28,    7,
523       15,    8,    5,   18,   29,  152,   77,   24,
524       25,   26,   39,  108,   13,  109,   55,   56,
525       57,  116,   11,  153,  234,  235,  118,  119,
526       15 /* 73 elements */
527   }
528 };
529 const uint8_t vc1_mv_diff_bits[4][73] = {
530   {
531      6,  7,  7,  8, 14,  6,  5,  6,  7, 14, 14,  6,  6,  6,  8,  9,
532     10,  9,  7,  7,  7, 14, 14, 10,  9, 10,  8, 10, 10, 14, 14, 14,
533     13, 13, 13,  6,  3,  5,  6,  8,  9, 13,  5,  4,  4,  5,  7,  9,
534      6,  5,  5,  5,  6,  9,  8,  5,  5,  5,  7, 10,  7,  7,  7,  7,
535      7,  8, 10,  9,  8,  9,  9,  9,  3 /* 73 elements */
536   },
537   {
538      5,  7,  7,  6,  6,  5,  5,  6,  7,  5,  7,  8,  8,  8, 14,  9,
539      9,  9,  8, 14, 14,  9,  9, 14,  9, 14, 14, 14, 14, 14, 14, 14,
540     14, 14, 14, 14,  2,  3,  6,  8,  8,  6,  3,  4,  6,  8,  6,  9,
541      6,  6,  6,  8,  8,  8, 14,  7,  7,  8,  7,  9, 13,  9,  8,  9,
542     13,  9, 13, 13, 13, 13, 13, 13,  5 /* 73 elements */
543
544   },
545   {
546      3, 12, 12, 12, 12,  3,  4, 11, 11, 11, 11, 11, 11, 11, 11, 11,
547     11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
548     11, 11, 11, 11,  1,  5, 11, 11, 11, 11,  4,  4, 11, 11, 11, 11,
549     11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
550     11, 11, 11, 11, 11, 11, 11, 11, 11 /* 73 elements */
551   },
552   {
553     15, 11, 15, 15, 15, 15, 12, 15, 12, 11, 12, 12, 15, 12, 12, 12,
554     12, 15, 15, 12, 15, 10, 11, 12, 11, 10, 11, 10, 15, 15, 15, 11,
555     15, 10, 14, 10,  4,  4,  5,  7,  8,  9,  5,  3,  4,  5,  6,  8,
556      5,  4,  3,  5,  6,  8,  7,  5,  5,  5,  6,  7,  9,  7,  6,  6,
557      6,  7, 10,  8,  8,  8,  7,  7,  4 /* 73 elements */
558   }
559 };
560
561 /* DC differentials low+hi-mo, p217 are the same as in msmpeg4data .h */
562
563 /* Scantables/ZZ scan are at 11.9 (p262) and 8.1.1.12 (p10) */
564 const int8_t vc1_normal_zz[64] = {
565        0,     8,     1,     2,     9,    16,    24,    17,
566       10,     3,     4,    11,    18,    25,    32,    40,
567       33,    48,    26,    19,    12,     5,     6,    13,
568       20,    27,    34,    41,    56,    49,    57,    42,
569       35,    28,    21,    14,     7,    15,    22,    29,
570       36,    43,    50,    58,    51,    59,    44,    37,
571       30,    23,    31,    38,    45,    52,    60,    53,
572       61,    46,    39,    47,    54,    62,    55,    63
573 };
574
575 const int8_t vc1_horizontal_zz [64] = /* Table 227 */
576 {
577        0,     1,     8,     2,     3,     9,    16,    24,
578       17,    10,     4,     5,    11,    18,    25,    32,
579       40,    48,    33,    26,    19,    12,     6,     7,
580       13,    20,    27,    34,    41,    56,    49,    57,
581       42,    35,    28,    21,    14,    15,    22,    29,
582       36,    43,    50,    58,    51,    44,    37,    30,
583       23,    31,    38,    45,    52,    59,    60,    53,
584       46,    39,    47,    54,    61,    62,    55,    63
585 };
586
587 const int8_t vc1_vertical_zz [64] = /* Table 228 */
588 {
589        0,     8,    16,     1,    24,    32,    40,     9,
590        2,     3,    10,    17,    25,    48,    56,    41,
591       33,    26,    18,    11,     4,     5,    12,    19,
592       27,    34,    49,    57,    50,    42,    35,    28,
593       20,    13,     6,     7,    14,    21,    29,    36,
594       43,    51,    58,    59,    52,    44,    37,    30,
595       22,    15,    23,    31,    38,    45,    60,    53,
596       46,    39,    47,    54,    61,    62,    55,    63
597 };
598
599 const int8_t vc1_simple_progressive_8x8_zz [64] =
600 /* Table 229 */
601 {
602        0,     8,     1,     2,     9,    16,    24,    17,
603       10,     3,     4,    11,    18,    25,    32,    40,
604       48,    56,    41,    33,    26,    19,    12,     5,
605        6,    13,    20,    27,    34,    49,    57,    58,
606       50,    42,    35,    28,    21,    14,     7,    15,
607       22,    29,    36,    43,    51,    59,    60,    52,
608       44,    37,    30,    23,    31,    38,    45,    53,
609       61,    62,    54,    46,    39,    47,    55,    63
610 };
611
612 const int8_t vc1_simple_progressive_8x4_zz [32] = /* Table 230 */
613 {
614        0,     1,     2,     8,     3,     9,    10,    16,
615        4,    11,    17,    24,    18,    12,     5,    19,
616       25,    13,    20,    26,    27,     6,    21,    28,
617       14,    22,    29,     7,    30,    15,    23,    31
618 };
619
620 const int8_t vc1_simple_progressive_4x8_zz [32] = /* Table 231 */
621 {
622        0,     8,     1,    16,
623        9,    24,    17,     2,
624       32,    10,    25,    40,
625       18,    48,    33,    26,
626       56,    41,    34,     3,
627       49,    57,    11,    42,
628       19,    50,    27,    58,
629       35,    43,    51,    59
630 };
631
632 /* Table 232 */
633 const int8_t vc1_simple_progressive_4x4_zz [16] =
634 {
635        0,     8,    16,     1,
636        9,    24,    17,     2,
637       10,    18,    25,     3,
638       11,    26,    19,    27
639 };
640
641 const int8_t vc1_adv_progressive_8x4_zz [32] = /* Table 233 */
642 {
643        0,     8,     1,    16,     2,     9,    10,     3,
644       24,    17,     4,    11,    18,    12,     5,    19,
645       25,    13,    20,    26,    27,     6,    21,    28,
646       14,    22,    29,     7,    30,    15,    23,    31
647 };
648
649 const int8_t vc1_adv_progressive_4x8_zz [32] = /* Table 234 */
650 {
651        0,     1,     8,     2,
652        9,    16,    17,    24,
653       10,    32,    25,    18,
654       40,     3,    33,    26,
655       48,    11,    56,    41,
656       34,    49,    57,    42,
657       19,    50,    27,    58,
658       35,    43,    51,    59
659 };
660
661 const int8_t vc1_adv_interlaced_8x8_zz [64] = /* Table 235 */
662 {
663        0,     8,     1,    16,    24,     9,     2,    32,
664       40,    48,    56,    17,    10,     3,    25,    18,
665       11,     4,    33,    41,    49,    57,    26,    34,
666       42,    50,    58,    19,    12,     5,    27,    20,
667       13,     6,    35,    28,    21,    14,     7,    15,
668       22,    29,    36,    43,    51,    59,    60,    52,
669       44,    37,    30,    23,    31,    38,    45,    53,
670       61,    62,    54,    46,    39,    47,    55,    63
671 };
672
673 const int8_t vc1_adv_interlaced_8x4_zz [32] = /* Table 236 */
674 {
675        0,     8,    16,    24,     1,     9,     2,    17,
676       25,    10,     3,    18,    26,     4,    11,    19,
677       12,     5,    13,    20,    27,     6,    21,    28,
678       14,    22,    29,     7,    30,    15,    23,    31
679 };
680
681 const int8_t vc1_adv_interlaced_4x8_zz [32] = /* Table 237 */
682 {
683        0,     1,     2,     8,
684       16,     9,    24,    17,
685       10,     3,    32,    40,
686       48,    56,    25,    18,
687       33,    26,    41,    34,
688       49,    57,    11,    42,
689       19,    50,    27,    58,
690       35,    43,    51,    59
691 };
692
693 const int8_t vc1_adv_interlaced_4x4_zz [16] = /* Table 238 */
694 {
695        0,     8,    16,    24,
696        1,     9,    17,     2,
697       25,    10,    18,     3,
698       26,    11,    19,    27
699 };
700
701
702 /* DQScale as specified in 8.1.3.9 - almost identical to 0x40000/i */
703 const int32_t vc1_dqscale[63] = {
704 0x40000, 0x20000, 0x15555, 0x10000, 0xCCCD, 0xAAAB, 0x9249, 0x8000,
705     0x71C7, 0x6666, 0x5D17, 0x5555, 0x4EC5, 0x4925, 0x4444, 0x4000,
706     0x3C3C, 0x38E4, 0x35E5, 0x3333, 0x30C3, 0x2E8C, 0x2C86, 0x2AAB,
707     0x28F6, 0x2762, 0x25ED, 0x2492, 0x234F, 0x2222, 0x2108, 0x2000,
708     0x1F08, 0x1E1E, 0x1D42, 0x1C72, 0x1BAD, 0x1AF3, 0x1A42, 0x199A,
709     0x18FA, 0x1862, 0x17D0, 0x1746, 0x16C1, 0x1643, 0x15CA, 0x1555,
710     0x14E6, 0x147B, 0x1414, 0x13B1, 0x1352, 0x12F7, 0x129E, 0x1249,
711     0x11F7, 0x11A8, 0x115B, 0x1111, 0x10C9, 0x1084, 0x1000
712 };