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