Imported Debian version 2.4.3~trusty1
[deb_ffmpeg.git] / ffmpeg / libavcodec / vc1data.c
CommitLineData
2ba45a60
DM
1/*
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
6 *
7 * This file is part of FFmpeg.
8 *
9 * FFmpeg 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.
13 *
14 * FFmpeg 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.
18 *
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with FFmpeg; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 */
23
24/**
25 * @file
26 * VC-1 tables.
27 */
28
29#include "avcodec.h"
30#include "vc1.h"
31#include "vc1data.h"
32
33/** Table for conversion between TTBLK and TTMB */
34const 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 }
38};
39
40const int ff_vc1_ttfrm_to_tt[4] = { TT_8X8, TT_8X4, TT_4X8, TT_4X4 };
41
42/** MV P mode - the 5th element is only used for mode 1 */
43const 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 }
46};
47const 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 }
50};
51
52/* MBMODE table for interlaced frame P-picture */
53const 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 }
66 },
67 {
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 }
84 }
85};
86
87const int ff_vc1_fps_nr[7] = { 24, 25, 30, 50, 60, 48, 72 },
88 ff_vc1_fps_dr[2] = { 1000, 1001 };
89const 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 }
99};
100
101/** @name VC-1 VLC tables and defines
102 * @todo TODO move this into the context
103 */
104//@{
105#define VC1_BFRACTION_VLC_BITS 7
106VLC ff_vc1_bfraction_vlc;
107#define VC1_IMODE_VLC_BITS 4
108VLC ff_vc1_imode_vlc;
109#define VC1_NORM2_VLC_BITS 3
110VLC ff_vc1_norm2_vlc;
111#define VC1_NORM6_VLC_BITS 9
112VLC ff_vc1_norm6_vlc;
113/* Could be optimized, one table only needs 8 bits */
114#define VC1_TTMB_VLC_BITS 9 //12
115VLC ff_vc1_ttmb_vlc[3];
116#define VC1_MV_DIFF_VLC_BITS 9 //15
117VLC ff_vc1_mv_diff_vlc[4];
118#define VC1_CBPCY_P_VLC_BITS 9 //14
119VLC ff_vc1_cbpcy_p_vlc[4];
120#define VC1_ICBPCY_VLC_BITS 9
121VLC ff_vc1_icbpcy_vlc[8];
122#define VC1_4MV_BLOCK_PATTERN_VLC_BITS 6
123VLC ff_vc1_4mv_block_pattern_vlc[4];
124#define VC1_2MV_BLOCK_PATTERN_VLC_BITS 3
125VLC ff_vc1_2mv_block_pattern_vlc[4];
126#define VC1_TTBLK_VLC_BITS 5
127VLC ff_vc1_ttblk_vlc[3];
128#define VC1_SUBBLKPAT_VLC_BITS 6
129VLC ff_vc1_subblkpat_vlc[3];
130#define VC1_INTFR_4MV_MBMODE_VLC_BITS 9
131VLC ff_vc1_intfr_4mv_mbmode_vlc[4];
132#define VC1_INTFR_NON4MV_MBMODE_VLC_BITS 6
133VLC ff_vc1_intfr_non4mv_mbmode_vlc[4];
134#define VC1_IF_MMV_MBMODE_VLC_BITS 5
135VLC ff_vc1_if_mmv_mbmode_vlc[8];
136#define VC1_IF_1MV_MBMODE_VLC_BITS 5
137VLC ff_vc1_if_1mv_mbmode_vlc[8];
138#define VC1_1REF_MVDATA_VLC_BITS 9
139VLC ff_vc1_1ref_mvdata_vlc[4];
140#define VC1_2REF_MVDATA_VLC_BITS 9
141VLC ff_vc1_2ref_mvdata_vlc[8];
142
143VLC ff_vc1_ac_coeff_table[8];
144
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
147//@}
148
149
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 */
152const 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*/
160};
161#else
162/* pre-computed scales for all bfractions and base=256 */
163const 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*/
171};
172#endif
173
174const uint8_t ff_vc1_bfraction_bits[23] = {
175 3, 3, 3, 3,
176 3, 3, 3,
177 7, 7, 7, 7,
178 7, 7, 7, 7,
179 7, 7, 7, 7,
180 7, 7,
181 7, 7
182};
183const uint8_t ff_vc1_bfraction_codes[23] = {
184 0, 1, 2, 3,
185 4, 5, 6,
186 112, 113, 114, 115,
187 116, 117, 118, 119,
188 120, 121, 122, 123,
189 124, 125,
190 126, 127
191};
192
193//Same as H.264
194const AVRational ff_vc1_pixel_aspect[16] = {
195 { 0, 1 },
196 { 1, 1 },
197 { 12, 11 },
198 { 10, 11 },
199 { 16, 11 },
200 { 40, 33 },
201 { 24, 11 },
202 { 20, 11 },
203 { 32, 11 },
204 { 80, 33 },
205 { 18, 11 },
206 { 15, 11 },
207 { 64, 33 },
208 { 160, 99 },
209 { 0, 1 },
210 { 0, 1 }
211};
212
213/* BitPlane IMODE - such a small table... */
214const uint8_t ff_vc1_imode_codes[7] = {
215 0, 2, 1, 3, 1, 2, 3
216};
217const uint8_t ff_vc1_imode_bits[7] = {
218 4, 2, 3, 2, 4, 3, 3
219};
220
221/* Normal-2 imode */
222const uint8_t ff_vc1_norm2_codes[4] = {
223 0, 4, 5, 3
224};
225const uint8_t ff_vc1_norm2_bits[4] = {
226 1, 3, 3, 2
227};
228
229const 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,
234};
235
236const 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,
241};
242
243/* 4MV Block pattern VLC tables */
244const 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 }
249};
250const 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 }
255};
256
257/* 2MV Block pattern VLC tables */
258const 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 }
260};
261
262const 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 }
264};
265
266/* Interlaced frame picture 4MV MBMODE VLC tables (p. 246, p. 360) */
267const 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 }
272};
273
274const 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 }
279};
280
281/* Interlaced frame picture NON-4MV MBMODE VLC tables (p. 363) */
282const 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 }
287};
288
289const 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 }
294};
295
296/* Interlaced field picture MBMODE VLC tables (p. 356 - 11.4.1, 11.4.2) */
297/* mixed-MV */
298const 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 }
307};
308const 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 }
317};
318/* 1MV */
319const 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 }
328};
329const 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 },
337 { 5, 5, 4, 3, 2, 1 }
338};
339
340/* Interlaced frame/field picture MVDATA VLC tables */
341
342/* 1-reference tables */
343const uint32_t ff_vc1_1ref_mvdata_codes[4][72] = { /* uint32_t may be too big */
344 {
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
354 },
355 {
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
365 },
366 {
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
376 },
377 {
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
387 }
388};
389
390const uint8_t ff_vc1_1ref_mvdata_bits[4][72] = {
391 {
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
396 },
397 {
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
402 },
403 {
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
408 },
409 {
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
414 }
415};
416
417/* 2-reference tables */
418const uint32_t ff_vc1_2ref_mvdata_codes[8][126] = { /* table 132 - table 139 */
419 {
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
436 },
437 {
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
454 },
455 {
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
472 },
473 {
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
490 },
491 {
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
508 },
509 {
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
526 },
527 {
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
544 },
545 {
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
562 }
563};
564
565const uint8_t ff_vc1_2ref_mvdata_bits[8][126] = {
566 {
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
575 },
576 {
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
585 },
586 {
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
595 },
596 {
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
605 },
606 {
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
615 },
616 {
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
625 },
626 {
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
635 },
636 {
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
645 }
646};
647
648const 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
651};
652
653/* P-Picture CBPCY VLC tables */
654// Looks like original tables are not conforming to standard at all. Are they used for old WMV?
655const uint16_t ff_vc1_cbpcy_p_codes[4][64] = {
656 {
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
661 },
662 {
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
667 },
668 {
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
673 },
674 {
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
679 }
680};
681
682const uint8_t ff_vc1_cbpcy_p_bits[4][64] = {
683 {
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
688 },
689 {
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
694 },
695 {
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
700 },
701 {
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
706 }
707};
708
709/* Interlaced CBPCY VLC tables (Table 124 - Table 131) */
710const uint16_t ff_vc1_icbpcy_p_codes[8][63] = {
711 {
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
720 },
721 {
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
730 },
731 {
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
740 },
741 {
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
750 },
751 {
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
760 },
761 {
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
770 },
771 {
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
780 },
781 {
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
790 }
791};
792
793const uint8_t ff_vc1_icbpcy_p_bits[8][63] = {
794 {
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
799 },
800 {
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
805 },
806 {
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
811 },
812 {
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
817 },
818 {
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
823 },
824 {
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
829 },
830 {
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
835 },
836 {
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
841 }
842};
843
844/* MacroBlock Transform Type: 7.1.3.11, p89
845 * 8x8:B
846 * 8x4:B:btm 8x4:B:top 8x4:B:both,
847 * 4x8:B:right 4x8:B:left 4x8:B:both
848 * 4x4:B 8x8:MB
849 * 8x4:MB:btm 8x4:MB:top 8x4,MB,both
850 * 4x8,MB,right 4x8,MB,left
851 * 4x4,MB */
852const uint16_t ff_vc1_ttmb_codes[3][16] = {
853 {
854 0x0003,
855 0x002E, 0x005F, 0x0000,
856 0x0016, 0x0015, 0x0001,
857 0x0004, 0x0014,
858 0x02F1, 0x0179, 0x017B,
859 0x0BC0, 0x0BC1, 0x05E1,
860 0x017A
861 },
862 {
863 0x0006,
864 0x0006, 0x0003, 0x0007,
865 0x000F, 0x000E, 0x0000,
866 0x0002, 0x0002,
867 0x0014, 0x0011, 0x000B,
868 0x0009, 0x0021, 0x0015,
869 0x0020
870 },
871 {
872 0x0006,
873 0x0000, 0x000E, 0x0005,
874 0x0002, 0x0003, 0x0003,
875 0x000F, 0x0002,
876 0x0081, 0x0021, 0x0009,
877 0x0101, 0x0041, 0x0011,
878 0x0100
879 }
880};
881
882const uint8_t ff_vc1_ttmb_bits[3][16] = {
883 {
884 2,
885 6, 7, 2,
886 5, 5, 2,
887 3, 5,
888 10, 9, 9,
889 12, 12, 11,
890 9
891 },
892 {
893 3,
894 4, 4, 4,
895 4, 4, 3,
896 3, 2,
897 7, 7, 6,
898 6, 8, 7,
899 8
900 },
901 {
902 3,
903 3, 4, 5,
904 3, 3, 4,
905 4, 2,
906 10, 8, 6,
907 11, 9, 7,
908 11
909 }
910};
911
912/* TTBLK (Transform Type per Block) tables */
913const 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 }
917};
918const 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 }
922};
923
924/* SUBBLKPAT tables, p93-94, reordered */
925const 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 }
929};
930const 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}
934};
935
936/* MV differential tables, p265 */
937const uint16_t ff_vc1_mv_diff_codes[4][73] = {
938 {
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,
948 7 /* 73 elements */
949 },
950 {
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,
960 31 /* 73 elements */
961 },
962 {
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 */
973 },
974 {
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,
984 15 /* 73 elements */
985 }
986};
987const uint8_t ff_vc1_mv_diff_bits[4][73] = {
988 {
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 */
994 },
995 {
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 */
1001
1002 },
1003 {
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 */
1009 },
1010 {
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 */
1016 }
1017};
1018
1019/* DC differentials low+hi-mo, p217 are the same as in msmpeg4data .h */
1020
1021/* Table 232 */
1022const uint8_t ff_vc1_simple_progressive_4x4_zz [16] = {
1023 0, 8, 16, 1,
1024 9, 24, 17, 2,
1025 10, 18, 25, 3,
1026 11, 26, 19, 27
1027};
1028
1029const uint8_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
1034};
1035
1036const uint8_t ff_vc1_adv_progressive_4x8_zz [32] = { /* Table 234 */
1037 0, 1, 8, 2,
1038 9, 16, 17, 24,
1039 10, 32, 25, 18,
1040 40, 3, 33, 26,
1041 48, 11, 56, 41,
1042 34, 49, 57, 42,
1043 19, 50, 27, 58,
1044 35, 43, 51, 59
1045};
1046
1047const uint8_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
1056};
1057
1058const uint8_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
1063};
1064
1065const uint8_t ff_vc1_adv_interlaced_4x8_zz [32] = { /* Table 237 */
1066 0, 1, 2, 8,
1067 16, 9, 24, 17,
1068 10, 3, 32, 40,
1069 48, 56, 25, 18,
1070 33, 26, 41, 34,
1071 49, 57, 11, 42,
1072 19, 50, 27, 58,
1073 35, 43, 51, 59
1074};
1075
1076const uint8_t ff_vc1_adv_interlaced_4x4_zz [16] = { /* Table 238 */
1077 0, 8, 16, 24,
1078 1, 9, 17, 2,
1079 25, 10, 18, 3,
1080 26, 11, 19, 27
1081};
1082
1083
1084/* DQScale as specified in 8.1.3.9 - almost identical to 0x40000/i */
1085const 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
1094};
1095
1096/* P Interlaced field picture MV predictor scaling values (Table 114) */
1097const uint16_t ff_vc1_field_mvpred_scales[2][7][4] = {
1098// Refdist:
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
1108 },
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
1117 }
1118};
1119
1120/* B Interlaced field picture backward MV predictor scaling values for first field (Table 115) */
1121const uint16_t ff_vc1_b_field_mvpred_scales[7][4] = {
1122 // BRFD:
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
1131};
1132
1133const int ff_vc1_ac_sizes[AC_MODES] = {
1134 186, 169, 133, 149, 103, 103, 163, 175
1135};