2 * VC-1 and WMV3 decoder
3 * copyright (c) 2011 Mashiat Sarker Shakkhar
4 * copyright (c) 2006 Konstantin Shishkov
5 * (c) 2005 anonymous, Alex Beregszaszi, Michael Niedermayer
7 * This file is part of Libav.
9 * Libav is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public
11 * License as published by the Free Software Foundation; either
12 * version 2.1 of the License, or (at your option) any later version.
14 * Libav is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with Libav; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
33 /** Table for conversion between TTBLK and TTMB */
34 const int ff_vc1_ttblk_to_tt[3][8] = {
35 { TT_8X4, TT_4X8, TT_8X8, TT_4X4, TT_8X4_TOP, TT_8X4_BOTTOM, TT_4X8_RIGHT, TT_4X8_LEFT },
36 { TT_8X8, TT_4X8_RIGHT, TT_4X8_LEFT, TT_4X4, TT_8X4, TT_4X8, TT_8X4_BOTTOM, TT_8X4_TOP },
37 { TT_8X8, TT_4X8, TT_4X4, TT_8X4_BOTTOM, TT_4X8_RIGHT, TT_4X8_LEFT, TT_8X4, TT_8X4_TOP }
40 const int ff_vc1_ttfrm_to_tt[4] = { TT_8X8, TT_8X4, TT_4X8, TT_4X4 };
42 /** MV P mode - the 5th element is only used for mode 1 */
43 const uint8_t ff_vc1_mv_pmode_table[2][5] = {
44 { MV_PMODE_1MV_HPEL_BILIN, MV_PMODE_1MV, MV_PMODE_1MV_HPEL, MV_PMODE_INTENSITY_COMP, MV_PMODE_MIXED_MV },
45 { MV_PMODE_1MV, MV_PMODE_MIXED_MV, MV_PMODE_1MV_HPEL, MV_PMODE_INTENSITY_COMP, MV_PMODE_1MV_HPEL_BILIN }
47 const uint8_t ff_vc1_mv_pmode_table2[2][4] = {
48 { MV_PMODE_1MV_HPEL_BILIN, MV_PMODE_1MV, MV_PMODE_1MV_HPEL, MV_PMODE_MIXED_MV },
49 { MV_PMODE_1MV, MV_PMODE_MIXED_MV, MV_PMODE_1MV_HPEL, MV_PMODE_1MV_HPEL_BILIN }
52 /* MBMODE table for interlaced frame P-picture */
53 const uint8_t ff_vc1_mbmode_intfrp[2][15][4] = {
54 { /* 1: 4-MV, 0: non-4-MV */
55 /* Type, FIELDTX, 1-MV Differential present, Residuals (CBP) present */
56 /* Table 164 - Table 167 */
57 { MV_PMODE_INTFR_1MV , 0, 1, 1 },
58 { MV_PMODE_INTFR_1MV , 1, 1, 1 },
59 { MV_PMODE_INTFR_1MV , 0, 1, 0 },
60 { MV_PMODE_INTFR_1MV , 0, 0, 1 },
61 { MV_PMODE_INTFR_1MV , 1, 0, 1 },
62 { MV_PMODE_INTFR_2MV_FIELD, 0, 0, 1 },
63 { MV_PMODE_INTFR_2MV_FIELD, 1, 0, 1 },
64 { MV_PMODE_INTFR_2MV_FIELD, 0, 0, 0 },
65 { MV_PMODE_INTFR_INTRA , 0, 0, 0 }
68 /* Table 160 - Table 163 */
69 { MV_PMODE_INTFR_1MV , 0, 1, 1 },
70 { MV_PMODE_INTFR_1MV , 1, 1, 1 },
71 { MV_PMODE_INTFR_1MV , 0, 1, 0 },
72 { MV_PMODE_INTFR_1MV , 0, 0, 1 },
73 { MV_PMODE_INTFR_1MV , 1, 0, 1 },
74 { MV_PMODE_INTFR_2MV_FIELD, 0, 0, 1 },
75 { MV_PMODE_INTFR_2MV_FIELD, 1, 0, 1 },
76 { MV_PMODE_INTFR_2MV_FIELD, 0, 0, 0 },
77 { MV_PMODE_INTFR_4MV , 0, 0, 1 },
78 { MV_PMODE_INTFR_4MV , 1, 0, 1 },
79 { MV_PMODE_INTFR_4MV , 0, 0, 0 },
80 { MV_PMODE_INTFR_4MV_FIELD, 0, 0, 1 },
81 { MV_PMODE_INTFR_4MV_FIELD, 1, 0, 1 },
82 { MV_PMODE_INTFR_4MV_FIELD, 0, 0, 0 },
83 { MV_PMODE_INTFR_INTRA , 0, 0, 0 }
87 const int ff_vc1_fps_nr[7] = { 24, 25, 30, 50, 60, 48, 72 },
88 ff_vc1_fps_dr[2] = { 1000, 1001 };
89 const uint8_t ff_vc1_pquant_table[3][32] = {
90 /* Implicit quantizer */
91 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 6, 7, 8, 9, 10, 11, 12,
92 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 29, 31 },
93 /* Explicit quantizer, pquantizer uniform */
94 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
95 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 },
96 /* Explicit quantizer, pquantizer non-uniform */
97 { 0, 1, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
98 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 31 }
101 /** @name VC-1 VLC tables and defines
102 * @todo TODO move this into the context
105 #define VC1_BFRACTION_VLC_BITS 7
106 VLC ff_vc1_bfraction_vlc;
107 #define VC1_IMODE_VLC_BITS 4
108 VLC ff_vc1_imode_vlc;
109 #define VC1_NORM2_VLC_BITS 3
110 VLC ff_vc1_norm2_vlc;
111 #define VC1_NORM6_VLC_BITS 9
112 VLC ff_vc1_norm6_vlc;
113 /* Could be optimized, one table only needs 8 bits */
114 #define VC1_TTMB_VLC_BITS 9 //12
115 VLC ff_vc1_ttmb_vlc[3];
116 #define VC1_MV_DIFF_VLC_BITS 9 //15
117 VLC ff_vc1_mv_diff_vlc[4];
118 #define VC1_CBPCY_P_VLC_BITS 9 //14
119 VLC ff_vc1_cbpcy_p_vlc[4];
120 #define VC1_ICBPCY_VLC_BITS 9
121 VLC ff_vc1_icbpcy_vlc[8];
122 #define VC1_4MV_BLOCK_PATTERN_VLC_BITS 6
123 VLC ff_vc1_4mv_block_pattern_vlc[4];
124 #define VC1_2MV_BLOCK_PATTERN_VLC_BITS 3
125 VLC ff_vc1_2mv_block_pattern_vlc[4];
126 #define VC1_TTBLK_VLC_BITS 5
127 VLC ff_vc1_ttblk_vlc[3];
128 #define VC1_SUBBLKPAT_VLC_BITS 6
129 VLC ff_vc1_subblkpat_vlc[3];
130 #define VC1_INTFR_4MV_MBMODE_VLC_BITS 9
131 VLC ff_vc1_intfr_4mv_mbmode_vlc[4];
132 #define VC1_INTFR_NON4MV_MBMODE_VLC_BITS 6
133 VLC ff_vc1_intfr_non4mv_mbmode_vlc[4];
134 #define VC1_IF_MMV_MBMODE_VLC_BITS 5
135 VLC ff_vc1_if_mmv_mbmode_vlc[8];
136 #define VC1_IF_1MV_MBMODE_VLC_BITS 5
137 VLC ff_vc1_if_1mv_mbmode_vlc[8];
138 #define VC1_1REF_MVDATA_VLC_BITS 9
139 VLC ff_vc1_1ref_mvdata_vlc[4];
140 #define VC1_2REF_MVDATA_VLC_BITS 9
141 VLC ff_vc1_2ref_mvdata_vlc[8];
143 VLC ff_vc1_ac_coeff_table[8];
145 #define VC1_IF_MBMODE_VLC_BITS 5 // as a placeholder for VC1_IF_MMV_MBMODE_VLC_BITS
146 // or VC1_IF_1MV_MBMODE_VLC_BITS since they are the same
150 #if B_FRACTION_DEN == 840 // original bfraction from vc9data.h, not conforming to standard
151 /* bfraction is fractional, we scale to the GCD 3*5*7*8 = 840 */
152 const int16_t ff_vc1_bfraction_lut[23] = {
153 420 /*1/2*/, 280 /*1/3*/, 560 /*2/3*/, 210 /*1/4*/,
154 630 /*3/4*/, 168 /*1/5*/, 336 /*2/5*/,
155 504 /*3/5*/, 672 /*4/5*/, 140 /*1/6*/, 700 /*5/6*/,
156 120 /*1/7*/, 240 /*2/7*/, 360 /*3/7*/, 480 /*4/7*/,
157 600 /*5/7*/, 720 /*6/7*/, 105 /*1/8*/, 315 /*3/8*/,
158 525 /*5/8*/, 735 /*7/8*/,
159 -1 /*inv.*/, 0 /*BI fm*/
162 /* pre-computed scales for all bfractions and base=256 */
163 const int16_t ff_vc1_bfraction_lut[23] = {
164 128 /*1/2*/, 85 /*1/3*/, 170 /*2/3*/, 64 /*1/4*/,
165 192 /*3/4*/, 51 /*1/5*/, 102 /*2/5*/,
166 153 /*3/5*/, 204 /*4/5*/, 43 /*1/6*/, 215 /*5/6*/,
167 37 /*1/7*/, 74 /*2/7*/, 111 /*3/7*/, 148 /*4/7*/,
168 185 /*5/7*/, 222 /*6/7*/, 32 /*1/8*/, 96 /*3/8*/,
169 160 /*5/8*/, 224 /*7/8*/,
170 -1 /*inv.*/, 0 /*BI fm*/
174 const uint8_t ff_vc1_bfraction_bits[23] = {
183 const uint8_t ff_vc1_bfraction_codes[23] = {
194 const AVRational ff_vc1_pixel_aspect[16] = {
213 /* BitPlane IMODE - such a small table... */
214 const uint8_t ff_vc1_imode_codes[7] = {
217 const uint8_t ff_vc1_imode_bits[7] = {
222 const uint8_t ff_vc1_norm2_codes[4] = {
225 const uint8_t ff_vc1_norm2_bits[4] = {
229 const uint16_t ff_vc1_norm6_codes[64] = {
230 0x001, 0x002, 0x003, 0x000, 0x004, 0x001, 0x002, 0x047, 0x005, 0x003, 0x004, 0x04B, 0x005, 0x04D, 0x04E, 0x30E,
231 0x006, 0x006, 0x007, 0x053, 0x008, 0x055, 0x056, 0x30D, 0x009, 0x059, 0x05A, 0x30C, 0x05C, 0x30B, 0x30A, 0x037,
232 0x007, 0x00A, 0x00B, 0x043, 0x00C, 0x045, 0x046, 0x309, 0x00D, 0x049, 0x04A, 0x308, 0x04C, 0x307, 0x306, 0x036,
233 0x00E, 0x051, 0x052, 0x305, 0x054, 0x304, 0x303, 0x035, 0x058, 0x302, 0x301, 0x034, 0x300, 0x033, 0x032, 0x007,
236 const uint8_t ff_vc1_norm6_bits[64] = {
237 1, 4, 4, 8, 4, 8, 8, 10, 4, 8, 8, 10, 8, 10, 10, 13,
238 4, 8, 8, 10, 8, 10, 10, 13, 8, 10, 10, 13, 10, 13, 13, 9,
239 4, 8, 8, 10, 8, 10, 10, 13, 8, 10, 10, 13, 10, 13, 13, 9,
240 8, 10, 10, 13, 10, 13, 13, 9, 10, 13, 13, 9, 13, 9, 9, 6,
243 /* 4MV Block pattern VLC tables */
244 const uint8_t ff_vc1_4mv_block_pattern_codes[4][16] = {
245 { 14, 58, 59, 25, 12, 26, 15, 15, 13, 24, 27, 0, 28, 1, 2, 2 },
246 { 8, 18, 19, 4, 20, 5, 30, 11, 21, 31, 6, 12, 7, 13, 14, 0 },
247 { 15, 6, 7, 2, 8, 3, 28, 9, 10, 29, 4, 11, 5, 12, 13, 0 },
248 { 0, 11, 12, 4, 13, 5, 30, 16, 14, 31, 6, 17, 7, 18, 19, 10 }
250 const uint8_t ff_vc1_4mv_block_pattern_bits[4][16] = {
251 { 5, 6, 6, 5, 5, 5, 5, 4, 5, 5, 5, 3, 5, 3, 3, 2 },
252 { 4, 5, 5, 4, 5, 4, 5, 4, 5, 5, 4, 4, 4, 4, 4, 2 },
253 { 4, 4, 4, 4, 4, 4, 5, 4, 4, 5, 4, 4, 4, 4, 4, 3 },
254 { 2, 4, 4, 4, 4, 4, 5, 5, 4, 5, 4, 5, 4, 5, 5, 4 }
257 /* 2MV Block pattern VLC tables */
258 const uint8_t ff_vc1_2mv_block_pattern_codes[4][4] = {
259 { 2, 1, 0, 3 }, { 1, 0, 2, 3 }, { 2, 0, 3, 1 }, { 1, 3, 2, 0 }
262 const uint8_t ff_vc1_2mv_block_pattern_bits[4][4] = {
263 { 2, 2, 2, 2 }, { 1, 2, 3, 3 }, { 3, 2, 3, 1 }, { 1, 3, 3, 2 }
266 /* Interlaced frame picture 4MV MBMODE VLC tables (p. 246, p. 360) */
267 const uint16_t ff_vc1_intfr_4mv_mbmode_codes[4][15] = {
268 { 22, 17, 0, 47, 32, 10, 1, 3, 67, 133, 132, 92, 19, 93, 18 },
269 { 3, 45, 0, 7, 23, 6, 1, 2, 10, 39, 44, 8, 18, 77, 76 },
270 { 15, 6, 28, 9, 41, 6, 2, 15, 14, 8, 40, 29, 0, 21, 11 },
271 { 7, 198, 1, 2, 193, 13, 25, 0, 97, 1599, 98, 398, 798, 192, 1598 }
274 const uint8_t ff_vc1_intfr_4mv_mbmode_bits[4][15] = {
275 { 5, 5, 2, 6, 6, 4, 2, 2, 7, 8, 8, 7, 5, 7, 5 },
276 { 3, 6, 3, 3, 5, 3, 3, 3, 4, 6, 6, 4, 5, 7, 7 },
277 { 4, 3, 5, 5, 7, 4, 2, 5, 5, 5, 7, 5, 2, 6, 5 },
278 { 4, 9, 1, 3, 9, 5, 6, 2, 8, 12, 8, 10, 11, 9, 12 }
281 /* Interlaced frame picture NON-4MV MBMODE VLC tables (p. 363) */
282 const uint8_t ff_vc1_intfr_non4mv_mbmode_codes[4][9] = {
283 { 9, 22, 0, 17, 16, 10, 1, 3, 23 },
284 { 7, 0, 5, 2, 1, 1, 6, 3, 4 },
285 { 1, 0, 10, 23, 44, 8, 3, 9, 45 },
286 { 7, 97, 1, 2, 49, 13, 25, 0, 96 }
289 const uint8_t ff_vc1_intfr_non4mv_mbmode_bits[4][9] = {
290 { 4, 5, 2, 5, 5, 4, 2, 2, 5 },
291 { 3, 4, 6, 2, 3, 2, 3, 5, 6 },
292 { 2, 2, 4, 5, 6, 4, 2, 4, 6 },
293 { 4, 8, 1, 3, 7, 5, 6, 2, 8 }
296 /* Interlaced field picture MBMODE VLC tables (p. 356 - 11.4.1, 11.4.2) */
298 const uint8_t ff_vc1_if_mmv_mbmode_codes[8][8] = {
299 { 16, 17, 3, 3, 0, 5, 9, 2 },
300 { 8, 9, 3, 6, 7, 0, 5, 2 },
301 { 16, 17, 5, 3, 0, 3, 9, 2 },
302 { 56, 57, 15, 4, 5, 6, 29, 0 },
303 { 52, 53, 27, 14, 15, 2, 12, 0 },
304 { 56, 57, 29, 5, 6, 0, 15, 4 },
305 { 16, 17, 6, 7, 0, 1, 9, 5 },
306 { 56, 57, 0, 5, 6, 29, 4, 15 }
308 const uint8_t ff_vc1_if_mmv_mbmode_bits[8][8] = {
309 { 6, 6, 2, 3, 2, 4, 5, 2 },
310 { 5, 5, 3, 3, 3, 2, 4, 2 },
311 { 6, 6, 4, 3, 2, 2, 5, 2 },
312 { 6, 6, 4, 3, 3, 3, 5, 1 },
313 { 6, 6, 5, 4, 4, 2, 4, 1 },
314 { 6, 6, 5, 3, 3, 1, 4, 3 },
315 { 5, 5, 3, 3, 2, 2, 4, 3 },
316 { 6, 6, 1, 3, 3, 5, 3, 4 }
319 const uint8_t ff_vc1_if_1mv_mbmode_codes[8][6] = {
320 { 0, 1, 1, 1, 1, 1 },
321 { 0, 1, 1, 1, 1, 1 },
322 { 16, 17, 3, 0, 9, 5 },
323 { 20, 21, 3, 11, 0, 4 },
324 { 4, 5, 2, 3, 3, 0 },
325 { 4, 5, 3, 2, 0, 3 },
326 { 0, 1, 1, 1, 1, 1 },
327 { 16, 17, 9, 5, 3, 0 }
329 const uint8_t ff_vc1_if_1mv_mbmode_bits[8][6] = {
330 { 5, 5, 1, 3, 2, 4 },
331 { 5, 5, 1, 2, 3, 4 },
332 { 5, 5, 2, 1, 4, 3 },
333 { 5, 5, 2, 4, 1, 3 },
334 { 4, 4, 2, 3, 2, 2 },
335 { 4, 4, 3, 2, 2, 2 },
336 { 5, 5, 3, 4, 1, 2 },
340 /* Interlaced frame/field picture MVDATA VLC tables */
342 /* 1-reference tables */
343 const uint32_t ff_vc1_1ref_mvdata_codes[4][72] = { /* uint32_t may be too big */
345 0x00005, 0x0000C, 0x0001E, 0x00012, 0x0000C, 0x00034, 0x00075, 0x00070,
346 0x00000, 0x00008, 0x0001B, 0x00008, 0x0001D, 0x0007C, 0x000D6, 0x001DE,
347 0x001AF, 0x00005, 0x0001B, 0x00026, 0x0001E, 0x00012, 0x00076, 0x0004D,
348 0x001F6, 0x001F4, 0x00039, 0x0007F, 0x00027, 0x0006A, 0x00071, 0x00035,
349 0x00071, 0x00068, 0x001DC, 0x00027, 0x00073, 0x000FF, 0x000E8, 0x000E9,
350 0x0007E, 0x001F9, 0x001F5, 0x001FD, 0x0003E, 0x001CA, 0x003F9, 0x0004C,
351 0x00069, 0x001FA, 0x001DF, 0x001F7, 0x00070, 0x001DD, 0x00E4D, 0x00727,
352 0x00392, 0x001C8, 0x001CB, 0x003F8, 0x001AE, 0x001F8, 0x001FB, 0x0E4CE,
353 0x0E4CF, 0x07260, 0x07261, 0x07262, 0x07263, 0x07264, 0x07265, 0x07266
356 0x00007, 0x00001, 0x00007, 0x00016, 0x00001, 0x00045, 0x00018, 0x002B6,
357 0x00006, 0x00004, 0x00017, 0x00010, 0x00029, 0x0002C, 0x0015A, 0x00066,
358 0x0019E, 0x00009, 0x00028, 0x00017, 0x00000, 0x0002A, 0x00004, 0x0005B,
359 0x000B5, 0x000CE, 0x00006, 0x00044, 0x0000F, 0x00046, 0x0000E, 0x000AC,
360 0x00032, 0x00037, 0x011EB, 0x0000A, 0x0001A, 0x0011F, 0x00016, 0x00014,
361 0x0002B, 0x00168, 0x00055, 0x023D5, 0x00057, 0x0002F, 0x00036, 0x0002E,
362 0x00169, 0x00054, 0x0047B, 0x0019F, 0x02B7D, 0x0008E, 0x00ADE, 0x00479,
363 0x0056E, 0x008F4, 0x015BF, 0x00478, 0x023D4, 0x0ADF1, 0x056F9, 0xADF0E,
364 0xADF0F, 0x56F80, 0x56F81, 0x56F82, 0x56F83, 0x56F84, 0x56F85, 0x56F86
367 0x00002, 0x00006, 0x00007, 0x0000D, 0x00007, 0x00030, 0x000FF, 0x001F0,
368 0x00002, 0x00000, 0x00005, 0x00019, 0x0001E, 0x00007, 0x00063, 0x000FD,
369 0x00023, 0x0000E, 0x0001B, 0x0001A, 0x00006, 0x00009, 0x00018, 0x000C5,
370 0x00033, 0x001F1, 0x00002, 0x003FB, 0x001F3, 0x00022, 0x001FC, 0x00042,
371 0x00623, 0x00083, 0x00620, 0x0007D, 0x00040, 0x00043, 0x003E4, 0x003E5,
372 0x00191, 0x00FE9, 0x00105, 0x00208, 0x000FC, 0x00624, 0x00622, 0x00190,
373 0x00626, 0x007F5, 0x00C4B, 0x01FD0, 0x0104D, 0x00065, 0x00C42, 0x000C9,
374 0x00627, 0x00C43, 0x00C4A, 0x0104E, 0x01FD1, 0x0104F, 0x00412, 0x104CE,
375 0x104CF, 0x08260, 0x08261, 0x08262, 0x08263, 0x08264, 0x08265, 0x08266
378 0x0000D, 0x00001, 0x00004, 0x00000, 0x00017, 0x00005, 0x0007F, 0x0004D,
379 0x00003, 0x00011, 0x0003E, 0x0003B, 0x00017, 0x00067, 0x0004A, 0x000C3,
380 0x000F2, 0x0000A, 0x0002C, 0x00032, 0x0003D, 0x00015, 0x00028, 0x00093,
381 0x000CC, 0x00096, 0x00003, 0x00075, 0x00020, 0x0002D, 0x00021, 0x00029,
382 0x00090, 0x001D0, 0x001FB, 0x0001C, 0x0004C, 0x00060, 0x00009, 0x00008,
383 0x0002D, 0x0009F, 0x001FA, 0x0013D, 0x00031, 0x000FC, 0x00058, 0x00092,
384 0x000F0, 0x000F1, 0x000CD, 0x00185, 0x00165, 0x0004E, 0x00091, 0x000E9,
385 0x00184, 0x001D1, 0x001E6, 0x00097, 0x001E7, 0x000B3, 0x0013C, 0x0164E,
386 0x0164F, 0x00B20, 0x00B21, 0x00B22, 0x00B23, 0x00B24, 0x00B25, 0x00B26
390 const uint8_t ff_vc1_1ref_mvdata_bits[4][72] = {
392 3, 4, 5, 5, 5, 6, 7, 7, 2, 4, 5, 5, 6, 7, 8, 9, 9, 4,
393 6, 6, 6, 6, 7, 8, 9, 9, 6, 8, 7, 7, 7, 7, 8, 8, 9, 6,
394 8, 8, 8, 8, 8, 9, 9, 9, 7, 10, 10, 8, 8, 9, 9, 9, 8, 9,
395 13, 12, 11, 10, 10, 10, 9, 9, 9, 17, 17, 16, 16, 16, 16, 16, 16, 16
398 3, 3, 4, 5, 5, 7, 8, 10, 3, 4, 5, 5, 6, 7, 9, 10, 12, 4,
399 6, 6, 5, 6, 6, 8, 9, 11, 4, 7, 7, 7, 7, 8, 9, 9, 13, 5,
400 8, 9, 8, 8, 9, 10, 10, 14, 7, 9, 9, 9, 10, 10, 11, 12, 14, 8,
401 12, 11, 11, 12, 13, 11, 14, 16, 15, 20, 20, 19, 19, 19, 19, 19, 19, 19
404 3, 4, 4, 4, 5, 6, 8, 9, 2, 4, 5, 5, 5, 6, 7, 8, 8, 4,
405 7, 7, 6, 6, 7, 8, 8, 9, 5, 10, 9, 8, 9, 9, 11, 10, 11, 7,
406 9, 9, 10, 10, 11, 12, 11, 12, 8, 11, 11, 11, 11, 11, 12, 13, 15, 9,
407 12, 10, 11, 12, 12, 15, 13, 15, 13, 19, 19, 18, 18, 18, 18, 18, 18, 18
410 4, 4, 4, 4, 5, 5, 7, 7, 3, 5, 6, 6, 6, 7, 7, 8, 8, 4,
411 6, 6, 6, 6, 7, 8, 8, 8, 4, 7, 6, 6, 6, 7, 8, 9, 9, 5,
412 7, 7, 6, 6, 7, 8, 9, 9, 6, 8, 8, 8, 8, 8, 8, 9, 10, 7,
413 8, 8, 9, 9, 9, 8, 9, 9, 9, 14, 14, 13, 13, 13, 13, 13, 13, 13
417 /* 2-reference tables */
418 const uint32_t ff_vc1_2ref_mvdata_codes[8][126] = { /* table 132 - table 139 */
420 0x0000C, 0x0001C, 0x0000B, 0x00000, 0x0000E, 0x0002A, 0x00050, 0x00368,
421 0x00002, 0x0001A, 0x00004, 0x0003A, 0x0001D, 0x0006C, 0x000EF, 0x001BC,
422 0x0015F, 0x0000F, 0x00003, 0x0001C, 0x0000D, 0x0000B, 0x0003E, 0x000A7,
423 0x00146, 0x00199, 0x00006, 0x0001F, 0x00004, 0x0003C, 0x00007, 0x001BE,
424 0x0008B, 0x0002C, 0x007B3, 0x00005, 0x000DB, 0x00056, 0x000EC, 0x00052,
425 0x001BD, 0x00078, 0x000CF, 0x00573, 0x00009, 0x00023, 0x000ED, 0x00018,
426 0x00006, 0x00044, 0x000F5, 0x00079, 0x006D2, 0x0006E, 0x0002B, 0x0015D,
427 0x00017, 0x0037F, 0x00144, 0x000CE, 0x00028, 0x000AB, 0x00010, 0x001B5,
428 0x000F7, 0x000A6, 0x0007B, 0x00028, 0x001ED, 0x001E9, 0x006FD, 0x00004,
429 0x000F5, 0x00029, 0x0028A, 0x0028B, 0x0028F, 0x00DF9, 0x00335, 0x01E85,
430 0x000EE, 0x002BD, 0x0002B, 0x003D8, 0x003D1, 0x00198, 0x001E9, 0x0051D,
431 0x000B4, 0x0003F, 0x00455, 0x0022B, 0x00229, 0x00451, 0x00578, 0x007B2,
432 0x00570, 0x00155, 0x00032, 0x003D0, 0x00054, 0x006D3, 0x00571, 0x00454,
433 0x00334, 0x01BF1, 0x000B7, 0x00029, 0x01E84, 0x0016C, 0x0019B, 0x01BF0,
434 0x00579, 0x00F43, 0x000B5, 0x008A1, 0x0002A, 0x0016D, 0x008A0, 0x007A0,
435 0x003D1, 0x00AE5, 0x00154, 0x00AE4, 0x00A39, 0x00A38
438 0x00003, 0x00009, 0x00016, 0x00010, 0x000D7, 0x00335, 0x00574, 0x00555,
439 0x00000, 0x0001D, 0x00009, 0x00017, 0x0002C, 0x000AD, 0x00374, 0x006B3,
440 0x00577, 0x0000F, 0x00018, 0x0000A, 0x0002E, 0x00022, 0x0017C, 0x00E7B,
441 0x01B89, 0x015D8, 0x00008, 0x00034, 0x0006D, 0x00023, 0x001C2, 0x00376,
442 0x002D3, 0x01C4A, 0x0330A, 0x00014, 0x0006A, 0x00072, 0x0006C, 0x000E3,
443 0x0019B, 0x0073F, 0x01CF0, 0x00B41, 0x00032, 0x000E6, 0x000E0, 0x000CF,
444 0x000AB, 0x0019C, 0x002AB, 0x00E2B, 0x015D9, 0x0006F, 0x001C3, 0x000AF,
445 0x000BF, 0x000AC, 0x0017D, 0x006E3, 0x00E29, 0x01984, 0x00054, 0x000B5,
446 0x0017A, 0x001AD, 0x00199, 0x00178, 0x00358, 0x002D2, 0x01C4B, 0x0005B,
447 0x002A8, 0x00331, 0x00388, 0x0038B, 0x00370, 0x00713, 0x00CC3, 0x01CF1,
448 0x001B9, 0x005EF, 0x00738, 0x002F2, 0x0033B, 0x002B9, 0x006EB, 0x00570,
449 0x00E24, 0x0039D, 0x005A2, 0x005A3, 0x00E7D, 0x005EE, 0x00739, 0x00554,
450 0x00AA5, 0x00AA4, 0x00377, 0x01CF5, 0x00BCE, 0x00E79, 0x00660, 0x00674,
451 0x006EA, 0x00E7C, 0x00D65, 0x002F6, 0x015DA, 0x01B88, 0x005A1, 0x01CF4,
452 0x005E6, 0x00E28, 0x00575, 0x00D64, 0x00334, 0x0330B, 0x015DB, 0x00B40,
453 0x00BCF, 0x00DC5, 0x00E2A, 0x00675, 0x00571, 0x00553
456 0x00004, 0x00002, 0x00010, 0x00003, 0x00017, 0x00045, 0x0003E, 0x0007E,
457 0x00003, 0x00002, 0x00028, 0x0001E, 0x00015, 0x00047, 0x00002, 0x0014D,
458 0x00060, 0x0000B, 0x00026, 0x00024, 0x00014, 0x00032, 0x0006F, 0x000C3,
459 0x00531, 0x006E5, 0x00015, 0x0003F, 0x0002D, 0x00001, 0x0013E, 0x000DD,
460 0x000F6, 0x00305, 0x00331, 0x0000E, 0x00003, 0x00034, 0x00033, 0x0001A,
461 0x0014A, 0x000C5, 0x000F4, 0x006E4, 0x00001, 0x0003C, 0x0007D, 0x0008D,
462 0x0009D, 0x00031, 0x0006E, 0x00296, 0x000CD, 0x00025, 0x00149, 0x00032,
463 0x00089, 0x00036, 0x00088, 0x0006F, 0x00003, 0x0031D, 0x0000E, 0x001AA,
464 0x0027E, 0x00061, 0x0014E, 0x0014F, 0x00067, 0x000FF, 0x00183, 0x00036,
465 0x00357, 0x000F5, 0x000C6, 0x000C2, 0x00299, 0x00119, 0x00231, 0x00350,
466 0x0002C, 0x0018F, 0x00530, 0x00297, 0x00004, 0x001B8, 0x000C0, 0x0027A,
467 0x00311, 0x0009C, 0x00621, 0x00199, 0x0031C, 0x000F7, 0x003E3, 0x00356,
468 0x00189, 0x00005, 0x0006B, 0x008C2, 0x00330, 0x004FF, 0x004F0, 0x00351,
469 0x004F2, 0x001F2, 0x00373, 0x00000, 0x00C41, 0x008C3, 0x009EC, 0x003E2,
470 0x00304, 0x004F7, 0x004F1, 0x001F0, 0x00148, 0x00C40, 0x009ED, 0x008C0,
471 0x008C1, 0x004F3, 0x004FE, 0x000FE, 0x001F3, 0x001A9
474 0x00000, 0x00004, 0x0002F, 0x00052, 0x00010, 0x000AD, 0x0050B, 0x00190,
475 0x00003, 0x00016, 0x00007, 0x0000D, 0x000BB, 0x00173, 0x000C9, 0x0050F,
476 0x0172C, 0x00003, 0x00011, 0x00005, 0x00043, 0x00023, 0x0004B, 0x0032E,
477 0x02E5B, 0x00482, 0x00009, 0x0002A, 0x00014, 0x0002A, 0x00108, 0x005CA,
478 0x0065A, 0x02136, 0x02132, 0x0000B, 0x00013, 0x00041, 0x000B8, 0x00174,
479 0x00100, 0x014DA, 0x0404E, 0x01437, 0x0002B, 0x00085, 0x000A7, 0x000A0,
480 0x0014C, 0x0029A, 0x0032C, 0x02133, 0x0142A, 0x00051, 0x00284, 0x000AC,
481 0x00102, 0x00045, 0x00044, 0x0081B, 0x0065E, 0x00CB7, 0x00018, 0x0050C,
482 0x00212, 0x002E4, 0x00203, 0x00094, 0x00122, 0x0081A, 0x00655, 0x00033,
483 0x002BA, 0x00246, 0x00242, 0x00A6E, 0x0040C, 0x00808, 0x02134, 0x0404F,
484 0x00175, 0x00405, 0x00247, 0x0012A, 0x00A14, 0x002BB, 0x00191, 0x0084F,
485 0x01438, 0x000AF, 0x00B97, 0x00483, 0x0143B, 0x0032B, 0x00243, 0x0142B,
486 0x00958, 0x029BF, 0x00049, 0x00A6C, 0x014DB, 0x004AD, 0x014DE, 0x0084E,
487 0x01434, 0x00257, 0x02E5A, 0x00207, 0x01435, 0x01439, 0x00CB6, 0x0143A,
488 0x00194, 0x00654, 0x02135, 0x0537C, 0x0015C, 0x00240, 0x01012, 0x0537D,
489 0x00959, 0x01098, 0x01436, 0x0065F, 0x02026, 0x02137
492 0x00005, 0x00019, 0x00016, 0x00011, 0x0003E, 0x0005E, 0x000EF, 0x000E2,
493 0x00000, 0x00039, 0x0002B, 0x00026, 0x00028, 0x00012, 0x000C2, 0x000ED,
494 0x0011D, 0x0000D, 0x00031, 0x0002A, 0x00025, 0x00020, 0x0005C, 0x001ED,
495 0x0024D, 0x00770, 0x00006, 0x0007A, 0x00060, 0x0004F, 0x00048, 0x00039,
496 0x00186, 0x00213, 0x00EC6, 0x0000F, 0x00026, 0x0005F, 0x00075, 0x00070,
497 0x00027, 0x001DB, 0x003C6, 0x0078F, 0x0003F, 0x000A6, 0x000F0, 0x0003A,
498 0x00052, 0x0004E, 0x000E3, 0x001D9, 0x0030F, 0x00010, 0x001DD, 0x000A7,
499 0x000F7, 0x00022, 0x00092, 0x003C4, 0x002EF, 0x00762, 0x00079, 0x0008F,
500 0x001DA, 0x00087, 0x000E8, 0x000BA, 0x00176, 0x000EE, 0x003B0, 0x00085,
501 0x00119, 0x0030E, 0x00108, 0x001D2, 0x0010C, 0x00773, 0x00424, 0x00434,
502 0x00071, 0x005DD, 0x001C1, 0x003A7, 0x00127, 0x0008D, 0x0021B, 0x007B2,
503 0x001DF, 0x003D8, 0x00764, 0x00EE4, 0x003B3, 0x0074D, 0x001D8, 0x005DC,
504 0x0084A, 0x00499, 0x003C5, 0x01D8E, 0x00765, 0x00435, 0x00771, 0x001C2,
505 0x00118, 0x003BC, 0x00381, 0x00387, 0x07B33, 0x01097, 0x01096, 0x01ECD,
506 0x00E99, 0x00F1C, 0x00F1D, 0x00EE5, 0x0011C, 0x07B32, 0x03D98, 0x01D8F,
507 0x00E98, 0x00F67, 0x003BD, 0x00380, 0x00498, 0x00386
510 0x0000D, 0x00010, 0x0002E, 0x00039, 0x0000D, 0x00074, 0x000ED, 0x000B6,
511 0x00001, 0x00002, 0x00000, 0x00030, 0x00029, 0x00070, 0x000F3, 0x0008C,
512 0x00166, 0x00009, 0x00033, 0x00078, 0x00006, 0x000C4, 0x0000B, 0x00163,
513 0x000CC, 0x005BE, 0x0001F, 0x0002F, 0x00064, 0x00018, 0x000C6, 0x0000A,
514 0x00162, 0x002C0, 0x00EF3, 0x00007, 0x0000F, 0x000E3, 0x000CA, 0x000B2,
515 0x0018F, 0x003AE, 0x0075F, 0x00C51, 0x00015, 0x00047, 0x000EE, 0x000E2,
516 0x000EA, 0x00009, 0x0016A, 0x002C3, 0x0059D, 0x0003D, 0x00008, 0x001D9,
517 0x00032, 0x0000E, 0x0016E, 0x0032C, 0x0065B, 0x0196B, 0x00002, 0x0000F,
518 0x001D8, 0x0008D, 0x000B4, 0x001E4, 0x00067, 0x00317, 0x00794, 0x00022,
519 0x003BE, 0x00315, 0x00034, 0x00037, 0x002DE, 0x0006C, 0x00EFE, 0x0066C,
520 0x00028, 0x003CB, 0x003AC, 0x00035, 0x0016B, 0x003BD, 0x002C1, 0x0062C,
521 0x01DFE, 0x0000E, 0x0059E, 0x005BF, 0x000DA, 0x00629, 0x00584, 0x00EB7,
522 0x00B0A, 0x0066D, 0x0000C, 0x0077E, 0x0059C, 0x00778, 0x0075E, 0x0075A,
523 0x0062D, 0x00337, 0x00334, 0x00197, 0x01E57, 0x01DE4, 0x0196A, 0x01E56,
524 0x00C50, 0x00B3F, 0x01E54, 0x00B0B, 0x0018E, 0x001B6, 0x01E55, 0x00CB4,
525 0x00B3E, 0x00EB6, 0x01DE5, 0x01DFF, 0x00335, 0x001B7
528 0x00001, 0x0000B, 0x00019, 0x0006F, 0x0002A, 0x00075, 0x007EB, 0x00163,
529 0x00001, 0x0000E, 0x0001A, 0x0003E, 0x0001C, 0x0002D, 0x00164, 0x007EC,
530 0x00165, 0x00004, 0x00006, 0x00036, 0x0007F, 0x000AE, 0x00158, 0x0015C,
531 0x0056D, 0xFD510, 0x00000, 0x00004, 0x0007B, 0x000F3, 0x0003B, 0x007ED,
532 0x002B3, 0x002CC, 0x0056E, 0x00018, 0x0003E, 0x00017, 0x0001E, 0x000AF,
533 0x003F7, 0x0056F, 0x002CD, 0xFD511, 0x00014, 0x000AD, 0x000AA, 0x00014,
534 0x000A8, 0x00153, 0x000E8, 0x001FE, 0x00DCF, 0x00078, 0x001B8, 0x00152,
535 0x000FE, 0x002B1, 0x0015D, 0x00160, 0xFD512, 0xFD513, 0x0007A, 0x002B0,
536 0x001E5, 0x000E9, 0x000FC, 0x006E6, 0x00DC8, 0x00584, 0xFD514, 0x000AB,
537 0x00DDE, 0x00159, 0x003F4, 0x00DC9, 0x00DCA, 0x001FA, 0xFD515, 0xFD516,
538 0x000FC, 0x001FF, 0x001E4, 0x000AF, 0x0015A, 0x00167, 0x00DCB, 0x00585,
539 0xFD517, 0x003F7, 0x03F55, 0xFD518, 0x00DDC, 0x00586, 0x03F56, 0xFD519,
540 0x03F57, 0xFD51A, 0x001BA, 0x00587, 0x00588, 0x00DDF, 0x002B2, 0xFD51B,
541 0x00DCE, 0x003F6, 0xFD51C, 0x00FD4, 0xFD51D, 0xFD51E, 0xFD51F, 0x7EA80,
542 0x7EA81, 0x0056C, 0x7EA82, 0x7EA83, 0x00376, 0x00589, 0x0058A, 0x7EA84,
543 0x7EA85, 0x00DDD, 0x7EA86, 0x7EA87, 0x0058B, 0x07EA9
546 0x00003, 0x0000E, 0x0000F, 0x0007E, 0x00062, 0x000C6, 0x00CD9, 0x0063E,
547 0x00002, 0x00002, 0x00000, 0x00018, 0x0000C, 0x00069, 0x00039, 0x00707,
548 0x00C7E, 0x00002, 0x0000D, 0x0001B, 0x0000F, 0x0019A, 0x00647, 0x01A37,
549 0x346C4, 0x0346D, 0x00001, 0x0001E, 0x0007F, 0x0000A, 0x000E1, 0x00661,
550 0x00CE4, 0x346C5, 0x346C6, 0x0001D, 0x00030, 0x0000D, 0x000CB, 0x00199,
551 0x00320, 0x0008E, 0x0652E, 0x346C7, 0x0003E, 0x00039, 0x00035, 0x00033,
552 0x0019F, 0x001C0, 0x00CDA, 0x346C8, 0x346C9, 0x0000B, 0x000D0, 0x0019E,
553 0x00022, 0x00038, 0x0018E, 0x0031E, 0x03294, 0x0023C, 0x00032, 0x00012,
554 0x00013, 0x00071, 0x0019D, 0x00020, 0x00C87, 0x00CC0, 0x346CA, 0x00338,
555 0x00653, 0x001A2, 0x0032A, 0x00322, 0x00CE7, 0x00084, 0x0011F, 0x346CB,
556 0x00325, 0x00649, 0x0032B, 0x00077, 0x00648, 0x00642, 0x00C86, 0x00C8C,
557 0x346CC, 0x0003A, 0x019B7, 0x00043, 0x00327, 0x0008C, 0x0008D, 0x00C8D,
558 0x346CD, 0x346CE, 0x00337, 0x00CE5, 0x00085, 0x00326, 0x00347, 0x00CA4,
559 0x00C7F, 0x00D1A, 0x346CF, 0x00328, 0x1A360, 0x1A361, 0x00CD8, 0x0068C,
560 0x03295, 0x03296, 0x0652F, 0x066D8, 0x00331, 0x00706, 0x0023D, 0x00076,
561 0x00CC1, 0x00382, 0x00CE6, 0x066D9, 0x066DA, 0x066DB
565 const uint8_t ff_vc1_2ref_mvdata_bits[8][126] = {
567 4, 5, 5, 5, 6, 7, 8, 10, 2, 5, 5, 6, 6, 7, 8, 9,
568 10, 4, 5, 6, 6, 7, 8, 9, 10, 11, 4, 6, 6, 7, 7, 9,
569 9, 10, 12, 5, 8, 8, 8, 8, 9, 9, 10, 12, 5, 7, 8, 7,
570 7, 8, 9, 9, 11, 7, 9, 10, 9, 10, 10, 10, 10, 12, 6, 9,
571 9, 9, 9, 9, 10, 10, 11, 7, 10, 10, 11, 11, 11, 12, 12, 14,
572 8, 11, 10, 11, 11, 11, 11, 12, 12, 8, 12, 11, 11, 12, 12, 12,
573 12, 13, 8, 12, 11, 11, 12, 12, 12, 13, 12, 9, 14, 13, 11, 13,
574 12, 13, 12, 13, 9, 13, 13, 12, 12, 13, 13, 13, 13, 13
577 3, 4, 5, 6, 8, 10, 11, 11, 2, 5, 5, 6, 7, 8, 10, 11,
578 11, 4, 5, 5, 6, 7, 9, 12, 13, 13, 4, 6, 7, 7, 9, 10,
579 11, 13, 14, 5, 7, 7, 7, 8, 9, 11, 13, 13, 6, 8, 8, 8,
580 8, 9, 10, 12, 13, 7, 9, 8, 8, 8, 9, 11, 12, 13, 7, 9,
581 9, 9, 9, 9, 10, 11, 13, 8, 10, 10, 10, 10, 10, 11, 12, 13,
582 9, 11, 11, 10, 10, 10, 11, 11, 12, 10, 12, 12, 12, 11, 11, 11,
583 12, 12, 10, 13, 12, 12, 11, 11, 11, 12, 12, 10, 13, 13, 12, 13,
584 11, 12, 11, 12, 10, 14, 13, 13, 12, 12, 12, 11, 11, 11
587 4, 4, 5, 5, 6, 7, 8, 9, 2, 5, 6, 6, 6, 7, 7, 9,
588 9, 4, 6, 6, 6, 7, 8, 9, 11, 12, 5, 7, 7, 7, 9, 9,
589 10, 11, 12, 5, 7, 7, 7, 7, 9, 9, 10, 12, 5, 8, 8, 8,
590 8, 8, 9, 10, 10, 6, 9, 8, 8, 8, 8, 9, 9, 11, 6, 10,
591 10, 9, 9, 9, 9, 10, 10, 7, 11, 10, 9, 9, 10, 9, 10, 11,
592 7, 10, 11, 10, 10, 10, 9, 10, 11, 8, 12, 11, 11, 10, 11, 11,
593 10, 10, 8, 12, 12, 11, 11, 11, 11, 10, 11, 8, 13, 12, 12, 11,
594 11, 11, 11, 10, 9, 13, 12, 12, 12, 11, 11, 10, 10, 10
597 3, 4, 6, 7, 7, 9, 11, 11, 2, 5, 5, 6, 8, 9, 10, 11,
598 13, 3, 5, 5, 7, 8, 9, 12, 14, 13, 4, 6, 6, 7, 9, 11,
599 13, 14, 14, 5, 7, 7, 8, 9, 9, 13, 15, 13, 6, 8, 8, 8,
600 9, 10, 12, 14, 13, 7, 10, 9, 9, 9, 9, 12, 13, 14, 7, 11,
601 10, 10, 10, 10, 11, 12, 13, 8, 11, 12, 12, 12, 11, 12, 14, 15,
602 9, 11, 12, 11, 12, 11, 11, 12, 13, 9, 12, 13, 13, 12, 12, 13,
603 14, 14, 9, 12, 13, 13, 13, 12, 13, 12, 14, 10, 13, 13, 14, 13,
604 11, 13, 14, 15, 10, 12, 13, 15, 14, 13, 13, 13, 14, 14
607 4, 5, 5, 5, 6, 7, 8, 8, 2, 6, 6, 6, 6, 6, 8, 9,
608 10, 4, 6, 6, 6, 6, 7, 9, 10, 11, 4, 7, 7, 7, 7, 7,
609 9, 10, 12, 5, 7, 7, 7, 7, 7, 9, 10, 11, 6, 8, 8, 7,
610 7, 7, 8, 9, 10, 6, 9, 8, 8, 7, 8, 10, 10, 11, 7, 9,
611 9, 8, 8, 8, 9, 9, 10, 8, 10, 10, 9, 9, 9, 11, 11, 11,
612 8, 11, 10, 10, 9, 9, 10, 11, 10, 10, 12, 12, 11, 11, 10, 11,
613 12, 11, 10, 13, 12, 11, 11, 10, 10, 11, 11, 11, 15, 13, 13, 13,
614 12, 12, 12, 12, 10, 15, 14, 13, 12, 12, 11, 11, 11, 11
617 4, 5, 6, 6, 6, 7, 8, 8, 2, 4, 5, 6, 6, 7, 8, 8,
618 9, 4, 6, 7, 7, 8, 8, 9, 10, 11, 5, 6, 7, 7, 8, 8,
619 9, 10, 12, 5, 7, 8, 8, 8, 9, 10, 11, 12, 5, 7, 8, 8,
620 8, 8, 9, 10, 11, 6, 8, 9, 8, 8, 9, 10, 11, 13, 5, 8,
621 9, 8, 8, 9, 9, 10, 11, 6, 10, 10, 9, 9, 10, 10, 12, 13,
622 6, 10, 10, 9, 9, 10, 10, 11, 13, 7, 11, 11, 11, 11, 11, 12,
623 12, 13, 7, 11, 11, 11, 11, 11, 11, 12, 12, 9, 13, 13, 13, 13,
624 12, 12, 13, 12, 9, 12, 13, 12, 12, 12, 13, 13, 12, 12
627 3, 5, 6, 8, 9, 10, 12, 12, 1, 5, 6, 7, 8, 9, 12, 12,
628 12, 4, 6, 7, 8, 9, 12, 12, 14, 21, 4, 6, 8, 9, 9, 12,
629 13, 13, 14, 6, 9, 8, 8, 9, 13, 14, 13, 21, 6, 9, 9, 8,
630 9, 10, 11, 12, 13, 8, 10, 10, 11, 11, 12, 12, 21, 21, 8, 11,
631 10, 11, 11, 12, 13, 14, 21, 9, 13, 10, 11, 13, 13, 12, 21, 21,
632 9, 12, 10, 11, 12, 12, 13, 14, 21, 11, 15, 21, 13, 14, 15, 21,
633 15, 21, 10, 14, 14, 13, 13, 21, 13, 13, 21, 13, 21, 21, 21, 20,
634 20, 14, 20, 20, 11, 14, 14, 20, 20, 13, 20, 20, 14, 16
637 2, 5, 6, 8, 9, 10, 13, 13, 2, 4, 5, 6, 8, 9, 10, 13,
638 14, 3, 5, 7, 8, 10, 12, 15, 20, 16, 4, 6, 8, 8, 10, 12,
639 13, 20, 20, 7, 8, 8, 9, 10, 11, 12, 16, 20, 7, 8, 8, 8,
640 10, 11, 13, 20, 20, 8, 10, 10, 10, 10, 11, 12, 15, 14, 8, 9,
641 9, 9, 10, 10, 13, 13, 20, 11, 12, 11, 11, 11, 13, 12, 13, 20,
642 11, 12, 11, 11, 12, 12, 13, 13, 20, 10, 14, 11, 11, 12, 12, 13,
643 20, 20, 11, 13, 12, 11, 12, 13, 14, 14, 20, 11, 19, 19, 13, 13,
644 15, 15, 16, 16, 11, 13, 14, 11, 13, 12, 13, 16, 16, 16
648 const uint8_t ff_wmv3_dc_scale_table[32] = {
649 0, 2, 4, 8, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13,
650 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21
653 /* P-Picture CBPCY VLC tables */
654 // Looks like original tables are not conforming to standard at all. Are they used for old WMV?
655 const uint16_t ff_vc1_cbpcy_p_codes[4][64] = {
657 0, 6, 15, 13, 13, 11, 3, 13, 5, 8, 49, 10, 12, 114, 102, 119,
658 1, 54, 96, 8, 10, 111, 5, 15, 12, 10, 2, 12, 13, 115, 53, 63,
659 1, 7, 1, 7, 14, 12, 4, 14, 1, 9, 97, 11, 7, 58, 52, 62,
660 4, 103, 1, 9, 11, 56, 101, 118, 4, 110, 100, 30, 2, 5, 4, 3
663 0, 9, 1, 18, 5, 14, 237, 26, 3, 121, 3, 22, 13, 16, 6, 30,
664 2, 10, 1, 20, 12, 241, 5, 28, 16, 12, 3, 24, 28, 124, 239, 247,
665 1, 240, 1, 19, 18, 15, 4, 27, 1, 122, 2, 23, 1, 17, 7, 31,
666 1, 11, 2, 21, 19, 246, 238, 29, 17, 13, 236, 25, 58, 63, 8, 125
669 0, 201, 25, 231, 5, 221, 1, 3, 2, 414, 2, 241, 16, 225, 195, 492,
670 2, 412, 1, 240, 7, 224, 98, 245, 1, 220, 96, 5, 9, 230, 101, 247,
671 1, 102, 1, 415, 24, 3, 2, 244, 3, 54, 3, 484, 17, 114, 200, 493,
672 3, 413, 1, 4, 13, 113, 99, 485, 4, 111, 194, 243, 5, 29, 26, 31
675 0, 28, 12, 44, 3, 36, 20, 52, 2, 32, 16, 48, 8, 40, 24, 28,
676 1, 30, 14, 46, 6, 38, 22, 54, 3, 34, 18, 50, 10, 42, 26, 30,
677 1, 29, 13, 45, 5, 37, 21, 53, 2, 33, 17, 49, 9, 41, 25, 29,
678 1, 31, 15, 47, 7, 39, 23, 55, 4, 35, 19, 51, 11, 43, 27, 31
682 const uint8_t ff_vc1_cbpcy_p_bits[4][64] = {
684 13, 13, 7, 13, 7, 13, 13, 12, 6, 13, 7, 12, 6, 8, 8, 8,
685 5, 7, 8, 12, 6, 8, 13, 12, 7, 13, 13, 12, 6, 8, 7, 7,
686 6, 13, 8, 12, 7, 13, 13, 12, 7, 13, 8, 12, 5, 7, 7, 7,
687 6, 8, 13, 12, 6, 7, 8, 8, 5, 8, 8, 6, 3, 3, 3, 2
690 14, 13, 8, 13, 3, 13, 8, 13, 3, 7, 8, 13, 4, 13, 13, 13,
691 3, 13, 13, 13, 4, 8, 13, 13, 5, 13, 13, 13, 5, 7, 8, 8,
692 3, 8, 14, 13, 5, 13, 13, 13, 4, 7, 13, 13, 6, 13, 13, 13,
693 5, 13, 8, 13, 5, 8, 8, 13, 5, 13, 8, 13, 6, 6, 13, 7
696 13, 8, 6, 8, 4, 8, 13, 12, 4, 9, 8, 8, 5, 8, 8, 9,
697 5, 9, 10, 8, 4, 8, 7, 8, 6, 8, 7, 13, 4, 8, 7, 8,
698 5, 7, 8, 9, 6, 13, 13, 8, 4, 6, 8, 9, 5, 7, 8, 9,
699 5, 9, 9, 13, 5, 7, 7, 9, 4, 7, 8, 8, 3, 5, 5, 5
702 9, 9, 9, 9, 2, 9, 9, 9, 2, 9, 9, 9, 9, 9, 9, 8,
703 3, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8,
704 2, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8,
705 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8
709 /* Interlaced CBPCY VLC tables (Table 124 - Table 131) */
710 const uint16_t ff_vc1_icbpcy_p_codes[8][63] = {
712 0x2F1A, 0x2F1B, 0x178C, 0x0090, 0x02A8, 0x02A9, 0x0BC7, 0x0091,
713 0x02AA, 0x02AB, 0x05E0, 0x004A, 0x0096, 0x0097, 0x00BD, 0x0092,
714 0x02AC, 0x02AD, 0x05E1, 0x0098, 0x0132, 0x0133, 0x0179, 0x0134,
715 0x026A, 0x026B, 0x02FC, 0x004E, 0x0040, 0x0041, 0x002B, 0x0093,
716 0x02AE, 0x02AF, 0x05E2, 0x0136, 0x026E, 0x026F, 0x02FD, 0x009E,
717 0x013E, 0x013F, 0x017F, 0x0050, 0x0042, 0x0043, 0x002C, 0x0051,
718 0x00A4, 0x00A5, 0x00BE, 0x0053, 0x0044, 0x0045, 0x002D, 0x0054,
719 0x0046, 0x0047, 0x002E, 0x0003, 0x0000, 0x0001, 0x0001
722 0x0041, 0x0042, 0x0100, 0x0043, 0x0088, 0x0089, 0x0101, 0x0045,
723 0x008C, 0x008D, 0x0102, 0x0010, 0x0022, 0x0023, 0x0024, 0x0047,
724 0x0010, 0x0011, 0x0103, 0x0025, 0x0058, 0x0059, 0x005A, 0x005B,
725 0x005A, 0x005B, 0x005C, 0x000C, 0x0030, 0x0031, 0x0019, 0x0009,
726 0x0014, 0x0015, 0x002C, 0x005C, 0x005D, 0x005E, 0x005F, 0x0026,
727 0x005D, 0x005E, 0x005F, 0x000D, 0x0034, 0x0035, 0x001B, 0x0014,
728 0x0027, 0x002A, 0x002B, 0x000E, 0x0038, 0x0039, 0x001D, 0x000F,
729 0x003C, 0x003D, 0x001F, 0x0005, 0x0009, 0x0000, 0x0003
732 0x0032, 0x0033, 0x001A, 0x0026, 0x00E4, 0x00E5, 0x01E6, 0x0027,
733 0x00E6, 0x00E7, 0x01E7, 0x000E, 0x0063, 0x006C, 0x0077, 0x0028,
734 0x00E8, 0x00E9, 0x01E8, 0x007B, 0x00DA, 0x00DB, 0x00EC, 0x00F5,
735 0x01B8, 0x01B9, 0x01DA, 0x0021, 0x004B, 0x0054, 0x002B, 0x0029,
736 0x00EA, 0x00EB, 0x01E9, 0x004A, 0x01BA, 0x01BB, 0x01DB, 0x0020,
737 0x00DE, 0x00DF, 0x00F2, 0x0022, 0x0055, 0x0058, 0x002D, 0x000F,
738 0x0070, 0x0071, 0x0078, 0x0023, 0x0059, 0x005C, 0x002F, 0x0024,
739 0x005D, 0x0062, 0x0030, 0x0002, 0x001F, 0x0006, 0x0000
742 0x0028, 0x0029, 0x009D, 0x0000, 0x01EA, 0x01EB, 0x01EC, 0x0001,
743 0x01ED, 0x01EE, 0x01EF, 0x0005, 0x00F0, 0x00F1, 0x003B, 0x0002,
744 0x01F0, 0x01F1, 0x01F2, 0x003F, 0x015C, 0x015D, 0x0099, 0x0010,
745 0x03D0, 0x03D1, 0x0130, 0x000F, 0x009E, 0x009F, 0x00FB, 0x0003,
746 0x01F3, 0x01F4, 0x01F5, 0x0011, 0x03D2, 0x03D3, 0x0131, 0x0009,
747 0x015E, 0x015F, 0x009C, 0x0010, 0x00A8, 0x00A9, 0x0038, 0x0006,
748 0x00F2, 0x00F3, 0x004D, 0x0011, 0x00AA, 0x00AB, 0x0039, 0x0012,
749 0x00AC, 0x00AD, 0x003A, 0x0006, 0x0016, 0x0017, 0x000E
752 0x003C, 0x003D, 0x001F, 0x000A, 0x0061, 0x0062, 0x0002, 0x000B,
753 0x0063, 0x0064, 0x0003, 0x0007, 0x0003, 0x0004, 0x000B, 0x000C,
754 0x0065, 0x0066, 0x0004, 0x0012, 0x000A, 0x000B, 0x0014, 0x001B,
755 0x0018, 0x0019, 0x0034, 0x002C, 0x0067, 0x0068, 0x0035, 0x000D,
756 0x0069, 0x006C, 0x0005, 0x0060, 0x001A, 0x001B, 0x0035, 0x0013,
757 0x000E, 0x000F, 0x0015, 0x002D, 0x006D, 0x006E, 0x0038, 0x0008,
758 0x0008, 0x0009, 0x000C, 0x002E, 0x006F, 0x0072, 0x003A, 0x002F,
759 0x0073, 0x0000, 0x003B, 0x0007, 0x0014, 0x0015, 0x0004
762 0x0038, 0x0039, 0x009D, 0x000A, 0x0091, 0x0092, 0x0093, 0x000B,
763 0x0094, 0x0095, 0x0096, 0x0003, 0x00EE, 0x00EF, 0x0036, 0x000C,
764 0x0097, 0x0098, 0x0099, 0x0008, 0x01E4, 0x01E5, 0x006A, 0x0018,
765 0x03CC, 0x03CD, 0x00D6, 0x000E, 0x009E, 0x009F, 0x00F5, 0x000D,
766 0x009A, 0x009B, 0x009C, 0x0019, 0x03CE, 0x03CF, 0x00D7, 0x0009,
767 0x01E8, 0x01E9, 0x0090, 0x000F, 0x00E8, 0x00E9, 0x00F6, 0x0005,
768 0x00F0, 0x00F1, 0x0037, 0x0010, 0x00EA, 0x00EB, 0x00F7, 0x0011,
769 0x00EC, 0x00ED, 0x0034, 0x0000, 0x003E, 0x003F, 0x0002
772 0x003C, 0x003D, 0x01CF, 0x0000, 0x00BF, 0x00E0, 0x01FC, 0x0001,
773 0x00E1, 0x00E2, 0x01FD, 0x0009, 0x01F1, 0x01F2, 0x01F3, 0x0002,
774 0x00E3, 0x00E4, 0x01FE, 0x0011, 0x03EE, 0x03EF, 0x03F0, 0x0021,
775 0x07E2, 0x07E3, 0x07E4, 0x0018, 0x03F7, 0x03FE, 0x03FF, 0x0003,
776 0x00E5, 0x00E6, 0x0080, 0x002E, 0x07E5, 0x07E6, 0x07E7, 0x0016,
777 0x03F4, 0x03F5, 0x03F6, 0x0019, 0x0102, 0x0103, 0x0104, 0x000A,
778 0x01F4, 0x01F5, 0x01F6, 0x001A, 0x0105, 0x0106, 0x0107, 0x001B,
779 0x0178, 0x0179, 0x01CE, 0x001D, 0x00BD, 0x00BE, 0x01F0
782 0x0003, 0x0004, 0x01B6, 0x0004, 0x002E, 0x002F, 0x000E, 0x0005,
783 0x0030, 0x0031, 0x000F, 0x0003, 0x000A, 0x000B, 0x0014, 0x0006,
784 0x0032, 0x0033, 0x0010, 0x0005, 0x0030, 0x0031, 0x0032, 0x0009,
785 0x0066, 0x0067, 0x0068, 0x001D, 0x01B7, 0x01B8, 0x01B9, 0x0007,
786 0x0034, 0x0035, 0x0011, 0x0016, 0x0069, 0x006A, 0x006B, 0x000A,
787 0x0036, 0x0037, 0x00D8, 0x001E, 0x01BA, 0x01BB, 0x01BC, 0x0004,
788 0x0015, 0x0016, 0x0017, 0x001F, 0x01BD, 0x01BE, 0x01BF, 0x0000,
789 0x0010, 0x0011, 0x0012, 0x001C, 0x00D9, 0x00DA, 0x0013
793 const uint8_t ff_vc1_icbpcy_p_bits[8][63] = {
795 15, 15, 14, 9, 11, 11, 13, 9, 11, 11, 12, 8, 9, 9, 9, 9,
796 11, 11, 12, 9, 10, 10, 10, 10, 11, 11, 11, 8, 8, 8, 7, 9,
797 11, 11, 12, 10, 11, 11, 11, 9, 10, 10, 10, 8, 8, 8, 7, 8,
798 9, 9, 9, 8, 8, 8, 7, 8, 8, 8, 7, 3, 3, 3, 1
801 7, 7, 9, 7, 8, 8, 9, 7, 8, 8, 9, 6, 7, 7, 7, 7,
802 7, 7, 9, 7, 8, 8, 8, 8, 9, 9, 9, 6, 7, 7, 6, 6,
803 7, 7, 8, 8, 9, 9, 9, 7, 8, 8, 8, 6, 7, 7, 6, 6,
804 7, 7, 7, 6, 7, 7, 6, 6, 7, 7, 6, 3, 4, 3, 2
807 6, 6, 5, 6, 8, 8, 9, 6, 8, 8, 9, 5, 7, 7, 7, 6,
808 8, 8, 9, 7, 8, 8, 8, 8, 9, 9, 9, 6, 7, 7, 6, 6,
809 8, 8, 9, 7, 9, 9, 9, 6, 8, 8, 8, 6, 7, 7, 6, 5,
810 7, 7, 7, 6, 7, 7, 6, 6, 7, 7, 6, 3, 5, 4, 2
813 6, 6, 8, 4, 9, 9, 9, 4, 9, 9, 9, 4, 8, 8, 7, 4,
814 9, 9, 9, 6, 9, 9, 8, 6, 10, 10, 9, 5, 8, 8, 8, 4,
815 9, 9, 9, 6, 10, 10, 9, 5, 9, 9, 8, 5, 8, 8, 7, 4,
816 8, 8, 7, 5, 8, 8, 7, 5, 8, 8, 7, 3, 5, 5, 4
819 6, 6, 5, 5, 7, 7, 7, 5, 7, 7, 7, 5, 6, 6, 6, 5,
820 7, 7, 7, 6, 7, 7, 7, 7, 8, 8, 8, 6, 7, 7, 6, 5,
821 7, 7, 7, 7, 8, 8, 8, 6, 7, 7, 7, 6, 7, 7, 6, 5,
822 6, 6, 6, 6, 7, 7, 6, 6, 7, 6, 6, 4, 5, 5, 3
825 6, 6, 8, 4, 8, 8, 8, 4, 8, 8, 8, 4, 8, 8, 7, 4,
826 8, 8, 8, 5, 9, 9, 8, 6, 10, 10, 9, 5, 8, 8, 8, 4,
827 8, 8, 8, 6, 10, 10, 9, 5, 9, 9, 8, 5, 8, 8, 8, 4,
828 8, 8, 7, 5, 8, 8, 8, 5, 8, 8, 7, 3, 6, 6, 4
831 6, 6, 9, 3, 8, 8, 9, 3, 8, 8, 9, 4, 9, 9, 9, 3,
832 8, 8, 9, 5, 10, 10, 10, 6, 11, 11, 11, 5, 10, 10, 10, 3,
833 8, 8, 8, 6, 11, 11, 11, 5, 10, 10, 10, 5, 9, 9, 9, 4,
834 9, 9, 9, 5, 9, 9, 9, 5, 9, 9, 9, 5, 8, 8, 9
837 6, 6, 10, 3, 7, 7, 7, 3, 7, 7, 7, 4, 8, 8, 8, 3,
838 7, 7, 7, 5, 9, 9, 9, 6, 10, 10, 10, 6, 10, 10, 10, 3,
839 7, 7, 7, 6, 10, 10, 10, 5, 9, 9, 9, 6, 10, 10, 10, 4,
840 8, 8, 8, 6, 10, 10, 10, 5, 9, 9, 9, 6, 9, 9, 9
844 /* MacroBlock Transform Type: 7.1.3.11, p89
846 * 8x4:B:btm 8x4:B:top 8x4:B:both,
847 * 4x8:B:right 4x8:B:left 4x8:B:both
849 * 8x4:MB:btm 8x4:MB:top 8x4,MB,both
850 * 4x8,MB,right 4x8,MB,left
852 const uint16_t ff_vc1_ttmb_codes[3][16] = {
855 0x002E, 0x005F, 0x0000,
856 0x0016, 0x0015, 0x0001,
858 0x02F1, 0x0179, 0x017B,
859 0x0BC0, 0x0BC1, 0x05E1,
864 0x0006, 0x0003, 0x0007,
865 0x000F, 0x000E, 0x0000,
867 0x0014, 0x0011, 0x000B,
868 0x0009, 0x0021, 0x0015,
873 0x0000, 0x000E, 0x0005,
874 0x0002, 0x0003, 0x0003,
876 0x0081, 0x0021, 0x0009,
877 0x0101, 0x0041, 0x0011,
882 const uint8_t ff_vc1_ttmb_bits[3][16] = {
912 /* TTBLK (Transform Type per Block) tables */
913 const uint8_t ff_vc1_ttblk_codes[3][8] = {
914 { 0, 1, 3, 5, 16, 17, 18, 19 },
915 { 3, 0, 1, 2, 3, 5, 8, 9 },
916 { 1, 0, 1, 4, 6, 7, 10, 11 }
918 const uint8_t ff_vc1_ttblk_bits[3][8] = {
919 { 2, 2, 2, 3, 5, 5, 5, 5 },
920 { 2, 3, 3, 3, 3, 3, 4, 4 },
921 { 2, 3, 3, 3, 3, 3, 4, 4 }
924 /* SUBBLKPAT tables, p93-94, reordered */
925 const uint8_t ff_vc1_subblkpat_codes[3][15] = {
926 { 14, 12, 7, 11, 9, 26, 2, 10, 27, 8, 0, 6, 1, 15, 1 },
927 { 14, 0, 8, 15, 10, 4, 23, 13, 5, 9, 25, 3, 24, 22, 1 },
928 { 5, 6, 2, 2, 8, 0, 28, 3, 1, 3, 29, 1, 19, 18, 15 }
930 const uint8_t ff_vc1_subblkpat_bits[3][15] = {
931 { 5, 5, 5, 5, 5, 6, 4, 5, 6, 5, 4, 5, 4, 5, 1},
932 { 4, 3, 4, 4, 4, 5, 5, 4, 5, 4, 5, 4, 5, 5, 2},
933 { 3, 3, 4, 3, 4, 5, 5, 3, 5, 4, 5, 4, 5, 5, 4}
936 /* MV differential tables, p265 */
937 const uint16_t ff_vc1_mv_diff_codes[4][73] = {
939 0, 2, 3, 8, 576, 3, 2, 6,
940 5, 577, 578, 7, 8, 9, 40, 19,
941 37, 82, 21, 22, 23, 579, 580, 166,
942 96, 167, 49, 194, 195, 581, 582, 583,
943 292, 293, 294, 13, 2, 7, 24, 50,
944 102, 295, 13, 7, 8, 18, 50, 103,
945 38, 20, 21, 22, 39, 204, 103, 23,
946 24, 25, 104, 410, 105, 106, 107, 108,
947 109, 220, 411, 442, 222, 443, 446, 447,
951 0, 4, 5, 3, 4, 3, 4, 5,
952 20, 6, 21, 44, 45, 46, 3008, 95,
953 112, 113, 57, 3009, 3010, 116, 117, 3011,
954 118, 3012, 3013, 3014, 3015, 3016, 3017, 3018,
955 3019, 3020, 3021, 3022, 1, 4, 15, 160,
956 161, 41, 6, 11, 42, 162, 43, 119,
957 56, 57, 58, 163, 236, 237, 3023, 119,
958 120, 242, 122, 486, 1512, 487, 246, 494,
959 1513, 495, 1514, 1515, 1516, 1517, 1518, 1519,
963 0, 512, 513, 514, 515, 2, 3, 258,
964 259, 260, 261, 262, 263, 264, 265, 266,
965 267, 268, 269, 270, 271, 272, 273, 274,
966 275, 276, 277, 278, 279, 280, 281, 282,
967 283, 284, 285, 286, 1, 5, 287, 288,
968 289, 290, 6, 7, 291, 292, 293, 294,
969 295, 296, 297, 298, 299, 300, 301, 302,
970 303, 304, 305, 306, 307, 308, 309, 310,
971 311, 312, 313, 314, 315, 316, 317, 318,
972 319 /* 73 elements */
975 0, 1, 1, 2, 3, 4, 1, 5,
976 4, 3, 5, 8, 6, 9, 10, 11,
977 12, 7, 104, 14, 105, 4, 10, 15,
978 11, 6, 14, 8, 106, 107, 108, 15,
979 109, 9, 55, 10, 1, 2, 1, 2,
980 3, 12, 6, 2, 6, 7, 28, 7,
981 15, 8, 5, 18, 29, 152, 77, 24,
982 25, 26, 39, 108, 13, 109, 55, 56,
983 57, 116, 11, 153, 234, 235, 118, 119,
987 const uint8_t ff_vc1_mv_diff_bits[4][73] = {
989 6, 7, 7, 8, 14, 6, 5, 6, 7, 14, 14, 6, 6, 6, 8, 9,
990 10, 9, 7, 7, 7, 14, 14, 10, 9, 10, 8, 10, 10, 14, 14, 14,
991 13, 13, 13, 6, 3, 5, 6, 8, 9, 13, 5, 4, 4, 5, 7, 9,
992 6, 5, 5, 5, 6, 9, 8, 5, 5, 5, 7, 10, 7, 7, 7, 7,
993 7, 8, 10, 9, 8, 9, 9, 9, 3 /* 73 elements */
996 5, 7, 7, 6, 6, 5, 5, 6, 7, 5, 7, 8, 8, 8, 14, 9,
997 9, 9, 8, 14, 14, 9, 9, 14, 9, 14, 14, 14, 14, 14, 14, 14,
998 14, 14, 14, 14, 2, 3, 6, 8, 8, 6, 3, 4, 6, 8, 6, 9,
999 6, 6, 6, 8, 8, 8, 14, 7, 7, 8, 7, 9, 13, 9, 8, 9,
1000 13, 9, 13, 13, 13, 13, 13, 13, 5 /* 73 elements */
1004 3, 12, 12, 12, 12, 3, 4, 11, 11, 11, 11, 11, 11, 11, 11, 11,
1005 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
1006 11, 11, 11, 11, 1, 5, 11, 11, 11, 11, 4, 4, 11, 11, 11, 11,
1007 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
1008 11, 11, 11, 11, 11, 11, 11, 11, 11 /* 73 elements */
1011 15, 11, 15, 15, 15, 15, 12, 15, 12, 11, 12, 12, 15, 12, 12, 12,
1012 12, 15, 15, 12, 15, 10, 11, 12, 11, 10, 11, 10, 15, 15, 15, 11,
1013 15, 10, 14, 10, 4, 4, 5, 7, 8, 9, 5, 3, 4, 5, 6, 8,
1014 5, 4, 3, 5, 6, 8, 7, 5, 5, 5, 6, 7, 9, 7, 6, 6,
1015 6, 7, 10, 8, 8, 8, 7, 7, 4 /* 73 elements */
1019 /* DC differentials low+hi-mo, p217 are the same as in msmpeg4data .h */
1022 const int8_t ff_vc1_simple_progressive_4x4_zz [16] = {
1029 const int8_t ff_vc1_adv_progressive_8x4_zz [32] = { /* Table 233 */
1030 0, 8, 1, 16, 2, 9, 10, 3,
1031 24, 17, 4, 11, 18, 12, 5, 19,
1032 25, 13, 20, 26, 27, 6, 21, 28,
1033 14, 22, 29, 7, 30, 15, 23, 31
1036 const int8_t ff_vc1_adv_progressive_4x8_zz [32] = { /* Table 234 */
1047 const int8_t ff_vc1_adv_interlaced_8x8_zz [64] = { /* Table 235 */
1048 0, 8, 1, 16, 24, 9, 2, 32,
1049 40, 48, 56, 17, 10, 3, 25, 18,
1050 11, 4, 33, 41, 49, 57, 26, 34,
1051 42, 50, 58, 19, 12, 5, 27, 20,
1052 13, 6, 35, 28, 21, 14, 7, 15,
1053 22, 29, 36, 43, 51, 59, 60, 52,
1054 44, 37, 30, 23, 31, 38, 45, 53,
1055 61, 62, 54, 46, 39, 47, 55, 63
1058 const int8_t ff_vc1_adv_interlaced_8x4_zz [32] = { /* Table 236 */
1059 0, 8, 16, 24, 1, 9, 2, 17,
1060 25, 10, 3, 18, 26, 4, 11, 19,
1061 12, 5, 13, 20, 27, 6, 21, 28,
1062 14, 22, 29, 7, 30, 15, 23, 31
1065 const int8_t ff_vc1_adv_interlaced_4x8_zz [32] = { /* Table 237 */
1076 const int8_t ff_vc1_adv_interlaced_4x4_zz [16] = { /* Table 238 */
1084 /* DQScale as specified in 8.1.3.9 - almost identical to 0x40000/i */
1085 const int32_t ff_vc1_dqscale[63] = {
1086 0x40000, 0x20000, 0x15555, 0x10000, 0xCCCD, 0xAAAB, 0x9249, 0x8000,
1087 0x71C7, 0x6666, 0x5D17, 0x5555, 0x4EC5, 0x4925, 0x4444, 0x4000,
1088 0x3C3C, 0x38E4, 0x35E5, 0x3333, 0x30C3, 0x2E8C, 0x2C86, 0x2AAB,
1089 0x28F6, 0x2762, 0x25ED, 0x2492, 0x234F, 0x2222, 0x2108, 0x2000,
1090 0x1F08, 0x1E1E, 0x1D42, 0x1C72, 0x1BAD, 0x1AF3, 0x1A42, 0x199A,
1091 0x18FA, 0x1862, 0x17D0, 0x1746, 0x16C1, 0x1643, 0x15CA, 0x1555,
1092 0x14E6, 0x147B, 0x1414, 0x13B1, 0x1352, 0x12F7, 0x129E, 0x1249,
1093 0x11F7, 0x11A8, 0x115B, 0x1111, 0x10C9, 0x1084, 0x1000
1096 /* P Interlaced field picture MV predictor scaling values (Table 114) */
1097 const uint16_t ff_vc1_field_mvpred_scales[2][7][4] = {
1099 // 0 1 2 3 or greater
1100 { // current field is first
1101 { 128, 192, 213, 224 }, // SCALEOPP
1102 { 512, 341, 307, 293 }, // SCALESAME1
1103 { 219, 236, 242, 245 }, // SCALESAME2
1104 { 32, 48, 53, 56 }, // SCALEZONE1_X
1105 { 8, 12, 13, 14 }, // SCALEZONE1_Y
1106 { 37, 20, 14, 11 }, // ZONE1OFFSET_X
1107 { 10, 5, 4, 3 } // ZONE1OFFSET_Y
1109 { // current field is second
1110 { 128, 64, 43, 32 }, // SCALEOPP
1111 { 512, 1024, 1536, 2048 }, // SCALESAME1
1112 { 219, 204, 200, 198 }, // SCALESAME2
1113 { 32, 16, 11, 8 }, // SCALEZONE1_X
1114 { 8, 4, 3, 2 }, // SCALEZONE1_Y
1115 { 37, 52, 56, 58 }, // ZONE1OFFSET_X
1116 { 10, 13, 14, 15 } // ZONE1OFFSET_Y
1120 /* B Interlaced field picture backward MV predictor scaling values for first field (Table 115) */
1121 const uint16_t ff_vc1_b_field_mvpred_scales[7][4] = {
1123 // 0 1 2 3 or greater
1124 { 171, 205, 219, 228 }, // SCALESAME
1125 { 384, 320, 299, 288 }, // SCALEOPP1
1126 { 230, 239, 244, 246 }, // SCALEOPP2
1127 { 43, 51, 55, 57 }, // SCALEZONE1_X
1128 { 11, 13, 14, 14 }, // SCALEZONE1_Y
1129 { 26, 17, 12, 10 }, // ZONE1OFFSET_X
1130 { 7, 4, 3, 3 } // ZONE1OFFSET_Y
1133 const int ff_vc1_ac_sizes[AC_MODES] = {
1134 186, 169, 133, 149, 103, 103, 163, 175