2 * VC-1 and WMV3 decoder
3 * copyright (c) 2006 Konstantin Shishkov
4 * (c) 2005 anonymous, Alex Beregszaszi, Michael Niedermayer
6 * This file is part of FFmpeg.
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.
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.
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
31 /** Table for conversion between TTBLK and TTMB */
32 static const int ttblk_to_tt[3][8] = {
33 { TT_8X4, TT_4X8, TT_8X8, TT_4X4, TT_8X4_TOP, TT_8X4_BOTTOM, TT_4X8_RIGHT, TT_4X8_LEFT },
34 { TT_8X8, TT_4X8_RIGHT, TT_4X8_LEFT, TT_4X4, TT_8X4, TT_4X8, TT_8X4_BOTTOM, TT_8X4_TOP },
35 { TT_8X8, TT_4X8, TT_4X4, TT_8X4_BOTTOM, TT_4X8_RIGHT, TT_4X8_LEFT, TT_8X4, TT_8X4_TOP }
38 static const int ttfrm_to_tt[4] = { TT_8X8, TT_8X4, TT_4X8, TT_4X4 };
40 /** MV P mode - the 5th element is only used for mode 1 */
41 static const uint8_t mv_pmode_table[2][5] = {
42 { MV_PMODE_1MV_HPEL_BILIN, MV_PMODE_1MV, MV_PMODE_1MV_HPEL, MV_PMODE_INTENSITY_COMP, MV_PMODE_MIXED_MV },
43 { MV_PMODE_1MV, MV_PMODE_MIXED_MV, MV_PMODE_1MV_HPEL, MV_PMODE_INTENSITY_COMP, MV_PMODE_1MV_HPEL_BILIN }
45 static const uint8_t mv_pmode_table2[2][4] = {
46 { MV_PMODE_1MV_HPEL_BILIN, MV_PMODE_1MV, MV_PMODE_1MV_HPEL, MV_PMODE_MIXED_MV },
47 { MV_PMODE_1MV, MV_PMODE_MIXED_MV, MV_PMODE_1MV_HPEL, MV_PMODE_1MV_HPEL_BILIN }
50 static const int fps_nr[5] = { 24, 25, 30, 50, 60 },
51 fps_dr[2] = { 1000, 1001 };
52 static const uint8_t pquant_table[3][32] = {
53 { /* Implicit quantizer */
54 0, 1, 2, 3, 4, 5, 6, 7, 8, 6, 7, 8, 9, 10, 11, 12,
55 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 29, 31
57 { /* Explicit quantizer, pquantizer uniform */
58 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
59 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
61 { /* Explicit quantizer, pquantizer non-uniform */
62 0, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
63 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 31
67 /** @name VC-1 VLC tables and defines
68 * @todo TODO move this into the context
71 #define VC1_BFRACTION_VLC_BITS 7
72 static VLC vc1_bfraction_vlc;
73 #define VC1_IMODE_VLC_BITS 4
74 static VLC vc1_imode_vlc;
75 #define VC1_NORM2_VLC_BITS 3
76 static VLC vc1_norm2_vlc;
77 #define VC1_NORM6_VLC_BITS 9
78 static VLC vc1_norm6_vlc;
79 /* Could be optimized, one table only needs 8 bits */
80 #define VC1_TTMB_VLC_BITS 9 //12
81 static VLC vc1_ttmb_vlc[3];
82 #define VC1_MV_DIFF_VLC_BITS 9 //15
83 static VLC vc1_mv_diff_vlc[4];
84 #define VC1_CBPCY_P_VLC_BITS 9 //14
85 static VLC vc1_cbpcy_p_vlc[4];
86 #define VC1_4MV_BLOCK_PATTERN_VLC_BITS 6
87 static VLC vc1_4mv_block_pattern_vlc[4];
88 #define VC1_TTBLK_VLC_BITS 5
89 static VLC vc1_ttblk_vlc[3];
90 #define VC1_SUBBLKPAT_VLC_BITS 6
91 static VLC vc1_subblkpat_vlc[3];
93 static VLC vc1_ac_coeff_table[8];
97 #if 0 //original bfraction from vc9data.h, not conforming to standard
98 /* Denominator used for vc1_bfraction_lut */
99 #define B_FRACTION_DEN 840
101 /* bfraction is fractional, we scale to the GCD 3*5*7*8 = 840 */
102 const int16_t vc1_bfraction_lut[23] = {
103 420 /*1/2*/, 280 /*1/3*/, 560 /*2/3*/, 210 /*1/4*/,
104 630 /*3/4*/, 168 /*1/5*/, 336 /*2/5*/,
105 504 /*3/5*/, 672 /*4/5*/, 140 /*1/6*/, 700 /*5/6*/,
106 120 /*1/7*/, 240 /*2/7*/, 360 /*3/7*/, 480 /*4/7*/,
107 600 /*5/7*/, 720 /*6/7*/, 105 /*1/8*/, 315 /*3/8*/,
108 525 /*5/8*/, 735 /*7/8*/,
109 -1 /*inv.*/, 0 /*BI fm*/
112 /* Denominator used for vc1_bfraction_lut */
113 #define B_FRACTION_DEN 256
115 /* pre-computed scales for all bfractions and base=256 */
116 static const int16_t vc1_bfraction_lut[23] = {
117 128 /*1/2*/, 85 /*1/3*/, 170 /*2/3*/, 64 /*1/4*/,
118 192 /*3/4*/, 51 /*1/5*/, 102 /*2/5*/,
119 153 /*3/5*/, 204 /*4/5*/, 43 /*1/6*/, 215 /*5/6*/,
120 37 /*1/7*/, 74 /*2/7*/, 111 /*3/7*/, 148 /*4/7*/,
121 185 /*5/7*/, 222 /*6/7*/, 32 /*1/8*/, 96 /*3/8*/,
122 160 /*5/8*/, 224 /*7/8*/,
123 -1 /*inv.*/, 0 /*BI fm*/
127 static const uint8_t vc1_bfraction_bits[23] = {
136 static const uint8_t vc1_bfraction_codes[23] = {
147 static const AVRational vc1_pixel_aspect[16]={
166 /* BitPlane IMODE - such a small table... */
167 static const uint8_t vc1_imode_codes[7] = {
170 static const uint8_t vc1_imode_bits[7] = {
175 static const uint8_t vc1_norm2_codes[4] = {
178 static const uint8_t vc1_norm2_bits[4] = {
182 static const uint16_t vc1_norm6_codes[64] = {
183 0x001, 0x002, 0x003, 0x000, 0x004, 0x001, 0x002, 0x047, 0x005, 0x003, 0x004, 0x04B, 0x005, 0x04D, 0x04E, 0x30E,
184 0x006, 0x006, 0x007, 0x053, 0x008, 0x055, 0x056, 0x30D, 0x009, 0x059, 0x05A, 0x30C, 0x05C, 0x30B, 0x30A, 0x037,
185 0x007, 0x00A, 0x00B, 0x043, 0x00C, 0x045, 0x046, 0x309, 0x00D, 0x049, 0x04A, 0x308, 0x04C, 0x307, 0x306, 0x036,
186 0x00E, 0x051, 0x052, 0x305, 0x054, 0x304, 0x303, 0x035, 0x058, 0x302, 0x301, 0x034, 0x300, 0x033, 0x032, 0x007,
189 static const uint8_t vc1_norm6_bits[64] = {
190 1, 4, 4, 8, 4, 8, 8, 10, 4, 8, 8, 10, 8, 10, 10, 13,
191 4, 8, 8, 10, 8, 10, 10, 13, 8, 10, 10, 13, 10, 13, 13, 9,
192 4, 8, 8, 10, 8, 10, 10, 13, 8, 10, 10, 13, 10, 13, 13, 9,
193 8, 10, 10, 13, 10, 13, 13, 9, 10, 13, 13, 9, 13, 9, 9, 6,
196 static const uint8_t vc1_norm6_spec[64][5] = {
263 /* 4MV Block pattern VLC tables */
264 static const uint8_t vc1_4mv_block_pattern_codes[4][16] = {
265 { 14, 58, 59, 25, 12, 26, 15, 15, 13, 24, 27, 0, 28, 1, 2, 2},
266 { 8, 18, 19, 4, 20, 5, 30, 11, 21, 31, 6, 12, 7, 13, 14, 0},
267 { 15, 6, 7, 2, 8, 3, 28, 9, 10, 29, 4, 11, 5, 12, 13, 0},
268 { 0, 11, 12, 4, 13, 5, 30, 16, 14, 31, 6, 17, 7, 18, 19, 10}
270 static const uint8_t vc1_4mv_block_pattern_bits[4][16] = {
271 { 5, 6, 6, 5, 5, 5, 5, 4, 5, 5, 5, 3, 5, 3, 3, 2},
272 { 4, 5, 5, 4, 5, 4, 5, 4, 5, 5, 4, 4, 4, 4, 4, 2},
273 { 4, 4, 4, 4, 4, 4, 5, 4, 4, 5, 4, 4, 4, 4, 4, 3},
274 { 2, 4, 4, 4, 4, 4, 5, 5, 4, 5, 4, 5, 4, 5, 5, 4}
277 const uint8_t wmv3_dc_scale_table[32]={
278 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
281 /* P-Picture CBPCY VLC tables */
282 #if 1 // Looks like original tables are not conforming to standard at all. Are they used for old WMV?
283 static const uint16_t vc1_cbpcy_p_codes[4][64] = {
285 0, 6, 15, 13, 13, 11, 3, 13, 5, 8, 49, 10, 12, 114, 102, 119,
286 1, 54, 96, 8, 10, 111, 5, 15, 12, 10, 2, 12, 13, 115, 53, 63,
287 1, 7, 1, 7, 14, 12, 4, 14, 1, 9, 97, 11, 7, 58, 52, 62,
288 4, 103, 1, 9, 11, 56, 101, 118, 4, 110, 100, 30, 2, 5, 4, 3
291 0, 9, 1, 18, 5, 14, 237, 26, 3, 121, 3, 22, 13, 16, 6, 30,
292 2, 10, 1, 20, 12, 241, 5, 28, 16, 12, 3, 24, 28, 124, 239, 247,
293 1, 240, 1, 19, 18, 15, 4, 27, 1, 122, 2, 23, 1, 17, 7, 31,
294 1, 11, 2, 21, 19, 246, 238, 29, 17, 13, 236, 25, 58, 63, 8, 125
297 0, 201, 25, 231, 5, 221, 1, 3, 2, 414, 2, 241, 16, 225, 195, 492,
298 2, 412, 1, 240, 7, 224, 98, 245, 1, 220, 96, 5, 9, 230, 101, 247,
299 1, 102, 1, 415, 24, 3, 2, 244, 3, 54, 3, 484, 17, 114, 200, 493,
300 3, 413, 1, 4, 13, 113, 99, 485, 4, 111, 194, 243, 5, 29, 26, 31
303 0, 28, 12, 44, 3, 36, 20, 52, 2, 32, 16, 48, 8, 40, 24, 28,
304 1, 30, 14, 46, 6, 38, 22, 54, 3, 34, 18, 50, 10, 42, 26, 30,
305 1, 29, 13, 45, 5, 37, 21, 53, 2, 33, 17, 49, 9, 41, 25, 29,
306 1, 31, 15, 47, 7, 39, 23, 55, 4, 35, 19, 51, 11, 43, 27, 31
310 static const uint8_t vc1_cbpcy_p_bits[4][64] = {
312 13, 13, 7, 13, 7, 13, 13, 12, 6, 13, 7, 12, 6, 8, 8, 8,
313 5, 7, 8, 12, 6, 8, 13, 12, 7, 13, 13, 12, 6, 8, 7, 7,
314 6, 13, 8, 12, 7, 13, 13, 12, 7, 13, 8, 12, 5, 7, 7, 7,
315 6, 8, 13, 12, 6, 7, 8, 8, 5, 8, 8, 6, 3, 3, 3, 2
318 14, 13, 8, 13, 3, 13, 8, 13, 3, 7, 8, 13, 4, 13, 13, 13,
319 3, 13, 13, 13, 4, 8, 13, 13, 5, 13, 13, 13, 5, 7, 8, 8,
320 3, 8, 14, 13, 5, 13, 13, 13, 4, 7, 13, 13, 6, 13, 13, 13,
321 5, 13, 8, 13, 5, 8, 8, 13, 5, 13, 8, 13, 6, 6, 13, 7
324 13, 8, 6, 8, 4, 8, 13, 12, 4, 9, 8, 8, 5, 8, 8, 9,
325 5, 9, 10, 8, 4, 8, 7, 8, 6, 8, 7, 13, 4, 8, 7, 8,
326 5, 7, 8, 9, 6, 13, 13, 8, 4, 6, 8, 9, 5, 7, 8, 9,
327 5, 9, 9, 13, 5, 7, 7, 9, 4, 7, 8, 8, 3, 5, 5, 5
330 9, 9, 9, 9, 2, 9, 9, 9, 2, 9, 9, 9, 9, 9, 9, 8,
331 3, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8,
332 2, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8,
333 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8
337 static const uint16_t vc1_cbpcy_p_codes[4][64] = {
339 0, 1, 1, 4, 5, 1, 12, 4, 13, 14, 10, 11, 12, 7, 13, 2,
340 15, 1, 96, 1, 49, 97, 2, 100, 3, 4, 5, 101, 102, 52, 53, 4,
341 6, 7, 54, 103, 8, 9, 10, 110, 11, 12, 111, 56, 114, 58, 115, 5,
342 13, 7, 8, 9, 10, 11, 12, 30, 13, 14, 15, 118, 119, 62, 63, 3
345 0, 1, 2, 1, 3, 1, 16, 17, 5, 18, 12, 19, 13, 1, 28, 58,
346 1, 1, 1, 2, 3, 2, 3, 236, 237, 4, 5, 238, 6, 7, 239, 8,
347 9, 240, 10, 11, 121, 122, 12, 13, 14, 15, 241, 246, 16, 17, 124, 63,
348 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 247, 125
351 0, 1, 2, 3, 2, 3, 1, 4, 5, 24, 7, 13, 16, 17, 9, 5,
352 25, 1, 1, 1, 2, 3, 96, 194, 1, 2, 98, 99, 195, 200, 101, 26,
353 201, 102, 412, 413, 414, 54, 220, 111, 221, 3, 224, 113, 225, 114, 230, 29,
354 231, 415, 240, 4, 241, 484, 5, 243, 3, 244, 245, 485, 492, 493, 247, 31
357 0, 1, 1, 1, 2, 2, 3, 4, 3, 5, 6, 7, 8, 9, 10, 11,
358 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
359 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
360 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 28, 29, 30, 31
363 static const uint8_t vc1_cbpcy_p_bits[4][64] = {
365 13, 6, 5, 6, 6, 7, 7, 5, 7, 7, 6, 6, 6, 5, 6, 3,
366 7, 8, 8, 13, 7, 8, 13, 8, 13, 13, 13, 8, 8, 7, 7, 3,
367 13, 13, 7, 8, 13, 13, 13, 8, 13, 13, 8, 7, 8, 7, 8, 3,
368 13, 12, 12, 12, 12, 12, 12, 6, 12, 12, 12, 8, 8, 7, 7, 2
371 14, 3, 3, 5, 3, 4, 5, 5, 3, 5, 4, 5, 4, 6, 5, 6,
372 8, 14, 13, 8, 8, 13, 13, 8, 8, 13, 13, 8, 13, 13, 8, 13,
373 13, 8, 13, 13, 7, 7, 13, 13, 13, 13, 8, 8, 13, 13, 7, 6,
374 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 8, 7
377 13, 5, 5, 5, 4, 4, 6, 4, 4, 6, 4, 5, 5, 5, 4, 3,
378 6, 8, 10, 9, 8, 8, 7, 8, 13, 13, 7, 7, 8, 8, 7, 5,
379 8, 7, 9, 9, 9, 6, 8, 7, 8, 13, 8, 7, 8, 7, 8, 5,
380 8, 9, 8, 13, 8, 9, 13, 8, 12, 8, 8, 9, 9, 9, 8, 5
383 9, 2, 3, 9, 2, 9, 9, 9, 2, 9, 9, 9, 9, 9, 9, 9,
384 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
385 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
386 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8
391 /* MacroBlock Transform Type: 7.1.3.11, p89
393 * 8x4:B:btm 8x4:B:top 8x4:B:both,
394 * 4x8:B:right 4x8:B:left 4x8:B:both
396 * 8x4:MB:btm 8x4:MB:top 8x4,MB,both
397 * 4x8,MB,right 4x8,MB,left
399 static const uint16_t vc1_ttmb_codes[3][16] = {
402 0x002E, 0x005F, 0x0000,
403 0x0016, 0x0015, 0x0001,
405 0x02F1, 0x0179, 0x017B,
406 0x0BC0, 0x0BC1, 0x05E1,
411 0x0006, 0x0003, 0x0007,
412 0x000F, 0x000E, 0x0000,
414 0x0014, 0x0011, 0x000B,
415 0x0009, 0x0021, 0x0015,
420 0x0000, 0x000E, 0x0005,
421 0x0002, 0x0003, 0x0003,
423 0x0081, 0x0021, 0x0009,
424 0x0101, 0x0041, 0x0011,
429 static const uint8_t vc1_ttmb_bits[3][16] = {
459 /* TTBLK (Transform Type per Block) tables */
460 static const uint8_t vc1_ttblk_codes[3][8] = {
461 { 0, 1, 3, 5, 16, 17, 18, 19},
462 { 3, 0, 1, 2, 3, 5, 8, 9},
463 { 1, 0, 1, 4, 6, 7, 10, 11}
465 static const uint8_t vc1_ttblk_bits[3][8] = {
466 { 2, 2, 2, 3, 5, 5, 5, 5},
467 { 2, 3, 3, 3, 3, 3, 4, 4},
468 { 2, 3, 3, 3, 3, 3, 4, 4}
471 /* SUBBLKPAT tables, p93-94, reordered */
472 static const uint8_t vc1_subblkpat_codes[3][15] = {
473 { 14, 12, 7, 11, 9, 26, 2, 10, 27, 8, 0, 6, 1, 15, 1},
474 { 14, 0, 8, 15, 10, 4, 23, 13, 5, 9, 25, 3, 24, 22, 1},
475 { 5, 6, 2, 2, 8, 0, 28, 3, 1, 3, 29, 1, 19, 18, 15}
477 static const uint8_t vc1_subblkpat_bits[3][15] = {
478 { 5, 5, 5, 5, 5, 6, 4, 5, 6, 5, 4, 5, 4, 5, 1},
479 { 4, 3, 4, 4, 4, 5, 5, 4, 5, 4, 5, 4, 5, 5, 2},
480 { 3, 3, 4, 3, 4, 5, 5, 3, 5, 4, 5, 4, 5, 5, 4}
483 /* MV differential tables, p265 */
484 static const uint16_t vc1_mv_diff_codes[4][73] = {
486 0, 2, 3, 8, 576, 3, 2, 6,
487 5, 577, 578, 7, 8, 9, 40, 19,
488 37, 82, 21, 22, 23, 579, 580, 166,
489 96, 167, 49, 194, 195, 581, 582, 583,
490 292, 293, 294, 13, 2, 7, 24, 50,
491 102, 295, 13, 7, 8, 18, 50, 103,
492 38, 20, 21, 22, 39, 204, 103, 23,
493 24, 25, 104, 410, 105, 106, 107, 108,
494 109, 220, 411, 442, 222, 443, 446, 447,
498 0, 4, 5, 3, 4, 3, 4, 5,
499 20, 6, 21, 44, 45, 46, 3008, 95,
500 112, 113, 57, 3009, 3010, 116, 117, 3011,
501 118, 3012, 3013, 3014, 3015, 3016, 3017, 3018,
502 3019, 3020, 3021, 3022, 1, 4, 15, 160,
503 161, 41, 6, 11, 42, 162, 43, 119,
504 56, 57, 58, 163, 236, 237, 3023, 119,
505 120, 242, 122, 486, 1512, 487, 246, 494,
506 1513, 495, 1514, 1515, 1516, 1517, 1518, 1519,
510 0, 512, 513, 514, 515, 2, 3, 258,
511 259, 260, 261, 262, 263, 264, 265, 266,
512 267, 268, 269, 270, 271, 272, 273, 274,
513 275, 276, 277, 278, 279, 280, 281, 282,
514 283, 284, 285, 286, 1, 5, 287, 288,
515 289, 290, 6, 7, 291, 292, 293, 294,
516 295, 296, 297, 298, 299, 300, 301, 302,
517 303, 304, 305, 306, 307, 308, 309, 310,
518 311, 312, 313, 314, 315, 316, 317, 318,
519 319 /* 73 elements */
522 0, 1, 1, 2, 3, 4, 1, 5,
523 4, 3, 5, 8, 6, 9, 10, 11,
524 12, 7, 104, 14, 105, 4, 10, 15,
525 11, 6, 14, 8, 106, 107, 108, 15,
526 109, 9, 55, 10, 1, 2, 1, 2,
527 3, 12, 6, 2, 6, 7, 28, 7,
528 15, 8, 5, 18, 29, 152, 77, 24,
529 25, 26, 39, 108, 13, 109, 55, 56,
530 57, 116, 11, 153, 234, 235, 118, 119,
534 static const uint8_t vc1_mv_diff_bits[4][73] = {
536 6, 7, 7, 8, 14, 6, 5, 6, 7, 14, 14, 6, 6, 6, 8, 9,
537 10, 9, 7, 7, 7, 14, 14, 10, 9, 10, 8, 10, 10, 14, 14, 14,
538 13, 13, 13, 6, 3, 5, 6, 8, 9, 13, 5, 4, 4, 5, 7, 9,
539 6, 5, 5, 5, 6, 9, 8, 5, 5, 5, 7, 10, 7, 7, 7, 7,
540 7, 8, 10, 9, 8, 9, 9, 9, 3 /* 73 elements */
543 5, 7, 7, 6, 6, 5, 5, 6, 7, 5, 7, 8, 8, 8, 14, 9,
544 9, 9, 8, 14, 14, 9, 9, 14, 9, 14, 14, 14, 14, 14, 14, 14,
545 14, 14, 14, 14, 2, 3, 6, 8, 8, 6, 3, 4, 6, 8, 6, 9,
546 6, 6, 6, 8, 8, 8, 14, 7, 7, 8, 7, 9, 13, 9, 8, 9,
547 13, 9, 13, 13, 13, 13, 13, 13, 5 /* 73 elements */
551 3, 12, 12, 12, 12, 3, 4, 11, 11, 11, 11, 11, 11, 11, 11, 11,
552 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
553 11, 11, 11, 11, 1, 5, 11, 11, 11, 11, 4, 4, 11, 11, 11, 11,
554 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
555 11, 11, 11, 11, 11, 11, 11, 11, 11 /* 73 elements */
558 15, 11, 15, 15, 15, 15, 12, 15, 12, 11, 12, 12, 15, 12, 12, 12,
559 12, 15, 15, 12, 15, 10, 11, 12, 11, 10, 11, 10, 15, 15, 15, 11,
560 15, 10, 14, 10, 4, 4, 5, 7, 8, 9, 5, 3, 4, 5, 6, 8,
561 5, 4, 3, 5, 6, 8, 7, 5, 5, 5, 6, 7, 9, 7, 6, 6,
562 6, 7, 10, 8, 8, 8, 7, 7, 4 /* 73 elements */
566 /* DC differentials low+hi-mo, p217 are the same as in msmpeg4data .h */
568 /* Scantables/ZZ scan are at 11.9 (p262) and 8.1.1.12 (p10) */
569 static const int8_t vc1_normal_zz[64] = {
570 0, 8, 1, 2, 9, 16, 24, 17,
571 10, 3, 4, 11, 18, 25, 32, 40,
572 33, 48, 26, 19, 12, 5, 6, 13,
573 20, 27, 34, 41, 56, 49, 57, 42,
574 35, 28, 21, 14, 7, 15, 22, 29,
575 36, 43, 50, 58, 51, 59, 44, 37,
576 30, 23, 31, 38, 45, 52, 60, 53,
577 61, 46, 39, 47, 54, 62, 55, 63
580 static const int8_t vc1_horizontal_zz [64] = /* Table 227 */
582 0, 1, 8, 2, 3, 9, 16, 24,
583 17, 10, 4, 5, 11, 18, 25, 32,
584 40, 48, 33, 26, 19, 12, 6, 7,
585 13, 20, 27, 34, 41, 56, 49, 57,
586 42, 35, 28, 21, 14, 15, 22, 29,
587 36, 43, 50, 58, 51, 44, 37, 30,
588 23, 31, 38, 45, 52, 59, 60, 53,
589 46, 39, 47, 54, 61, 62, 55, 63
592 static const int8_t vc1_vertical_zz [64] = /* Table 228 */
594 0, 8, 16, 1, 24, 32, 40, 9,
595 2, 3, 10, 17, 25, 48, 56, 41,
596 33, 26, 18, 11, 4, 5, 12, 19,
597 27, 34, 49, 57, 50, 42, 35, 28,
598 20, 13, 6, 7, 14, 21, 29, 36,
599 43, 51, 58, 59, 52, 44, 37, 30,
600 22, 15, 23, 31, 38, 45, 60, 53,
601 46, 39, 47, 54, 61, 62, 55, 63
604 static const int8_t vc1_simple_progressive_8x8_zz [64] =
607 0, 8, 1, 2, 9, 16, 24, 17,
608 10, 3, 4, 11, 18, 25, 32, 40,
609 48, 56, 41, 33, 26, 19, 12, 5,
610 6, 13, 20, 27, 34, 49, 57, 58,
611 50, 42, 35, 28, 21, 14, 7, 15,
612 22, 29, 36, 43, 51, 59, 60, 52,
613 44, 37, 30, 23, 31, 38, 45, 53,
614 61, 62, 54, 46, 39, 47, 55, 63
617 static const int8_t vc1_simple_progressive_8x4_zz [32] = /* Table 230 */
619 0, 1, 2, 8, 3, 9, 10, 16,
620 4, 11, 17, 24, 18, 12, 5, 19,
621 25, 13, 20, 26, 27, 6, 21, 28,
622 14, 22, 29, 7, 30, 15, 23, 31
625 static const int8_t vc1_simple_progressive_4x8_zz [32] = /* Table 231 */
638 static const int8_t vc1_simple_progressive_4x4_zz [16] =
646 static const int8_t vc1_adv_progressive_8x4_zz [32] = /* Table 233 */
648 0, 8, 1, 16, 2, 9, 10, 3,
649 24, 17, 4, 11, 18, 12, 5, 19,
650 25, 13, 20, 26, 27, 6, 21, 28,
651 14, 22, 29, 7, 30, 15, 23, 31
654 static const int8_t vc1_adv_progressive_4x8_zz [32] = /* Table 234 */
666 static const int8_t vc1_adv_interlaced_8x8_zz [64] = /* Table 235 */
668 0, 8, 1, 16, 24, 9, 2, 32,
669 40, 48, 56, 17, 10, 3, 25, 18,
670 11, 4, 33, 41, 49, 57, 26, 34,
671 42, 50, 58, 19, 12, 5, 27, 20,
672 13, 6, 35, 28, 21, 14, 7, 15,
673 22, 29, 36, 43, 51, 59, 60, 52,
674 44, 37, 30, 23, 31, 38, 45, 53,
675 61, 62, 54, 46, 39, 47, 55, 63
678 static const int8_t vc1_adv_interlaced_8x4_zz [32] = /* Table 236 */
680 0, 8, 16, 24, 1, 9, 2, 17,
681 25, 10, 3, 18, 26, 4, 11, 19,
682 12, 5, 13, 20, 27, 6, 21, 28,
683 14, 22, 29, 7, 30, 15, 23, 31
686 static const int8_t vc1_adv_interlaced_4x8_zz [32] = /* Table 237 */
698 static const int8_t vc1_adv_interlaced_4x4_zz [16] = /* Table 238 */
707 /* DQScale as specified in 8.1.3.9 - almost identical to 0x40000/i */
708 static const int32_t vc1_dqscale[63] = {
709 0x40000, 0x20000, 0x15555, 0x10000, 0xCCCD, 0xAAAB, 0x9249, 0x8000,
710 0x71C7, 0x6666, 0x5D17, 0x5555, 0x4EC5, 0x4925, 0x4444, 0x4000,
711 0x3C3C, 0x38E4, 0x35E5, 0x3333, 0x30C3, 0x2E8C, 0x2C86, 0x2AAB,
712 0x28F6, 0x2762, 0x25ED, 0x2492, 0x234F, 0x2222, 0x2108, 0x2000,
713 0x1F08, 0x1E1E, 0x1D42, 0x1C72, 0x1BAD, 0x1AF3, 0x1A42, 0x199A,
714 0x18FA, 0x1862, 0x17D0, 0x1746, 0x16C1, 0x1643, 0x15CA, 0x1555,
715 0x14E6, 0x147B, 0x1414, 0x13B1, 0x1352, 0x12F7, 0x129E, 0x1249,
716 0x11F7, 0x11A8, 0x115B, 0x1111, 0x10C9, 0x1084, 0x1000
718 #endif /* VC1DATA_H */