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
32 /** Table for conversion between TTBLK and TTMB */
33 const int ff_vc1_ttblk_to_tt[3][8] = {
34 { TT_8X4, TT_4X8, TT_8X8, TT_4X4, TT_8X4_TOP, TT_8X4_BOTTOM, TT_4X8_RIGHT, TT_4X8_LEFT },
35 { TT_8X8, TT_4X8_RIGHT, TT_4X8_LEFT, TT_4X4, TT_8X4, TT_4X8, TT_8X4_BOTTOM, TT_8X4_TOP },
36 { TT_8X8, TT_4X8, TT_4X4, TT_8X4_BOTTOM, TT_4X8_RIGHT, TT_4X8_LEFT, TT_8X4, TT_8X4_TOP }
39 const int ff_vc1_ttfrm_to_tt[4] = { TT_8X8, TT_8X4, TT_4X8, TT_4X4 };
41 /** MV P mode - the 5th element is only used for mode 1 */
42 const uint8_t ff_vc1_mv_pmode_table[2][5] = {
43 { MV_PMODE_1MV_HPEL_BILIN, MV_PMODE_1MV, MV_PMODE_1MV_HPEL, MV_PMODE_INTENSITY_COMP, MV_PMODE_MIXED_MV },
44 { MV_PMODE_1MV, MV_PMODE_MIXED_MV, MV_PMODE_1MV_HPEL, MV_PMODE_INTENSITY_COMP, MV_PMODE_1MV_HPEL_BILIN }
46 const uint8_t ff_vc1_mv_pmode_table2[2][4] = {
47 { MV_PMODE_1MV_HPEL_BILIN, MV_PMODE_1MV, MV_PMODE_1MV_HPEL, MV_PMODE_MIXED_MV },
48 { MV_PMODE_1MV, MV_PMODE_MIXED_MV, MV_PMODE_1MV_HPEL, MV_PMODE_1MV_HPEL_BILIN }
51 const int ff_vc1_fps_nr[5] = { 24, 25, 30, 50, 60 },
52 ff_vc1_fps_dr[2] = { 1000, 1001 };
53 const uint8_t ff_vc1_pquant_table[3][32] = {
54 { /* Implicit quantizer */
55 0, 1, 2, 3, 4, 5, 6, 7, 8, 6, 7, 8, 9, 10, 11, 12,
56 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 29, 31
58 { /* Explicit quantizer, pquantizer uniform */
59 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
60 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
62 { /* Explicit quantizer, pquantizer non-uniform */
63 0, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
64 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 31
68 /** @name VC-1 VLC tables and defines
69 * @todo TODO move this into the context
72 #define VC1_BFRACTION_VLC_BITS 7
73 VLC ff_vc1_bfraction_vlc;
74 #define VC1_IMODE_VLC_BITS 4
76 #define VC1_NORM2_VLC_BITS 3
78 #define VC1_NORM6_VLC_BITS 9
80 /* Could be optimized, one table only needs 8 bits */
81 #define VC1_TTMB_VLC_BITS 9 //12
82 VLC ff_vc1_ttmb_vlc[3];
83 #define VC1_MV_DIFF_VLC_BITS 9 //15
84 VLC ff_vc1_mv_diff_vlc[4];
85 #define VC1_CBPCY_P_VLC_BITS 9 //14
86 VLC ff_vc1_cbpcy_p_vlc[4];
87 #define VC1_4MV_BLOCK_PATTERN_VLC_BITS 6
88 VLC ff_vc1_4mv_block_pattern_vlc[4];
89 #define VC1_TTBLK_VLC_BITS 5
90 VLC ff_vc1_ttblk_vlc[3];
91 #define VC1_SUBBLKPAT_VLC_BITS 6
92 VLC ff_vc1_subblkpat_vlc[3];
94 VLC ff_vc1_ac_coeff_table[8];
98 #if B_FRACTION_DEN==840 //original bfraction from vc9data.h, not conforming to standard
99 /* bfraction is fractional, we scale to the GCD 3*5*7*8 = 840 */
100 const int16_t ff_vc1_bfraction_lut[23] = {
101 420 /*1/2*/, 280 /*1/3*/, 560 /*2/3*/, 210 /*1/4*/,
102 630 /*3/4*/, 168 /*1/5*/, 336 /*2/5*/,
103 504 /*3/5*/, 672 /*4/5*/, 140 /*1/6*/, 700 /*5/6*/,
104 120 /*1/7*/, 240 /*2/7*/, 360 /*3/7*/, 480 /*4/7*/,
105 600 /*5/7*/, 720 /*6/7*/, 105 /*1/8*/, 315 /*3/8*/,
106 525 /*5/8*/, 735 /*7/8*/,
107 -1 /*inv.*/, 0 /*BI fm*/
110 /* pre-computed scales for all bfractions and base=256 */
111 const int16_t ff_vc1_bfraction_lut[23] = {
112 128 /*1/2*/, 85 /*1/3*/, 170 /*2/3*/, 64 /*1/4*/,
113 192 /*3/4*/, 51 /*1/5*/, 102 /*2/5*/,
114 153 /*3/5*/, 204 /*4/5*/, 43 /*1/6*/, 215 /*5/6*/,
115 37 /*1/7*/, 74 /*2/7*/, 111 /*3/7*/, 148 /*4/7*/,
116 185 /*5/7*/, 222 /*6/7*/, 32 /*1/8*/, 96 /*3/8*/,
117 160 /*5/8*/, 224 /*7/8*/,
118 -1 /*inv.*/, 0 /*BI fm*/
122 const uint8_t ff_vc1_bfraction_bits[23] = {
131 const uint8_t ff_vc1_bfraction_codes[23] = {
142 const AVRational ff_vc1_pixel_aspect[16]={
161 /* BitPlane IMODE - such a small table... */
162 const uint8_t ff_vc1_imode_codes[7] = {
165 const uint8_t ff_vc1_imode_bits[7] = {
170 const uint8_t ff_vc1_norm2_codes[4] = {
173 const uint8_t ff_vc1_norm2_bits[4] = {
177 const uint16_t ff_vc1_norm6_codes[64] = {
178 0x001, 0x002, 0x003, 0x000, 0x004, 0x001, 0x002, 0x047, 0x005, 0x003, 0x004, 0x04B, 0x005, 0x04D, 0x04E, 0x30E,
179 0x006, 0x006, 0x007, 0x053, 0x008, 0x055, 0x056, 0x30D, 0x009, 0x059, 0x05A, 0x30C, 0x05C, 0x30B, 0x30A, 0x037,
180 0x007, 0x00A, 0x00B, 0x043, 0x00C, 0x045, 0x046, 0x309, 0x00D, 0x049, 0x04A, 0x308, 0x04C, 0x307, 0x306, 0x036,
181 0x00E, 0x051, 0x052, 0x305, 0x054, 0x304, 0x303, 0x035, 0x058, 0x302, 0x301, 0x034, 0x300, 0x033, 0x032, 0x007,
184 const uint8_t ff_vc1_norm6_bits[64] = {
185 1, 4, 4, 8, 4, 8, 8, 10, 4, 8, 8, 10, 8, 10, 10, 13,
186 4, 8, 8, 10, 8, 10, 10, 13, 8, 10, 10, 13, 10, 13, 13, 9,
187 4, 8, 8, 10, 8, 10, 10, 13, 8, 10, 10, 13, 10, 13, 13, 9,
188 8, 10, 10, 13, 10, 13, 13, 9, 10, 13, 13, 9, 13, 9, 9, 6,
191 const uint8_t ff_vc1_norm6_spec[64][5] = {
258 /* 4MV Block pattern VLC tables */
259 const uint8_t ff_vc1_4mv_block_pattern_codes[4][16] = {
260 { 14, 58, 59, 25, 12, 26, 15, 15, 13, 24, 27, 0, 28, 1, 2, 2},
261 { 8, 18, 19, 4, 20, 5, 30, 11, 21, 31, 6, 12, 7, 13, 14, 0},
262 { 15, 6, 7, 2, 8, 3, 28, 9, 10, 29, 4, 11, 5, 12, 13, 0},
263 { 0, 11, 12, 4, 13, 5, 30, 16, 14, 31, 6, 17, 7, 18, 19, 10}
265 const uint8_t ff_vc1_4mv_block_pattern_bits[4][16] = {
266 { 5, 6, 6, 5, 5, 5, 5, 4, 5, 5, 5, 3, 5, 3, 3, 2},
267 { 4, 5, 5, 4, 5, 4, 5, 4, 5, 5, 4, 4, 4, 4, 4, 2},
268 { 4, 4, 4, 4, 4, 4, 5, 4, 4, 5, 4, 4, 4, 4, 4, 3},
269 { 2, 4, 4, 4, 4, 4, 5, 5, 4, 5, 4, 5, 4, 5, 5, 4}
272 const uint8_t wmv3_dc_scale_table[32]={
273 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
276 /* P-Picture CBPCY VLC tables */
277 #if 1 // Looks like original tables are not conforming to standard at all. Are they used for old WMV?
278 const uint16_t ff_vc1_cbpcy_p_codes[4][64] = {
280 0, 6, 15, 13, 13, 11, 3, 13, 5, 8, 49, 10, 12, 114, 102, 119,
281 1, 54, 96, 8, 10, 111, 5, 15, 12, 10, 2, 12, 13, 115, 53, 63,
282 1, 7, 1, 7, 14, 12, 4, 14, 1, 9, 97, 11, 7, 58, 52, 62,
283 4, 103, 1, 9, 11, 56, 101, 118, 4, 110, 100, 30, 2, 5, 4, 3
286 0, 9, 1, 18, 5, 14, 237, 26, 3, 121, 3, 22, 13, 16, 6, 30,
287 2, 10, 1, 20, 12, 241, 5, 28, 16, 12, 3, 24, 28, 124, 239, 247,
288 1, 240, 1, 19, 18, 15, 4, 27, 1, 122, 2, 23, 1, 17, 7, 31,
289 1, 11, 2, 21, 19, 246, 238, 29, 17, 13, 236, 25, 58, 63, 8, 125
292 0, 201, 25, 231, 5, 221, 1, 3, 2, 414, 2, 241, 16, 225, 195, 492,
293 2, 412, 1, 240, 7, 224, 98, 245, 1, 220, 96, 5, 9, 230, 101, 247,
294 1, 102, 1, 415, 24, 3, 2, 244, 3, 54, 3, 484, 17, 114, 200, 493,
295 3, 413, 1, 4, 13, 113, 99, 485, 4, 111, 194, 243, 5, 29, 26, 31
298 0, 28, 12, 44, 3, 36, 20, 52, 2, 32, 16, 48, 8, 40, 24, 28,
299 1, 30, 14, 46, 6, 38, 22, 54, 3, 34, 18, 50, 10, 42, 26, 30,
300 1, 29, 13, 45, 5, 37, 21, 53, 2, 33, 17, 49, 9, 41, 25, 29,
301 1, 31, 15, 47, 7, 39, 23, 55, 4, 35, 19, 51, 11, 43, 27, 31
305 const uint8_t ff_vc1_cbpcy_p_bits[4][64] = {
307 13, 13, 7, 13, 7, 13, 13, 12, 6, 13, 7, 12, 6, 8, 8, 8,
308 5, 7, 8, 12, 6, 8, 13, 12, 7, 13, 13, 12, 6, 8, 7, 7,
309 6, 13, 8, 12, 7, 13, 13, 12, 7, 13, 8, 12, 5, 7, 7, 7,
310 6, 8, 13, 12, 6, 7, 8, 8, 5, 8, 8, 6, 3, 3, 3, 2
313 14, 13, 8, 13, 3, 13, 8, 13, 3, 7, 8, 13, 4, 13, 13, 13,
314 3, 13, 13, 13, 4, 8, 13, 13, 5, 13, 13, 13, 5, 7, 8, 8,
315 3, 8, 14, 13, 5, 13, 13, 13, 4, 7, 13, 13, 6, 13, 13, 13,
316 5, 13, 8, 13, 5, 8, 8, 13, 5, 13, 8, 13, 6, 6, 13, 7
319 13, 8, 6, 8, 4, 8, 13, 12, 4, 9, 8, 8, 5, 8, 8, 9,
320 5, 9, 10, 8, 4, 8, 7, 8, 6, 8, 7, 13, 4, 8, 7, 8,
321 5, 7, 8, 9, 6, 13, 13, 8, 4, 6, 8, 9, 5, 7, 8, 9,
322 5, 9, 9, 13, 5, 7, 7, 9, 4, 7, 8, 8, 3, 5, 5, 5
325 9, 9, 9, 9, 2, 9, 9, 9, 2, 9, 9, 9, 9, 9, 9, 8,
326 3, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8,
327 2, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8,
328 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8
332 const uint16_t ff_vc1_cbpcy_p_codes[4][64] = {
334 0, 1, 1, 4, 5, 1, 12, 4, 13, 14, 10, 11, 12, 7, 13, 2,
335 15, 1, 96, 1, 49, 97, 2, 100, 3, 4, 5, 101, 102, 52, 53, 4,
336 6, 7, 54, 103, 8, 9, 10, 110, 11, 12, 111, 56, 114, 58, 115, 5,
337 13, 7, 8, 9, 10, 11, 12, 30, 13, 14, 15, 118, 119, 62, 63, 3
340 0, 1, 2, 1, 3, 1, 16, 17, 5, 18, 12, 19, 13, 1, 28, 58,
341 1, 1, 1, 2, 3, 2, 3, 236, 237, 4, 5, 238, 6, 7, 239, 8,
342 9, 240, 10, 11, 121, 122, 12, 13, 14, 15, 241, 246, 16, 17, 124, 63,
343 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 247, 125
346 0, 1, 2, 3, 2, 3, 1, 4, 5, 24, 7, 13, 16, 17, 9, 5,
347 25, 1, 1, 1, 2, 3, 96, 194, 1, 2, 98, 99, 195, 200, 101, 26,
348 201, 102, 412, 413, 414, 54, 220, 111, 221, 3, 224, 113, 225, 114, 230, 29,
349 231, 415, 240, 4, 241, 484, 5, 243, 3, 244, 245, 485, 492, 493, 247, 31
352 0, 1, 1, 1, 2, 2, 3, 4, 3, 5, 6, 7, 8, 9, 10, 11,
353 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
354 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
355 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 28, 29, 30, 31
358 const uint8_t ff_vc1_cbpcy_p_bits[4][64] = {
360 13, 6, 5, 6, 6, 7, 7, 5, 7, 7, 6, 6, 6, 5, 6, 3,
361 7, 8, 8, 13, 7, 8, 13, 8, 13, 13, 13, 8, 8, 7, 7, 3,
362 13, 13, 7, 8, 13, 13, 13, 8, 13, 13, 8, 7, 8, 7, 8, 3,
363 13, 12, 12, 12, 12, 12, 12, 6, 12, 12, 12, 8, 8, 7, 7, 2
366 14, 3, 3, 5, 3, 4, 5, 5, 3, 5, 4, 5, 4, 6, 5, 6,
367 8, 14, 13, 8, 8, 13, 13, 8, 8, 13, 13, 8, 13, 13, 8, 13,
368 13, 8, 13, 13, 7, 7, 13, 13, 13, 13, 8, 8, 13, 13, 7, 6,
369 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 8, 7
372 13, 5, 5, 5, 4, 4, 6, 4, 4, 6, 4, 5, 5, 5, 4, 3,
373 6, 8, 10, 9, 8, 8, 7, 8, 13, 13, 7, 7, 8, 8, 7, 5,
374 8, 7, 9, 9, 9, 6, 8, 7, 8, 13, 8, 7, 8, 7, 8, 5,
375 8, 9, 8, 13, 8, 9, 13, 8, 12, 8, 8, 9, 9, 9, 8, 5
378 9, 2, 3, 9, 2, 9, 9, 9, 2, 9, 9, 9, 9, 9, 9, 9,
379 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
380 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
381 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8
386 /* MacroBlock Transform Type: 7.1.3.11, p89
388 * 8x4:B:btm 8x4:B:top 8x4:B:both,
389 * 4x8:B:right 4x8:B:left 4x8:B:both
391 * 8x4:MB:btm 8x4:MB:top 8x4,MB,both
392 * 4x8,MB,right 4x8,MB,left
394 const uint16_t ff_vc1_ttmb_codes[3][16] = {
397 0x002E, 0x005F, 0x0000,
398 0x0016, 0x0015, 0x0001,
400 0x02F1, 0x0179, 0x017B,
401 0x0BC0, 0x0BC1, 0x05E1,
406 0x0006, 0x0003, 0x0007,
407 0x000F, 0x000E, 0x0000,
409 0x0014, 0x0011, 0x000B,
410 0x0009, 0x0021, 0x0015,
415 0x0000, 0x000E, 0x0005,
416 0x0002, 0x0003, 0x0003,
418 0x0081, 0x0021, 0x0009,
419 0x0101, 0x0041, 0x0011,
424 const uint8_t ff_vc1_ttmb_bits[3][16] = {
454 /* TTBLK (Transform Type per Block) tables */
455 const uint8_t ff_vc1_ttblk_codes[3][8] = {
456 { 0, 1, 3, 5, 16, 17, 18, 19},
457 { 3, 0, 1, 2, 3, 5, 8, 9},
458 { 1, 0, 1, 4, 6, 7, 10, 11}
460 const uint8_t ff_vc1_ttblk_bits[3][8] = {
461 { 2, 2, 2, 3, 5, 5, 5, 5},
462 { 2, 3, 3, 3, 3, 3, 4, 4},
463 { 2, 3, 3, 3, 3, 3, 4, 4}
466 /* SUBBLKPAT tables, p93-94, reordered */
467 const uint8_t ff_vc1_subblkpat_codes[3][15] = {
468 { 14, 12, 7, 11, 9, 26, 2, 10, 27, 8, 0, 6, 1, 15, 1},
469 { 14, 0, 8, 15, 10, 4, 23, 13, 5, 9, 25, 3, 24, 22, 1},
470 { 5, 6, 2, 2, 8, 0, 28, 3, 1, 3, 29, 1, 19, 18, 15}
472 const uint8_t ff_vc1_subblkpat_bits[3][15] = {
473 { 5, 5, 5, 5, 5, 6, 4, 5, 6, 5, 4, 5, 4, 5, 1},
474 { 4, 3, 4, 4, 4, 5, 5, 4, 5, 4, 5, 4, 5, 5, 2},
475 { 3, 3, 4, 3, 4, 5, 5, 3, 5, 4, 5, 4, 5, 5, 4}
478 /* MV differential tables, p265 */
479 const uint16_t ff_vc1_mv_diff_codes[4][73] = {
481 0, 2, 3, 8, 576, 3, 2, 6,
482 5, 577, 578, 7, 8, 9, 40, 19,
483 37, 82, 21, 22, 23, 579, 580, 166,
484 96, 167, 49, 194, 195, 581, 582, 583,
485 292, 293, 294, 13, 2, 7, 24, 50,
486 102, 295, 13, 7, 8, 18, 50, 103,
487 38, 20, 21, 22, 39, 204, 103, 23,
488 24, 25, 104, 410, 105, 106, 107, 108,
489 109, 220, 411, 442, 222, 443, 446, 447,
493 0, 4, 5, 3, 4, 3, 4, 5,
494 20, 6, 21, 44, 45, 46, 3008, 95,
495 112, 113, 57, 3009, 3010, 116, 117, 3011,
496 118, 3012, 3013, 3014, 3015, 3016, 3017, 3018,
497 3019, 3020, 3021, 3022, 1, 4, 15, 160,
498 161, 41, 6, 11, 42, 162, 43, 119,
499 56, 57, 58, 163, 236, 237, 3023, 119,
500 120, 242, 122, 486, 1512, 487, 246, 494,
501 1513, 495, 1514, 1515, 1516, 1517, 1518, 1519,
505 0, 512, 513, 514, 515, 2, 3, 258,
506 259, 260, 261, 262, 263, 264, 265, 266,
507 267, 268, 269, 270, 271, 272, 273, 274,
508 275, 276, 277, 278, 279, 280, 281, 282,
509 283, 284, 285, 286, 1, 5, 287, 288,
510 289, 290, 6, 7, 291, 292, 293, 294,
511 295, 296, 297, 298, 299, 300, 301, 302,
512 303, 304, 305, 306, 307, 308, 309, 310,
513 311, 312, 313, 314, 315, 316, 317, 318,
514 319 /* 73 elements */
517 0, 1, 1, 2, 3, 4, 1, 5,
518 4, 3, 5, 8, 6, 9, 10, 11,
519 12, 7, 104, 14, 105, 4, 10, 15,
520 11, 6, 14, 8, 106, 107, 108, 15,
521 109, 9, 55, 10, 1, 2, 1, 2,
522 3, 12, 6, 2, 6, 7, 28, 7,
523 15, 8, 5, 18, 29, 152, 77, 24,
524 25, 26, 39, 108, 13, 109, 55, 56,
525 57, 116, 11, 153, 234, 235, 118, 119,
529 const uint8_t ff_vc1_mv_diff_bits[4][73] = {
531 6, 7, 7, 8, 14, 6, 5, 6, 7, 14, 14, 6, 6, 6, 8, 9,
532 10, 9, 7, 7, 7, 14, 14, 10, 9, 10, 8, 10, 10, 14, 14, 14,
533 13, 13, 13, 6, 3, 5, 6, 8, 9, 13, 5, 4, 4, 5, 7, 9,
534 6, 5, 5, 5, 6, 9, 8, 5, 5, 5, 7, 10, 7, 7, 7, 7,
535 7, 8, 10, 9, 8, 9, 9, 9, 3 /* 73 elements */
538 5, 7, 7, 6, 6, 5, 5, 6, 7, 5, 7, 8, 8, 8, 14, 9,
539 9, 9, 8, 14, 14, 9, 9, 14, 9, 14, 14, 14, 14, 14, 14, 14,
540 14, 14, 14, 14, 2, 3, 6, 8, 8, 6, 3, 4, 6, 8, 6, 9,
541 6, 6, 6, 8, 8, 8, 14, 7, 7, 8, 7, 9, 13, 9, 8, 9,
542 13, 9, 13, 13, 13, 13, 13, 13, 5 /* 73 elements */
546 3, 12, 12, 12, 12, 3, 4, 11, 11, 11, 11, 11, 11, 11, 11, 11,
547 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
548 11, 11, 11, 11, 1, 5, 11, 11, 11, 11, 4, 4, 11, 11, 11, 11,
549 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
550 11, 11, 11, 11, 11, 11, 11, 11, 11 /* 73 elements */
553 15, 11, 15, 15, 15, 15, 12, 15, 12, 11, 12, 12, 15, 12, 12, 12,
554 12, 15, 15, 12, 15, 10, 11, 12, 11, 10, 11, 10, 15, 15, 15, 11,
555 15, 10, 14, 10, 4, 4, 5, 7, 8, 9, 5, 3, 4, 5, 6, 8,
556 5, 4, 3, 5, 6, 8, 7, 5, 5, 5, 6, 7, 9, 7, 6, 6,
557 6, 7, 10, 8, 8, 8, 7, 7, 4 /* 73 elements */
561 /* DC differentials low+hi-mo, p217 are the same as in msmpeg4data .h */
563 /* Scantables/ZZ scan are at 11.9 (p262) and 8.1.1.12 (p10) */
564 const int8_t ff_vc1_normal_zz[64] = {
565 0, 8, 1, 2, 9, 16, 24, 17,
566 10, 3, 4, 11, 18, 25, 32, 40,
567 33, 48, 26, 19, 12, 5, 6, 13,
568 20, 27, 34, 41, 56, 49, 57, 42,
569 35, 28, 21, 14, 7, 15, 22, 29,
570 36, 43, 50, 58, 51, 59, 44, 37,
571 30, 23, 31, 38, 45, 52, 60, 53,
572 61, 46, 39, 47, 54, 62, 55, 63
575 const int8_t ff_vc1_horizontal_zz [64] = /* Table 227 */
577 0, 1, 8, 2, 3, 9, 16, 24,
578 17, 10, 4, 5, 11, 18, 25, 32,
579 40, 48, 33, 26, 19, 12, 6, 7,
580 13, 20, 27, 34, 41, 56, 49, 57,
581 42, 35, 28, 21, 14, 15, 22, 29,
582 36, 43, 50, 58, 51, 44, 37, 30,
583 23, 31, 38, 45, 52, 59, 60, 53,
584 46, 39, 47, 54, 61, 62, 55, 63
587 const int8_t ff_vc1_vertical_zz [64] = /* Table 228 */
589 0, 8, 16, 1, 24, 32, 40, 9,
590 2, 3, 10, 17, 25, 48, 56, 41,
591 33, 26, 18, 11, 4, 5, 12, 19,
592 27, 34, 49, 57, 50, 42, 35, 28,
593 20, 13, 6, 7, 14, 21, 29, 36,
594 43, 51, 58, 59, 52, 44, 37, 30,
595 22, 15, 23, 31, 38, 45, 60, 53,
596 46, 39, 47, 54, 61, 62, 55, 63
599 const int8_t ff_vc1_simple_progressive_8x8_zz [64] =
602 0, 8, 1, 2, 9, 16, 24, 17,
603 10, 3, 4, 11, 18, 25, 32, 40,
604 48, 56, 41, 33, 26, 19, 12, 5,
605 6, 13, 20, 27, 34, 49, 57, 58,
606 50, 42, 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
612 const int8_t ff_vc1_simple_progressive_8x4_zz [32] = /* Table 230 */
614 0, 1, 2, 8, 3, 9, 10, 16,
615 4, 11, 17, 24, 18, 12, 5, 19,
616 25, 13, 20, 26, 27, 6, 21, 28,
617 14, 22, 29, 7, 30, 15, 23, 31
620 const int8_t ff_vc1_simple_progressive_4x8_zz [32] = /* Table 231 */
633 const int8_t ff_vc1_simple_progressive_4x4_zz [16] =
641 const int8_t ff_vc1_adv_progressive_8x4_zz [32] = /* Table 233 */
643 0, 8, 1, 16, 2, 9, 10, 3,
644 24, 17, 4, 11, 18, 12, 5, 19,
645 25, 13, 20, 26, 27, 6, 21, 28,
646 14, 22, 29, 7, 30, 15, 23, 31
649 const int8_t ff_vc1_adv_progressive_4x8_zz [32] = /* Table 234 */
661 const int8_t ff_vc1_adv_interlaced_8x8_zz [64] = /* Table 235 */
663 0, 8, 1, 16, 24, 9, 2, 32,
664 40, 48, 56, 17, 10, 3, 25, 18,
665 11, 4, 33, 41, 49, 57, 26, 34,
666 42, 50, 58, 19, 12, 5, 27, 20,
667 13, 6, 35, 28, 21, 14, 7, 15,
668 22, 29, 36, 43, 51, 59, 60, 52,
669 44, 37, 30, 23, 31, 38, 45, 53,
670 61, 62, 54, 46, 39, 47, 55, 63
673 const int8_t ff_vc1_adv_interlaced_8x4_zz [32] = /* Table 236 */
675 0, 8, 16, 24, 1, 9, 2, 17,
676 25, 10, 3, 18, 26, 4, 11, 19,
677 12, 5, 13, 20, 27, 6, 21, 28,
678 14, 22, 29, 7, 30, 15, 23, 31
681 const int8_t ff_vc1_adv_interlaced_4x8_zz [32] = /* Table 237 */
693 const int8_t ff_vc1_adv_interlaced_4x4_zz [16] = /* Table 238 */
702 /* DQScale as specified in 8.1.3.9 - almost identical to 0x40000/i */
703 const int32_t ff_vc1_dqscale[63] = {
704 0x40000, 0x20000, 0x15555, 0x10000, 0xCCCD, 0xAAAB, 0x9249, 0x8000,
705 0x71C7, 0x6666, 0x5D17, 0x5555, 0x4EC5, 0x4925, 0x4444, 0x4000,
706 0x3C3C, 0x38E4, 0x35E5, 0x3333, 0x30C3, 0x2E8C, 0x2C86, 0x2AAB,
707 0x28F6, 0x2762, 0x25ED, 0x2492, 0x234F, 0x2222, 0x2108, 0x2000,
708 0x1F08, 0x1E1E, 0x1D42, 0x1C72, 0x1BAD, 0x1AF3, 0x1A42, 0x199A,
709 0x18FA, 0x1862, 0x17D0, 0x1746, 0x16C1, 0x1643, 0x15CA, 0x1555,
710 0x14E6, 0x147B, 0x1414, 0x13B1, 0x1352, 0x12F7, 0x129E, 0x1249,
711 0x11F7, 0x11A8, 0x115B, 0x1111, 0x10C9, 0x1084, 0x1000