comparison src/ffmpeg/libavcodec/vc1data.h @ 808:e8776388b02a trunk

[svn] - add ffmpeg
author nenolod
date Mon, 12 Mar 2007 11:18:54 -0700
parents
children
comparison
equal deleted inserted replaced
807:0f9c8d4d3ac4 808:e8776388b02a
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 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 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 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, 19}
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 */