comparison vc1data.h @ 3359:87187ebe2c28 libavcodec

Rename VC9 to VC1 as there is no such thing as VC9
author kostya
date Tue, 27 Jun 2006 02:55:54 +0000
parents
children 2c4ddf5b9217
comparison
equal deleted inserted replaced
3358:4ae69b5b596b 3359:87187ebe2c28
1 /**
2 * @file vc1data.h
3 * VC1 tables.
4 */
5
6 #ifndef VC1DATA_H
7 #define VC1DATA_H
8
9 /* bfraction is fractional, we scale to the GCD 3*5*7*8 = 840 */
10 const int16_t vc1_bfraction_lut[23] = {
11 420 /*1/2*/, 280 /*1/3*/, 560 /*2/3*/, 210 /*1/4*/,
12 630 /*3/4*/, 168 /*1/5*/, 336 /*2/5*/,
13 504 /*3/5*/, 672 /*4/5*/, 140 /*1/6*/, 700 /*5/6*/,
14 120 /*1/7*/, 240 /*2/7*/, 360 /*3/7*/, 480 /*4/7*/,
15 600 /*5/7*/, 720 /*6/7*/, 105 /*1/8*/, 315 /*3/8*/,
16 525 /*5/8*/, 735 /*7/8*/,
17 -1 /*inv.*/, 0 /*BI fm*/
18 };
19 const uint8_t vc1_bfraction_bits[23] = {
20 3, 3, 3, 3,
21 3, 3, 3,
22 7, 7, 7, 7,
23 7, 7, 7, 7,
24 7, 7, 7, 7,
25 7, 7,
26 7, 7
27 };
28 const uint8_t vc1_bfraction_codes[23] = {
29 0, 1, 2, 3,
30 4, 5, 6,
31 112, 113, 114, 115,
32 116, 117, 118, 119,
33 120, 121, 122, 123,
34 124, 125,
35 126, 127
36 };
37
38 //Same as H.264
39 static const AVRational vc1_pixel_aspect[16]={
40 {0, 1},
41 {1, 1},
42 {12, 11},
43 {10, 11},
44 {16, 11},
45 {40, 33},
46 {24, 11},
47 {20, 11},
48 {32, 11},
49 {80, 33},
50 {18, 11},
51 {15, 11},
52 {64, 33},
53 {160, 99},
54 {0, 1},
55 {0, 1}
56 };
57
58 /* BitPlane IMODE - such a small table... */
59 static const uint8_t vc1_imode_codes[7] = {
60 0, 2, 1, 3, 1, 2, 3
61 };
62 static const uint8_t vc1_imode_bits[7] = {
63 4, 2, 3, 2, 4, 3, 3
64 };
65
66 /* Normal-2 imode */
67 static const uint8_t vc1_norm2_codes[4] = {
68 0, 4, 5, 3
69 };
70 static const uint8_t vc1_norm2_bits[4] = {
71 1, 3, 3, 2
72 };
73
74 static const uint16_t vc1_norm6_codes[64] = {
75 0x001, 0x002, 0x003, 0x000, 0x004, 0x001, 0x002, 0x047, 0x005, 0x003, 0x004, 0x04B, 0x005, 0x04D, 0x04E, 0x30E,
76 0x006, 0x006, 0x007, 0x053, 0x008, 0x055, 0x056, 0x30D, 0x009, 0x059, 0x05A, 0x30C, 0x05C, 0x30B, 0x30A, 0x037,
77 0x007, 0x00A, 0x00B, 0x043, 0x00C, 0x045, 0x046, 0x309, 0x00D, 0x049, 0x04A, 0x308, 0x04C, 0x307, 0x306, 0x036,
78 0x00E, 0x051, 0x052, 0x305, 0x054, 0x304, 0x303, 0x035, 0x058, 0x302, 0x301, 0x034, 0x300, 0x033, 0x032, 0x007,
79 };
80
81 static const uint8_t vc1_norm6_bits[64] = {
82 1, 4, 4, 8, 4, 8, 8, 10, 4, 8, 8, 10, 8, 10, 10, 13,
83 4, 8, 8, 10, 8, 10, 10, 13, 8, 10, 10, 13, 10, 13, 13, 9,
84 4, 8, 8, 10, 8, 10, 10, 13, 8, 10, 10, 13, 10, 13, 13, 9,
85 8, 10, 10, 13, 10, 13, 13, 9, 10, 13, 13, 9, 13, 9, 9, 6,
86 };
87 /* Normal-6 imode */
88 static const uint8_t vc1_norm6_spec[64][5] = {
89 { 0, 1, 1 },
90 { 1, 2, 4 },
91 { 2, 3, 4 },
92 { 3, 0, 8 },
93 { 4, 4, 4 },
94 { 5, 1, 8 },
95 { 6, 2, 8 },
96 { 7, 2, 5, 7, 5 },
97 { 8, 5, 4 },
98 { 9, 3, 8 },
99 {10, 4, 8 },
100 {11, 2, 5, 11, 5 },
101 {12, 5, 8 },
102 {13, 2, 5, 13, 5 },
103 {14, 2, 5, 14, 5 },
104 {15, 3, 5, 14, 8 },
105 {16, 6, 4 },
106 {17, 6, 8 },
107 {18, 7, 8 },
108 {19, 2, 5, 19, 5 },
109 {20, 8, 8 },
110 {21, 2, 5, 21, 5 },
111 {22, 2, 5, 22, 5 },
112 {23, 3, 5, 13, 8 },
113 {24, 9, 8 },
114 {25, 2, 5, 25, 5 },
115 {26, 2, 5, 26, 5 },
116 {27, 3, 5, 12, 8 },
117 {28, 2, 5, 28, 5 },
118 {29, 3, 5, 11, 8 },
119 {30, 3, 5, 10, 8 },
120 {31, 3, 5, 7, 4 },
121 {32, 7, 4 },
122 {33, 10, 8 },
123 {34, 11, 8 },
124 {35, 2, 5, 3, 5 },
125 {36, 12, 8 },
126 {37, 2, 5, 5, 5 },
127 {38, 2, 5, 6, 5 },
128 {39, 3, 5, 9, 8 },
129 {40, 13, 8 },
130 {41, 2, 5, 9, 5 },
131 {42, 2, 5, 10, 5 },
132 {43, 3, 5, 8, 8 },
133 {44, 2, 5, 12, 5 },
134 {45, 3, 5, 7, 8 },
135 {46, 3, 5, 6, 8 },
136 {47, 3, 5, 6, 4 },
137 {48, 14, 8 },
138 {49, 2, 5, 17, 5 },
139 {50, 2, 5, 18, 5 },
140 {51, 3, 5, 5, 8 },
141 {52, 2, 5, 20, 5 },
142 {53, 3, 5, 4, 8 },
143 {54, 3, 5, 3, 8 },
144 {55, 3, 5, 5, 4 },
145 {56, 2, 5, 24, 5 },
146 {57, 3, 5, 2, 8 },
147 {58, 3, 5, 1, 8 },
148 {59, 3, 5, 4, 4 },
149 {60, 3, 5, 0, 8 },
150 {61, 3, 5, 3, 4 },
151 {62, 3, 5, 2, 4 },
152 {63, 3, 5, 1, 1 },
153 };
154
155 /* 4MV Block pattern VLC tables */
156 static const uint8_t vc1_4mv_block_pattern_codes[4][16] = {
157 { 14, 58, 59, 25, 12, 26, 15, 15, 13, 24, 27, 0, 28, 1, 2, 2},
158 { 8, 18, 19, 4, 20, 5, 30, 11, 21, 31, 6, 12, 7, 13, 14, 0},
159 { 15, 6, 7, 2, 8, 3, 28, 9, 10, 29, 4, 11, 5, 12, 13, 0},
160 { 0, 11, 12, 4, 13, 5, 30, 16, 14, 31, 6, 17, 7, 18, 19, 19}
161 };
162 static const uint8_t vc1_4mv_block_pattern_bits[4][16] = {
163 { 5, 6, 6, 5, 5, 5, 5, 4, 5, 5, 5, 3, 5, 3, 3, 2},
164 { 4, 5, 5, 4, 5, 4, 5, 4, 5, 5, 4, 4, 4, 4, 4, 2},
165 { 4, 4, 4, 4, 4, 4, 5, 4, 4, 5, 4, 4, 4, 4, 4, 3},
166 { 2, 4, 4, 4, 4, 4, 5, 5, 4, 5, 4, 5, 4, 5, 5, 4}
167 };
168
169 const uint8_t wmv3_dc_scale_table[32]={
170 0, 4, 6, 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
171 };
172
173 /* P-Picture CBPCY VLC tables */
174 static const uint16_t vc1_cbpcy_p_codes[4][64] = {
175 {
176 0, 1, 1, 4, 5, 1, 12, 4, 13, 14, 10, 11, 12, 7, 13, 2,
177 15, 1, 96, 1, 49, 97, 2, 100, 3, 4, 5, 101, 102, 52, 53, 4,
178 6, 7, 54, 103, 8, 9, 10, 110, 11, 12, 111, 56, 114, 58, 115, 5,
179 13, 7, 8, 9, 10, 11, 12, 30, 13, 14, 15, 118, 119, 62, 63, 3
180 },
181 {
182 0, 1, 2, 1, 3, 1, 16, 17, 5, 18, 12, 19, 13, 1, 28, 58,
183 1, 1, 1, 2, 3, 2, 3, 236, 237, 4, 5, 238, 6, 7, 239, 8,
184 9, 240, 10, 11, 121, 122, 12, 13, 14, 15, 241, 246, 16, 17, 124, 63,
185 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 247, 125
186 },
187 {
188 0, 1, 2, 3, 2, 3, 1, 4, 5, 24, 7, 13, 16, 17, 9, 5,
189 25, 1, 1, 1, 2, 3, 96, 194, 1, 2, 98, 99, 195, 200, 101, 26,
190 201, 102, 412, 413, 414, 54, 220, 111, 221, 3, 224, 113, 225, 114, 230, 29,
191 231, 415, 240, 4, 241, 484, 5, 243, 3, 244, 245, 485, 492, 493, 247, 31
192 },
193 {
194 0, 1, 1, 1, 2, 2, 3, 4, 3, 5, 6, 7, 8, 9, 10, 11,
195 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
196 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
197 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 28, 29, 30, 31
198 }
199 };
200 static const uint8_t vc1_cbpcy_p_bits[4][64] = {
201 {
202 13, 6, 5, 6, 6, 7, 7, 5, 7, 7, 6, 6, 6, 5, 6, 3,
203 7, 8, 8, 13, 7, 8, 13, 8, 13, 13, 13, 8, 8, 7, 7, 3,
204 13, 13, 7, 8, 13, 13, 13, 8, 13, 13, 8, 7, 8, 7, 8, 3,
205 13, 12, 12, 12, 12, 12, 12, 6, 12, 12, 12, 8, 8, 7, 7, 2
206 },
207 {
208 14, 3, 3, 5, 3, 4, 5, 5, 3, 5, 4, 5, 4, 6, 5, 6,
209 8, 14, 13, 8, 8, 13, 13, 8, 8, 13, 13, 8, 13, 13, 8, 13,
210 13, 8, 13, 13, 7, 7, 13, 13, 13, 13, 8, 8, 13, 13, 7, 6,
211 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 8, 7
212 },
213 {
214 13, 5, 5, 5, 4, 4, 6, 4, 4, 6, 4, 5, 5, 5, 4, 3,
215 6, 8, 10, 9, 8, 8, 7, 8, 13, 13, 7, 7, 8, 8, 7, 5,
216 8, 7, 9, 9, 9, 6, 8, 7, 8, 13, 8, 7, 8, 7, 8, 5,
217 8, 9, 8, 13, 8, 9, 13, 8, 12, 8, 8, 9, 9, 9, 8, 5
218 },
219 {
220 9, 2, 3, 9, 2, 9, 9, 9, 2, 9, 9, 9, 9, 9, 9, 9,
221 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
222 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
223 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8
224 }
225 };
226
227 /* MacroBlock Transform Type: 7.1.3.11, p89
228 * 8x8:B
229 * 8x4:B:btm 8x4:B:top 8x4:B:both,
230 * 4x8:B:right 4x8:B:left 4x8:B:both
231 * 4x4:B 8x8:MB
232 * 8x4:MB:btm 8x4:MB:top 8x4,MB,both
233 * 4x8,MB,right 4x8,MB,left
234 * 4x4,MB */
235 static const uint16_t vc1_ttmb_codes[3][16] = {
236 {
237 0x0003,
238 0x002E, 0x005F, 0x0000,
239 0x0016, 0x0015, 0x0001,
240 0x0004, 0x0014,
241 0x02F1, 0x0179, 0x017B,
242 0x0BC0, 0x0BC1, 0x05E1,
243 0x017A
244 },
245 {
246 0x0006,
247 0x0006, 0x0003, 0x0007,
248 0x000F, 0x000E, 0x0000,
249 0x0002, 0x0002,
250 0x0014, 0x0011, 0x000B,
251 0x0009, 0x0021, 0x0015,
252 0x0020
253 },
254 {
255 0x0006,
256 0x0000, 0x000E, 0x0005,
257 0x0002, 0x0003, 0x0003,
258 0x000F, 0x0002,
259 0x0081, 0x0021, 0x0009,
260 0x0101, 0x0041, 0x0011,
261 0x0100
262 }
263 };
264
265 static const uint8_t vc1_ttmb_bits[3][16] = {
266 {
267 2,
268 6, 7, 2,
269 5, 5, 2,
270 3, 5,
271 10, 9, 9,
272 12, 12, 11,
273 9
274 },
275 {
276 3,
277 4, 4, 4,
278 4, 4, 3,
279 3, 2,
280 7, 7, 6,
281 6, 8, 7,
282 8
283 },
284 {
285 3,
286 3, 4, 5,
287 3, 3, 4,
288 4, 2,
289 10, 8, 6,
290 11, 9, 7,
291 11
292 }
293 };
294
295 /* TTBLK (Transform Type per Block) tables */
296 static const uint8_t vc1_ttblk_codes[3][8] = {
297 { 0, 1, 3, 5, 16, 17, 18, 19},
298 { 3, 0, 1, 2, 3, 5, 8, 9},
299 { 1, 0, 1, 4, 6, 7, 10, 11}
300 };
301 static const uint8_t vc1_ttblk_bits[3][8] = {
302 { 2, 2, 2, 3, 5, 5, 5, 5},
303 { 2, 3, 3, 3, 3, 3, 4, 4},
304 { 2, 3, 3, 3, 3, 3, 4, 4}
305 };
306
307 /* SUBBLKPAT tables, p93-94, reordered */
308 static const uint8_t vc1_subblkpat_codes[3][15] = {
309 { 14, 12, 7, 11, 9, 26, 2, 10, 27, 8, 0, 6, 1, 15, 1},
310 { 14, 0, 8, 15, 10, 4, 23, 13, 5, 9, 25, 3, 24, 22, 1},
311 { 5, 6, 2, 2, 8, 0, 28, 3, 1, 3, 29, 1, 19, 18, 15}
312 };
313 static const uint8_t vc1_subblkpat_bits[3][15] = {
314 { 5, 5, 5, 5, 5, 6, 4, 5, 6, 5, 4, 5, 4, 5, 1},
315 { 4, 3, 4, 4, 4, 5, 5, 4, 5, 4, 5, 4, 5, 5, 2},
316 { 3, 3, 4, 3, 4, 5, 5, 3, 5, 4, 5, 4, 5, 5, 4}
317 };
318
319 /* MV differential tables, p265 */
320 static const uint16_t vc1_mv_diff_codes[4][73] = {
321 {
322 0, 2, 3, 8, 576, 3, 2, 6,
323 5, 577, 578, 7, 8, 9, 40, 19,
324 37, 82, 21, 22, 23, 579, 580, 166,
325 96, 167, 49, 194, 195, 581, 582, 583,
326 292, 293, 294, 13, 2, 7, 24, 50,
327 102, 295, 13, 7, 8, 18, 50, 103,
328 38, 20, 21, 22, 39, 204, 103, 23,
329 24, 25, 104, 410, 105, 106, 107, 108,
330 109, 220, 411, 442, 222, 443, 446, 447,
331 7 /* 73 elements */
332 },
333 {
334 0, 4, 5, 3, 4, 3, 4, 5,
335 20, 6, 21, 44, 45, 46, 3008, 95,
336 112, 113, 57, 3009, 3010, 116, 117, 3011,
337 118, 3012, 3013, 3014, 3015, 3016, 3017, 3018,
338 3019, 3020, 3021, 3022, 1, 4, 15, 160,
339 161, 41, 6, 11, 42, 162, 43, 119,
340 56, 57, 58, 163, 236, 237, 3023, 119,
341 120, 242, 122, 486, 1512, 487, 246, 494,
342 1513, 495, 1514, 1515, 1516, 1517, 1518, 1519,
343 31 /* 73 elements */
344 },
345 {
346 0, 512, 513, 514, 515, 2, 3, 258,
347 259, 260, 261, 262, 263, 264, 265, 266,
348 267, 268, 269, 270, 271, 272, 273, 274,
349 275, 276, 277, 278, 279, 280, 281, 282,
350 283, 284, 285, 286, 1, 5, 287, 288,
351 289, 290, 6, 7, 291, 292, 293, 294,
352 295, 296, 297, 298, 299, 300, 301, 302,
353 303, 304, 305, 306, 307, 308, 309, 310,
354 311, 312, 313, 314, 315, 316, 317, 318,
355 319 /* 73 elements */
356 },
357 {
358 0, 1, 1, 2, 3, 4, 1, 5,
359 4, 3, 5, 8, 6, 9, 10, 11,
360 12, 7, 104, 14, 105, 4, 10, 15,
361 11, 6, 14, 8, 106, 107, 108, 15,
362 109, 9, 55, 10, 1, 2, 1, 2,
363 3, 12, 6, 2, 6, 7, 28, 7,
364 15, 8, 5, 18, 29, 152, 77, 24,
365 25, 26, 39, 108, 13, 109, 55, 56,
366 57, 116, 11, 153, 234, 235, 118, 119,
367 15 /* 73 elements */
368 }
369 };
370 static const uint8_t vc1_mv_diff_bits[4][73] = {
371 {
372 6, 7, 7, 8, 14, 6, 5, 6, 7, 14, 14, 6, 6, 6, 8, 9,
373 10, 9, 7, 7, 7, 14, 14, 10, 9, 10, 8, 10, 10, 14, 14, 14,
374 13, 13, 13, 6, 3, 5, 6, 8, 9, 13, 5, 4, 4, 5, 7, 9,
375 6, 5, 5, 5, 6, 9, 8, 5, 5, 5, 7, 10, 7, 7, 7, 7,
376 7, 8, 10, 9, 8, 9, 9, 9, 3 /* 73 elements */
377 },
378 {
379 5, 7, 7, 6, 6, 5, 5, 6, 7, 5, 7, 8, 8, 8, 14, 9,
380 9, 9, 8, 14, 14, 9, 9, 14, 9, 14, 14, 14, 14, 14, 14, 14,
381 14, 14, 14, 14, 2, 3, 6, 8, 8, 6, 3, 4, 6, 8, 6, 9,
382 6, 6, 6, 8, 8, 8, 14, 7, 7, 8, 7, 9, 13, 9, 8, 9,
383 13, 9, 13, 13, 13, 13, 13, 13, 5 /* 73 elements */
384
385 },
386 {
387 3, 12, 12, 12, 12, 3, 4, 11, 11, 11, 11, 11, 11, 11, 11, 11,
388 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
389 11, 11, 11, 11, 1, 5, 11, 11, 11, 11, 4, 4, 11, 11, 11, 11,
390 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
391 11, 11, 11, 11, 11, 11, 11, 11, 11 /* 73 elements */
392 },
393 {
394 15, 11, 15, 15, 15, 15, 12, 15, 12, 11, 12, 12, 15, 12, 12, 12,
395 12, 15, 15, 12, 15, 10, 11, 12, 11, 10, 11, 10, 15, 15, 15, 11,
396 15, 10, 14, 10, 4, 4, 5, 7, 8, 9, 5, 3, 4, 5, 6, 8,
397 5, 4, 3, 5, 6, 8, 7, 5, 5, 5, 6, 7, 9, 7, 6, 6,
398 6, 7, 10, 8, 8, 8, 7, 7, 4 /* 73 elements */
399 }
400 };
401
402 /* DC differentials low+hi-mo, p217 are the same as in msmpeg4data .h */
403
404 /* Scantables/ZZ scan are at 11.9 (p262) and 8.1.1.12 (p10) */
405
406 #endif /* VC1DATA_H */