]> git.sesse.net Git - ffmpeg/blob - libavcodec/vc1data.h
fde7350758f808db9514ecda2892aba9a2367f1a
[ffmpeg] / libavcodec / vc1data.h
1 /*
2  * VC-1 and WMV3 decoder
3  * copyright (c) 2006 Konstantin Shishkov
4  * (c) 2005 anonymous, Alex Beregszaszi, Michael Niedermayer
5  *
6  * This file is part of FFmpeg.
7  *
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.
12  *
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.
17  *
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
21  */
22
23 /**
24  * @file vc1data.h
25  * VC-1 tables.
26  */
27
28 #ifndef VC1DATA_H
29 #define VC1DATA_H
30
31 /** Table for conversion between TTBLK and TTMB */
32 static const int ttblk_to_tt[3][8] = {
33   { TT_8X4, TT_4X8, TT_8X8, TT_4X4, TT_8X4_TOP, TT_8X4_BOTTOM, TT_4X8_RIGHT, TT_4X8_LEFT },
34   { TT_8X8, TT_4X8_RIGHT, TT_4X8_LEFT, TT_4X4, TT_8X4, TT_4X8, TT_8X4_BOTTOM, TT_8X4_TOP },
35   { TT_8X8, TT_4X8, TT_4X4, TT_8X4_BOTTOM, TT_4X8_RIGHT, TT_4X8_LEFT, TT_8X4, TT_8X4_TOP }
36 };
37
38 static const int ttfrm_to_tt[4] = { TT_8X8, TT_8X4, TT_4X8, TT_4X4 };
39
40 /** MV P mode - the 5th element is only used for mode 1 */
41 static const uint8_t mv_pmode_table[2][5] = {
42   { MV_PMODE_1MV_HPEL_BILIN, MV_PMODE_1MV, MV_PMODE_1MV_HPEL, MV_PMODE_INTENSITY_COMP, MV_PMODE_MIXED_MV },
43   { MV_PMODE_1MV, MV_PMODE_MIXED_MV, MV_PMODE_1MV_HPEL, MV_PMODE_INTENSITY_COMP, MV_PMODE_1MV_HPEL_BILIN }
44 };
45 static const uint8_t mv_pmode_table2[2][4] = {
46   { MV_PMODE_1MV_HPEL_BILIN, MV_PMODE_1MV, MV_PMODE_1MV_HPEL, MV_PMODE_MIXED_MV },
47   { MV_PMODE_1MV, MV_PMODE_MIXED_MV, MV_PMODE_1MV_HPEL, MV_PMODE_1MV_HPEL_BILIN }
48 };
49
50 static const int fps_nr[5] = { 24, 25, 30, 50, 60 },
51   fps_dr[2] = { 1000, 1001 };
52 static const uint8_t pquant_table[3][32] = {
53   {  /* Implicit quantizer */
54      0,  1,  2,  3,  4,  5,  6,  7,  8,  6,  7,  8,  9, 10, 11, 12,
55     13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 29, 31
56   },
57   {  /* Explicit quantizer, pquantizer uniform */
58      0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
59     16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
60   },
61   {  /* Explicit quantizer, pquantizer non-uniform */
62      0,  1,  1,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13,
63     14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 31
64   }
65 };
66
67 /** @name VC-1 VLC tables and defines
68  *  @todo TODO move this into the context
69  */
70 //@{
71 #define VC1_BFRACTION_VLC_BITS 7
72 static VLC vc1_bfraction_vlc;
73 #define VC1_IMODE_VLC_BITS 4
74 static VLC vc1_imode_vlc;
75 #define VC1_NORM2_VLC_BITS 3
76 static VLC vc1_norm2_vlc;
77 #define VC1_NORM6_VLC_BITS 9
78 static VLC vc1_norm6_vlc;
79 /* Could be optimized, one table only needs 8 bits */
80 #define VC1_TTMB_VLC_BITS 9 //12
81 static VLC vc1_ttmb_vlc[3];
82 #define VC1_MV_DIFF_VLC_BITS 9 //15
83 static VLC vc1_mv_diff_vlc[4];
84 #define VC1_CBPCY_P_VLC_BITS 9 //14
85 static VLC vc1_cbpcy_p_vlc[4];
86 #define VC1_4MV_BLOCK_PATTERN_VLC_BITS 6
87 static VLC vc1_4mv_block_pattern_vlc[4];
88 #define VC1_TTBLK_VLC_BITS 5
89 static VLC vc1_ttblk_vlc[3];
90 #define VC1_SUBBLKPAT_VLC_BITS 6
91 static VLC vc1_subblkpat_vlc[3];
92
93 static VLC vc1_ac_coeff_table[8];
94 //@}
95
96
97 #if 0 //original bfraction from vc9data.h, not conforming to standard
98 /* Denominator used for vc1_bfraction_lut */
99 #define B_FRACTION_DEN  840
100
101 /* bfraction is fractional, we scale to the GCD 3*5*7*8 = 840 */
102 const int16_t vc1_bfraction_lut[23] = {
103   420 /*1/2*/, 280 /*1/3*/, 560 /*2/3*/, 210 /*1/4*/,
104   630 /*3/4*/, 168 /*1/5*/, 336 /*2/5*/,
105   504 /*3/5*/, 672 /*4/5*/, 140 /*1/6*/, 700 /*5/6*/,
106   120 /*1/7*/, 240 /*2/7*/, 360 /*3/7*/, 480 /*4/7*/,
107   600 /*5/7*/, 720 /*6/7*/, 105 /*1/8*/, 315 /*3/8*/,
108   525 /*5/8*/, 735 /*7/8*/,
109   -1 /*inv.*/, 0 /*BI fm*/
110 };
111 #else
112 /* Denominator used for vc1_bfraction_lut */
113 #define B_FRACTION_DEN  256
114
115 /* pre-computed scales for all bfractions and base=256 */
116 static const int16_t vc1_bfraction_lut[23] = {
117   128 /*1/2*/,  85 /*1/3*/, 170 /*2/3*/,  64 /*1/4*/,
118   192 /*3/4*/,  51 /*1/5*/, 102 /*2/5*/,
119   153 /*3/5*/, 204 /*4/5*/,  43 /*1/6*/, 215 /*5/6*/,
120    37 /*1/7*/,  74 /*2/7*/, 111 /*3/7*/, 148 /*4/7*/,
121   185 /*5/7*/, 222 /*6/7*/,  32 /*1/8*/,  96 /*3/8*/,
122   160 /*5/8*/, 224 /*7/8*/,
123   -1 /*inv.*/, 0 /*BI fm*/
124 };
125 #endif
126
127 static const uint8_t vc1_bfraction_bits[23] = {
128     3, 3, 3, 3,
129     3, 3, 3,
130     7, 7, 7, 7,
131     7, 7, 7, 7,
132     7, 7, 7, 7,
133     7, 7,
134     7, 7
135 };
136 static const uint8_t vc1_bfraction_codes[23] = {
137      0,   1,   2,   3,
138      4,   5,   6,
139    112, 113, 114, 115,
140    116, 117, 118, 119,
141    120, 121, 122, 123,
142    124, 125,
143    126, 127
144 };
145
146 //Same as H.264
147 static const AVRational vc1_pixel_aspect[16]={
148  {0, 1},
149  {1, 1},
150  {12, 11},
151  {10, 11},
152  {16, 11},
153  {40, 33},
154  {24, 11},
155  {20, 11},
156  {32, 11},
157  {80, 33},
158  {18, 11},
159  {15, 11},
160  {64, 33},
161  {160, 99},
162  {0, 1},
163  {0, 1}
164 };
165
166 /* BitPlane IMODE - such a small table... */
167 static const uint8_t vc1_imode_codes[7] = {
168   0, 2, 1, 3, 1, 2, 3
169 };
170 static const uint8_t vc1_imode_bits[7] = {
171   4, 2, 3, 2, 4, 3, 3
172 };
173
174 /* Normal-2 imode */
175 static const uint8_t vc1_norm2_codes[4] = {
176   0, 4, 5, 3
177 };
178 static const uint8_t vc1_norm2_bits[4] = {
179   1, 3, 3, 2
180 };
181
182 static const uint16_t vc1_norm6_codes[64] = {
183 0x001, 0x002, 0x003, 0x000, 0x004, 0x001, 0x002, 0x047, 0x005, 0x003, 0x004, 0x04B, 0x005, 0x04D, 0x04E, 0x30E,
184 0x006, 0x006, 0x007, 0x053, 0x008, 0x055, 0x056, 0x30D, 0x009, 0x059, 0x05A, 0x30C, 0x05C, 0x30B, 0x30A, 0x037,
185 0x007, 0x00A, 0x00B, 0x043, 0x00C, 0x045, 0x046, 0x309, 0x00D, 0x049, 0x04A, 0x308, 0x04C, 0x307, 0x306, 0x036,
186 0x00E, 0x051, 0x052, 0x305, 0x054, 0x304, 0x303, 0x035, 0x058, 0x302, 0x301, 0x034, 0x300, 0x033, 0x032, 0x007,
187 };
188
189 static const uint8_t vc1_norm6_bits[64] = {
190  1,  4,  4,  8,  4,  8,  8, 10,  4,  8,  8, 10,  8, 10, 10, 13,
191  4,  8,  8, 10,  8, 10, 10, 13,  8, 10, 10, 13, 10, 13, 13,  9,
192  4,  8,  8, 10,  8, 10, 10, 13,  8, 10, 10, 13, 10, 13, 13,  9,
193  8, 10, 10, 13, 10, 13, 13,  9, 10, 13, 13,  9, 13,  9,  9,  6,
194 };
195 /* Normal-6 imode */
196 static const uint8_t vc1_norm6_spec[64][5] = {
197 { 0,  1, 1        },
198 { 1,  2, 4        },
199 { 2,  3, 4        },
200 { 3,  0, 8        },
201 { 4,  4, 4        },
202 { 5,  1, 8        },
203 { 6,  2, 8        },
204 { 7,  2, 5,  7, 5 },
205 { 8,  5, 4        },
206 { 9,  3, 8        },
207 {10,  4, 8        },
208 {11,  2, 5, 11, 5 },
209 {12,  5, 8        },
210 {13,  2, 5, 13, 5 },
211 {14,  2, 5, 14, 5 },
212 {15,  3, 5, 14, 8 },
213 {16,  6, 4        },
214 {17,  6, 8        },
215 {18,  7, 8        },
216 {19,  2, 5, 19, 5 },
217 {20,  8, 8        },
218 {21,  2, 5, 21, 5 },
219 {22,  2, 5, 22, 5 },
220 {23,  3, 5, 13, 8 },
221 {24,  9, 8        },
222 {25,  2, 5, 25, 5 },
223 {26,  2, 5, 26, 5 },
224 {27,  3, 5, 12, 8 },
225 {28,  2, 5, 28, 5 },
226 {29,  3, 5, 11, 8 },
227 {30,  3, 5, 10, 8 },
228 {31,  3, 5,  7, 4 },
229 {32,  7, 4        },
230 {33, 10, 8        },
231 {34, 11, 8        },
232 {35,  2, 5,  3, 5 },
233 {36, 12, 8        },
234 {37,  2, 5,  5, 5 },
235 {38,  2, 5,  6, 5 },
236 {39,  3, 5,  9, 8 },
237 {40, 13, 8        },
238 {41,  2, 5,  9, 5 },
239 {42,  2, 5, 10, 5 },
240 {43,  3, 5,  8, 8 },
241 {44,  2, 5, 12, 5 },
242 {45,  3, 5,  7, 8 },
243 {46,  3, 5,  6, 8 },
244 {47,  3, 5,  6, 4 },
245 {48, 14, 8        },
246 {49,  2, 5, 17, 5 },
247 {50,  2, 5, 18, 5 },
248 {51,  3, 5,  5, 8 },
249 {52,  2, 5, 20, 5 },
250 {53,  3, 5,  4, 8 },
251 {54,  3, 5,  3, 8 },
252 {55,  3, 5,  5, 4 },
253 {56,  2, 5, 24, 5 },
254 {57,  3, 5,  2, 8 },
255 {58,  3, 5,  1, 8 },
256 {59,  3, 5,  4, 4 },
257 {60,  3, 5,  0, 8 },
258 {61,  3, 5,  3, 4 },
259 {62,  3, 5,  2, 4 },
260 {63,  3, 5,  1, 1 },
261 };
262
263 /* 4MV Block pattern VLC tables */
264 static const uint8_t vc1_4mv_block_pattern_codes[4][16] = {
265   { 14, 58, 59, 25, 12, 26, 15, 15, 13, 24, 27,  0, 28,  1,  2,  2},
266   {  8, 18, 19,  4, 20,  5, 30, 11, 21, 31,  6, 12,  7, 13, 14,  0},
267   { 15,  6,  7,  2,  8,  3, 28,  9, 10, 29,  4, 11,  5, 12, 13,  0},
268   {  0, 11, 12,  4, 13,  5, 30, 16, 14, 31,  6, 17,  7, 18, 19, 10}
269 };
270 static const uint8_t vc1_4mv_block_pattern_bits[4][16] = {
271   { 5, 6, 6, 5, 5, 5, 5, 4, 5, 5, 5, 3, 5, 3, 3, 2},
272   { 4, 5, 5, 4, 5, 4, 5, 4, 5, 5, 4, 4, 4, 4, 4, 2},
273   { 4, 4, 4, 4, 4, 4, 5, 4, 4, 5, 4, 4, 4, 4, 4, 3},
274   { 2, 4, 4, 4, 4, 4, 5, 5, 4, 5, 4, 5, 4, 5, 5, 4}
275 };
276
277 const uint8_t wmv3_dc_scale_table[32]={
278     0, 2, 4, 8, 8, 8, 9, 9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,17,17,18,18,19,19,20,20,21,21
279 };
280
281 /* P-Picture CBPCY VLC tables */
282 #if 1 // Looks like original tables are not conforming to standard at all. Are they used for old WMV?
283 static const uint16_t vc1_cbpcy_p_codes[4][64] = {
284   {
285       0,   6,  15,  13,  13,  11,   3,  13,   5,   8,  49,  10,  12, 114, 102, 119,
286       1,  54,  96,   8,  10, 111,   5,  15,  12,  10,   2,  12,  13, 115,  53,  63,
287       1,   7,   1,   7,  14,  12,   4,  14,   1,   9,  97,  11,   7,  58,  52,  62,
288       4, 103,   1,   9,  11,  56, 101, 118,   4, 110, 100,  30,   2,   5,   4,   3
289   },
290   {
291       0,   9,   1,  18,   5,  14, 237,  26,   3, 121,   3,  22,  13,  16,   6,  30,
292       2,  10,   1,  20,  12, 241,   5,  28,  16,  12,   3,  24,  28, 124, 239, 247,
293       1, 240,   1,  19,  18,  15,   4,  27,   1, 122,   2,  23,   1,  17,   7,  31,
294       1,  11,   2,  21,  19, 246, 238,  29,  17,  13, 236,  25,  58,  63,   8, 125
295   },
296   {
297       0, 201,  25, 231,   5, 221,   1,   3,   2, 414,   2, 241,  16, 225, 195, 492,
298       2, 412,   1, 240,   7, 224,  98, 245,   1, 220,  96,   5,   9, 230, 101, 247,
299       1, 102,   1, 415,  24,   3,   2, 244,   3,  54,   3, 484,  17, 114, 200, 493,
300       3, 413,   1,   4,  13, 113,  99, 485,   4, 111, 194, 243,   5,  29,  26,  31
301   },
302   {
303       0,  28,  12,  44,   3,  36,  20,  52,   2,  32,  16,  48,   8,  40,  24,  28,
304       1,  30,  14,  46,   6,  38,  22,  54,   3,  34,  18,  50,  10,  42,  26,  30,
305       1,  29,  13,  45,   5,  37,  21,  53,   2,  33,  17,  49,   9,  41,  25,  29,
306       1,  31,  15,  47,   7,  39,  23,  55,   4,  35,  19,  51,  11,  43,  27,  31
307    }
308 };
309
310 static const uint8_t vc1_cbpcy_p_bits[4][64] = {
311   {
312     13,  13,   7,  13,   7,  13,  13,  12,   6,  13,   7,  12,   6,   8,   8,   8,
313      5,   7,   8,  12,   6,   8,  13,  12,   7,  13,  13,  12,   6,   8,   7,   7,
314      6,  13,   8,  12,   7,  13,  13,  12,   7,  13,   8,  12,   5,   7,   7,   7,
315      6,   8,  13,  12,   6,   7,   8,   8,   5,   8,   8,   6,   3,   3,   3,   2
316   },
317   {
318     14,  13,   8,  13,   3,  13,   8,  13,   3,   7,   8,  13,   4,  13,  13,  13,
319      3,  13,  13,  13,   4,   8,  13,  13,   5,  13,  13,  13,   5,   7,   8,   8,
320      3,   8,  14,  13,   5,  13,  13,  13,   4,   7,  13,  13,   6,  13,  13,  13,
321      5,  13,   8,  13,   5,   8,   8,  13,   5,  13,   8,  13,   6,   6,  13,   7
322   },
323   {
324     13,   8,   6,   8,   4,   8,  13,  12,   4,   9,   8,   8,   5,   8,   8,   9,
325      5,   9,  10,   8,   4,   8,   7,   8,   6,   8,   7,  13,   4,   8,   7,   8,
326      5,   7,   8,   9,   6,  13,  13,   8,   4,   6,   8,   9,   5,   7,   8,   9,
327      5,   9,   9,  13,   5,   7,   7,   9,   4,   7,   8,   8,   3,   5,   5,   5
328   },
329   {
330      9,   9,   9,   9,   2,   9,   9,   9,   2,   9,   9,   9,   9,   9,   9,   8,
331      3,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   8,
332      2,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   8,
333      9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   9,   8
334   }
335 };
336 #else
337 static const uint16_t vc1_cbpcy_p_codes[4][64] = {
338   {
339       0,   1,   1,   4,   5,   1,  12,   4,  13,  14,  10,  11,  12,   7,  13,   2,
340      15,   1,  96,   1,  49,  97,   2, 100,   3,   4,   5, 101, 102,  52,  53,   4,
341       6,   7,  54, 103,   8,   9,  10, 110,  11,  12, 111,  56, 114,  58, 115,   5,
342      13,   7,   8,   9,  10,  11,  12,  30,  13,  14,  15, 118, 119,  62,  63,   3
343   },
344   {
345       0,   1,   2,   1,   3,   1,  16,  17,   5,  18,  12,  19,  13,   1,  28,  58,
346       1,   1,   1,   2,   3,   2,   3, 236, 237,   4,   5, 238,   6,   7, 239,   8,
347       9, 240,  10,  11, 121, 122,  12,  13,  14,  15, 241, 246,  16,  17, 124,  63,
348      18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31, 247, 125
349   },
350   {
351       0,   1,   2,   3,   2,   3,   1,   4,   5,  24,   7,  13,  16,  17,   9,   5,
352      25,   1,   1,   1,   2,   3,  96, 194,   1,   2,  98,  99, 195, 200, 101,  26,
353     201, 102, 412, 413, 414,  54, 220, 111, 221,   3, 224, 113, 225, 114, 230,  29,
354     231, 415, 240,   4, 241, 484,   5, 243,   3, 244, 245, 485, 492, 493, 247,  31
355   },
356   {
357       0,   1,   1,   1,   2,   2,   3,   4,   3,   5,   6,   7,   8,   9,  10,  11,
358      12,  13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,
359      28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,  43,
360      44,  45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  28,  29,  30,  31
361    }
362 };
363 static const uint8_t vc1_cbpcy_p_bits[4][64] = {
364   {
365     13,  6,  5,  6,  6,  7,  7,  5,  7,  7,  6,  6,  6,  5,  6,  3,
366      7,  8,  8, 13,  7,  8, 13,  8, 13, 13, 13,  8,  8,  7,  7,  3,
367     13, 13,  7,  8, 13, 13, 13,  8, 13, 13,  8,  7,  8,  7,  8,  3,
368     13, 12, 12, 12, 12, 12, 12,  6, 12, 12, 12,  8,  8,  7,  7,  2
369   },
370   {
371     14,  3,  3,  5,  3,  4,  5,  5,  3,  5,  4,  5,  4,  6,  5,  6,
372      8, 14, 13,  8,  8, 13, 13,  8,  8, 13, 13,  8, 13, 13,  8, 13,
373     13,  8, 13, 13,  7,  7, 13, 13, 13, 13,  8,  8, 13, 13,  7,  6,
374     13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,  8,  7
375   },
376   {
377     13,  5,  5,  5,  4,  4,  6,  4,  4,  6,  4,  5,  5,  5,  4,  3,
378      6,  8, 10,  9,  8,  8,  7,  8, 13, 13,  7,  7,  8,  8,  7,  5,
379      8,  7,  9,  9,  9,  6,  8,  7,  8, 13,  8,  7,  8,  7,  8,  5,
380      8,  9,  8, 13,  8,  9, 13,  8, 12,  8,  8,  9,  9,  9,  8,  5
381   },
382   {
383      9,  2,  3,  9,  2,  9,  9,  9,  2,  9,  9,  9,  9,  9,  9,  9,
384      9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
385      9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
386      9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  8,  8,  8,  8
387   }
388 };
389 #endif
390
391 /* MacroBlock Transform Type: 7.1.3.11, p89
392  * 8x8:B
393  * 8x4:B:btm  8x4:B:top  8x4:B:both,
394  * 4x8:B:right  4x8:B:left  4x8:B:both
395  * 4x4:B  8x8:MB
396  * 8x4:MB:btm  8x4:MB:top  8x4,MB,both
397  * 4x8,MB,right  4x8,MB,left
398  * 4x4,MB                               */
399 static const uint16_t vc1_ttmb_codes[3][16] = {
400   {
401     0x0003,
402     0x002E, 0x005F, 0x0000,
403     0x0016, 0x0015, 0x0001,
404     0x0004, 0x0014,
405     0x02F1, 0x0179, 0x017B,
406     0x0BC0, 0x0BC1, 0x05E1,
407     0x017A
408   },
409   {
410     0x0006,
411     0x0006, 0x0003, 0x0007,
412     0x000F, 0x000E, 0x0000,
413     0x0002, 0x0002,
414     0x0014, 0x0011, 0x000B,
415     0x0009, 0x0021, 0x0015,
416     0x0020
417   },
418   {
419     0x0006,
420     0x0000, 0x000E, 0x0005,
421     0x0002, 0x0003, 0x0003,
422     0x000F, 0x0002,
423     0x0081, 0x0021, 0x0009,
424     0x0101, 0x0041, 0x0011,
425     0x0100
426   }
427 };
428
429 static const uint8_t vc1_ttmb_bits[3][16] = {
430   {
431      2,
432      6,  7,  2,
433      5,  5,  2,
434      3,  5,
435     10,  9,  9,
436     12, 12, 11,
437      9
438   },
439   {
440     3,
441     4, 4, 4,
442     4, 4, 3,
443     3, 2,
444     7, 7, 6,
445     6, 8, 7,
446     8
447   },
448   {
449      3,
450      3, 4, 5,
451      3, 3, 4,
452      4, 2,
453     10, 8, 6,
454     11, 9, 7,
455     11
456   }
457 };
458
459 /* TTBLK (Transform Type per Block) tables */
460 static const uint8_t vc1_ttblk_codes[3][8] = {
461   {  0,  1,  3,  5, 16, 17, 18, 19},
462   {  3,  0,  1,  2,  3,  5,  8,  9},
463   {  1,  0,  1,  4,  6,  7, 10, 11}
464 };
465 static const uint8_t vc1_ttblk_bits[3][8] = {
466   {  2,  2,  2,  3,  5,  5,  5,  5},
467   {  2,  3,  3,  3,  3,  3,  4,  4},
468   {  2,  3,  3,  3,  3,  3,  4,  4}
469 };
470
471 /* SUBBLKPAT tables, p93-94, reordered */
472 static const uint8_t vc1_subblkpat_codes[3][15] = {
473   { 14, 12,  7, 11,  9, 26,  2, 10, 27,  8,  0,  6,  1, 15,  1},
474   { 14,  0,  8, 15, 10,  4, 23, 13,  5,  9, 25,  3, 24, 22,  1},
475   {  5,  6,  2,  2,  8,  0, 28,  3,  1,  3, 29,  1, 19, 18, 15}
476 };
477 static const uint8_t vc1_subblkpat_bits[3][15] = {
478   {  5,  5,  5,  5,  5,  6,  4,  5,  6,  5,  4,  5,  4,  5,  1},
479   {  4,  3,  4,  4,  4,  5,  5,  4,  5,  4,  5,  4,  5,  5,  2},
480   {  3,  3,  4,  3,  4,  5,  5,  3,  5,  4,  5,  4,  5,  5,  4}
481 };
482
483 /* MV differential tables, p265 */
484 static const uint16_t vc1_mv_diff_codes[4][73] = {
485   {
486        0,    2,    3,    8,  576,    3,    2,    6,
487        5,  577,  578,    7,    8,    9,   40,   19,
488       37,   82,   21,   22,   23,  579,  580,  166,
489       96,  167,   49,  194,  195,  581,  582,  583,
490      292,  293,  294,   13,    2,    7,   24,   50,
491      102,  295,   13,    7,    8,   18,   50,  103,
492       38,   20,   21,   22,   39,  204,  103,   23,
493       24,   25,  104,  410,  105,  106,  107,  108,
494      109,  220,  411,  442,  222,  443,  446,  447,
495        7 /* 73 elements */
496   },
497   {
498        0,    4,    5,    3,    4,    3,    4,    5,
499       20,    6,   21,   44,   45,   46, 3008,   95,
500      112,  113,   57, 3009, 3010,  116,  117, 3011,
501      118, 3012, 3013, 3014, 3015, 3016, 3017, 3018,
502     3019, 3020, 3021, 3022,    1,    4,   15,  160,
503      161,   41,    6,   11,   42,  162,   43,  119,
504       56,   57,   58,  163,  236,  237, 3023,  119,
505      120,  242,  122,  486, 1512,  487,  246,  494,
506     1513,  495, 1514, 1515, 1516, 1517, 1518, 1519,
507       31 /* 73 elements */
508   },
509   {
510        0,  512,  513,  514,  515,    2,    3,  258,
511      259,  260,  261,  262,  263,  264,  265,  266,
512      267,  268,  269,  270,  271,  272,  273,  274,
513      275,  276,  277,  278,  279,  280,  281,  282,
514      283,  284,  285,  286,    1,    5,  287,  288,
515      289,  290,    6,    7,  291,  292,  293,  294,
516      295,  296,  297,  298,  299,  300,  301,  302,
517      303,  304,  305,  306,  307,  308,  309,  310,
518      311,  312,  313,  314,  315,  316,  317,  318,
519      319 /* 73 elements */
520   },
521   {
522        0,    1,    1,    2,    3,    4,    1,    5,
523        4,    3,    5,    8,    6,    9,   10,   11,
524       12,    7,  104,   14,  105,    4,   10,   15,
525       11,    6,   14,    8,  106,  107,  108,   15,
526      109,    9,   55,   10,    1,    2,    1,    2,
527        3,   12,    6,    2,    6,    7,   28,    7,
528       15,    8,    5,   18,   29,  152,   77,   24,
529       25,   26,   39,  108,   13,  109,   55,   56,
530       57,  116,   11,  153,  234,  235,  118,  119,
531       15 /* 73 elements */
532   }
533 };
534 static const uint8_t vc1_mv_diff_bits[4][73] = {
535   {
536      6,  7,  7,  8, 14,  6,  5,  6,  7, 14, 14,  6,  6,  6,  8,  9,
537     10,  9,  7,  7,  7, 14, 14, 10,  9, 10,  8, 10, 10, 14, 14, 14,
538     13, 13, 13,  6,  3,  5,  6,  8,  9, 13,  5,  4,  4,  5,  7,  9,
539      6,  5,  5,  5,  6,  9,  8,  5,  5,  5,  7, 10,  7,  7,  7,  7,
540      7,  8, 10,  9,  8,  9,  9,  9,  3 /* 73 elements */
541   },
542   {
543      5,  7,  7,  6,  6,  5,  5,  6,  7,  5,  7,  8,  8,  8, 14,  9,
544      9,  9,  8, 14, 14,  9,  9, 14,  9, 14, 14, 14, 14, 14, 14, 14,
545     14, 14, 14, 14,  2,  3,  6,  8,  8,  6,  3,  4,  6,  8,  6,  9,
546      6,  6,  6,  8,  8,  8, 14,  7,  7,  8,  7,  9, 13,  9,  8,  9,
547     13,  9, 13, 13, 13, 13, 13, 13,  5 /* 73 elements */
548
549   },
550   {
551      3, 12, 12, 12, 12,  3,  4, 11, 11, 11, 11, 11, 11, 11, 11, 11,
552     11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
553     11, 11, 11, 11,  1,  5, 11, 11, 11, 11,  4,  4, 11, 11, 11, 11,
554     11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
555     11, 11, 11, 11, 11, 11, 11, 11, 11 /* 73 elements */
556   },
557   {
558     15, 11, 15, 15, 15, 15, 12, 15, 12, 11, 12, 12, 15, 12, 12, 12,
559     12, 15, 15, 12, 15, 10, 11, 12, 11, 10, 11, 10, 15, 15, 15, 11,
560     15, 10, 14, 10,  4,  4,  5,  7,  8,  9,  5,  3,  4,  5,  6,  8,
561      5,  4,  3,  5,  6,  8,  7,  5,  5,  5,  6,  7,  9,  7,  6,  6,
562      6,  7, 10,  8,  8,  8,  7,  7,  4 /* 73 elements */
563   }
564 };
565
566 /* DC differentials low+hi-mo, p217 are the same as in msmpeg4data .h */
567
568 /* Scantables/ZZ scan are at 11.9 (p262) and 8.1.1.12 (p10) */
569 static const int8_t vc1_normal_zz[64] = {
570        0,     8,     1,     2,     9,    16,    24,    17,
571       10,     3,     4,    11,    18,    25,    32,    40,
572       33,    48,    26,    19,    12,     5,     6,    13,
573       20,    27,    34,    41,    56,    49,    57,    42,
574       35,    28,    21,    14,     7,    15,    22,    29,
575       36,    43,    50,    58,    51,    59,    44,    37,
576       30,    23,    31,    38,    45,    52,    60,    53,
577       61,    46,    39,    47,    54,    62,    55,    63
578 };
579
580 static const int8_t vc1_horizontal_zz [64] = /* Table 227 */
581 {
582        0,     1,     8,     2,     3,     9,    16,    24,
583       17,    10,     4,     5,    11,    18,    25,    32,
584       40,    48,    33,    26,    19,    12,     6,     7,
585       13,    20,    27,    34,    41,    56,    49,    57,
586       42,    35,    28,    21,    14,    15,    22,    29,
587       36,    43,    50,    58,    51,    44,    37,    30,
588       23,    31,    38,    45,    52,    59,    60,    53,
589       46,    39,    47,    54,    61,    62,    55,    63
590 };
591
592 static const int8_t vc1_vertical_zz [64] = /* Table 228 */
593 {
594        0,     8,    16,     1,    24,    32,    40,     9,
595        2,     3,    10,    17,    25,    48,    56,    41,
596       33,    26,    18,    11,     4,     5,    12,    19,
597       27,    34,    49,    57,    50,    42,    35,    28,
598       20,    13,     6,     7,    14,    21,    29,    36,
599       43,    51,    58,    59,    52,    44,    37,    30,
600       22,    15,    23,    31,    38,    45,    60,    53,
601       46,    39,    47,    54,    61,    62,    55,    63
602 };
603
604 static const int8_t vc1_simple_progressive_8x8_zz [64] =
605 /* Table 229 */
606 {
607        0,     8,     1,     2,     9,    16,    24,    17,
608       10,     3,     4,    11,    18,    25,    32,    40,
609       48,    56,    41,    33,    26,    19,    12,     5,
610        6,    13,    20,    27,    34,    49,    57,    58,
611       50,    42,    35,    28,    21,    14,     7,    15,
612       22,    29,    36,    43,    51,    59,    60,    52,
613       44,    37,    30,    23,    31,    38,    45,    53,
614       61,    62,    54,    46,    39,    47,    55,    63
615 };
616
617 static const int8_t vc1_simple_progressive_8x4_zz [32] = /* Table 230 */
618 {
619        0,     1,     2,     8,     3,     9,    10,    16,
620        4,    11,    17,    24,    18,    12,     5,    19,
621       25,    13,    20,    26,    27,     6,    21,    28,
622       14,    22,    29,     7,    30,    15,    23,    31
623 };
624
625 static const int8_t vc1_simple_progressive_4x8_zz [32] = /* Table 231 */
626 {
627        0,     8,     1,    16,
628        9,    24,    17,     2,
629       32,    10,    25,    40,
630       18,    48,    33,    26,
631       56,    41,    34,     3,
632       49,    57,    11,    42,
633       19,    50,    27,    58,
634       35,    43,    51,    59
635 };
636
637 /* Table 232 */
638 static const int8_t vc1_simple_progressive_4x4_zz [16] =
639 {
640        0,     8,    16,     1,
641        9,    24,    17,     2,
642       10,    18,    25,     3,
643       11,    26,    19,    27
644 };
645
646 static const int8_t vc1_adv_progressive_8x4_zz [32] = /* Table 233 */
647 {
648        0,     8,     1,    16,     2,     9,    10,     3,
649       24,    17,     4,    11,    18,    12,     5,    19,
650       25,    13,    20,    26,    27,     6,    21,    28,
651       14,    22,    29,     7,    30,    15,    23,    31
652 };
653
654 static const int8_t vc1_adv_progressive_4x8_zz [32] = /* Table 234 */
655 {
656        0,     1,     8,     2,
657        9,    16,    17,    24,
658       10,    32,    25,    18,
659       40,     3,    33,    26,
660       48,    11,    56,    41,
661       34,    49,    57,    42,
662       19,    50,    27,    58,
663       35,    43,    51,    59
664 };
665
666 static const int8_t vc1_adv_interlaced_8x8_zz [64] = /* Table 235 */
667 {
668        0,     8,     1,    16,    24,     9,     2,    32,
669       40,    48,    56,    17,    10,     3,    25,    18,
670       11,     4,    33,    41,    49,    57,    26,    34,
671       42,    50,    58,    19,    12,     5,    27,    20,
672       13,     6,    35,    28,    21,    14,     7,    15,
673       22,    29,    36,    43,    51,    59,    60,    52,
674       44,    37,    30,    23,    31,    38,    45,    53,
675       61,    62,    54,    46,    39,    47,    55,    63
676 };
677
678 static const int8_t vc1_adv_interlaced_8x4_zz [32] = /* Table 236 */
679 {
680        0,     8,    16,    24,     1,     9,     2,    17,
681       25,    10,     3,    18,    26,     4,    11,    19,
682       12,     5,    13,    20,    27,     6,    21,    28,
683       14,    22,    29,     7,    30,    15,    23,    31
684 };
685
686 static const int8_t vc1_adv_interlaced_4x8_zz [32] = /* Table 237 */
687 {
688        0,     1,     2,     8,
689       16,     9,    24,    17,
690       10,     3,    32,    40,
691       48,    56,    25,    18,
692       33,    26,    41,    34,
693       49,    57,    11,    42,
694       19,    50,    27,    58,
695       35,    43,    51,    59
696 };
697
698 static const int8_t vc1_adv_interlaced_4x4_zz [16] = /* Table 238 */
699 {
700        0,     8,    16,    24,
701        1,     9,    17,     2,
702       25,    10,    18,     3,
703       26,    11,    19,    27
704 };
705
706
707 /* DQScale as specified in 8.1.3.9 - almost identical to 0x40000/i */
708 static const int32_t vc1_dqscale[63] = {
709 0x40000, 0x20000, 0x15555, 0x10000, 0xCCCD, 0xAAAB, 0x9249, 0x8000,
710     0x71C7, 0x6666, 0x5D17, 0x5555, 0x4EC5, 0x4925, 0x4444, 0x4000,
711     0x3C3C, 0x38E4, 0x35E5, 0x3333, 0x30C3, 0x2E8C, 0x2C86, 0x2AAB,
712     0x28F6, 0x2762, 0x25ED, 0x2492, 0x234F, 0x2222, 0x2108, 0x2000,
713     0x1F08, 0x1E1E, 0x1D42, 0x1C72, 0x1BAD, 0x1AF3, 0x1A42, 0x199A,
714     0x18FA, 0x1862, 0x17D0, 0x1746, 0x16C1, 0x1643, 0x15CA, 0x1555,
715     0x14E6, 0x147B, 0x1414, 0x13B1, 0x1352, 0x12F7, 0x129E, 0x1249,
716     0x11F7, 0x11A8, 0x115B, 0x1111, 0x10C9, 0x1084, 0x1000
717 };
718 #endif /* VC1DATA_H */