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