comparison vc1data.h @ 4928:7ec5c2e20271 libavcodec

Move VC-1 data to .c file
author kostya
date Sun, 06 May 2007 11:23:12 +0000
parents 194f4ced7c50
children 67975429cb40
comparison
equal deleted inserted replaced
4927:270c8a34f234 4928:7ec5c2e20271
27 27
28 #ifndef VC1DATA_H 28 #ifndef VC1DATA_H
29 #define VC1DATA_H 29 #define VC1DATA_H
30 30
31 /** Table for conversion between TTBLK and TTMB */ 31 /** Table for conversion between TTBLK and TTMB */
32 static const int ttblk_to_tt[3][8] = { 32 extern 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 33
38 static const int ttfrm_to_tt[4] = { TT_8X8, TT_8X4, TT_4X8, TT_4X4 }; 34 extern const int ttfrm_to_tt[4];
39 35
40 /** MV P mode - the 5th element is only used for mode 1 */ 36 /** MV P mode - the 5th element is only used for mode 1 */
41 static const uint8_t mv_pmode_table[2][5] = { 37 extern 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 }, 38 extern const uint8_t mv_pmode_table2[2][4];
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 39
50 static const int fps_nr[5] = { 24, 25, 30, 50, 60 }, 40 extern const int fps_nr[5], fps_dr[2];
51 fps_dr[2] = { 1000, 1001 }; 41 extern const uint8_t pquant_table[3][32];
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 42
67 /** @name VC-1 VLC tables and defines 43 /** @name VC-1 VLC tables and defines
68 * @todo TODO move this into the context 44 * @todo TODO move this into the context
69 */ 45 */
70 //@{ 46 //@{
71 #define VC1_BFRACTION_VLC_BITS 7 47 #define VC1_BFRACTION_VLC_BITS 7
72 static VLC vc1_bfraction_vlc; 48 extern VLC vc1_bfraction_vlc;
73 #define VC1_IMODE_VLC_BITS 4 49 #define VC1_IMODE_VLC_BITS 4
74 static VLC vc1_imode_vlc; 50 extern VLC vc1_imode_vlc;
75 #define VC1_NORM2_VLC_BITS 3 51 #define VC1_NORM2_VLC_BITS 3
76 static VLC vc1_norm2_vlc; 52 extern VLC vc1_norm2_vlc;
77 #define VC1_NORM6_VLC_BITS 9 53 #define VC1_NORM6_VLC_BITS 9
78 static VLC vc1_norm6_vlc; 54 extern VLC vc1_norm6_vlc;
79 /* Could be optimized, one table only needs 8 bits */ 55 /* Could be optimized, one table only needs 8 bits */
80 #define VC1_TTMB_VLC_BITS 9 //12 56 #define VC1_TTMB_VLC_BITS 9 //12
81 static VLC vc1_ttmb_vlc[3]; 57 extern VLC vc1_ttmb_vlc[3];
82 #define VC1_MV_DIFF_VLC_BITS 9 //15 58 #define VC1_MV_DIFF_VLC_BITS 9 //15
83 static VLC vc1_mv_diff_vlc[4]; 59 extern VLC vc1_mv_diff_vlc[4];
84 #define VC1_CBPCY_P_VLC_BITS 9 //14 60 #define VC1_CBPCY_P_VLC_BITS 9 //14
85 static VLC vc1_cbpcy_p_vlc[4]; 61 extern VLC vc1_cbpcy_p_vlc[4];
86 #define VC1_4MV_BLOCK_PATTERN_VLC_BITS 6 62 #define VC1_4MV_BLOCK_PATTERN_VLC_BITS 6
87 static VLC vc1_4mv_block_pattern_vlc[4]; 63 extern VLC vc1_4mv_block_pattern_vlc[4];
88 #define VC1_TTBLK_VLC_BITS 5 64 #define VC1_TTBLK_VLC_BITS 5
89 static VLC vc1_ttblk_vlc[3]; 65 extern VLC vc1_ttblk_vlc[3];
90 #define VC1_SUBBLKPAT_VLC_BITS 6 66 #define VC1_SUBBLKPAT_VLC_BITS 6
91 static VLC vc1_subblkpat_vlc[3]; 67 extern VLC vc1_subblkpat_vlc[3];
92 68
93 static VLC vc1_ac_coeff_table[8]; 69 extern VLC vc1_ac_coeff_table[8];
94 //@} 70 //@}
95 71
96 72
97 #if 0 //original bfraction from vc9data.h, not conforming to standard 73 #if 0 //original bfraction from vc9data.h, not conforming to standard
98 /* Denominator used for vc1_bfraction_lut */ 74 /* Denominator used for vc1_bfraction_lut */
99 #define B_FRACTION_DEN 840 75 #define B_FRACTION_DEN 840
100 76
101 /* bfraction is fractional, we scale to the GCD 3*5*7*8 = 840 */ 77 /* bfraction is fractional, we scale to the GCD 3*5*7*8 = 840 */
102 const int16_t vc1_bfraction_lut[23] = { 78 extern 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 79 #else
112 /* Denominator used for vc1_bfraction_lut */ 80 /* Denominator used for vc1_bfraction_lut */
113 #define B_FRACTION_DEN 256 81 #define B_FRACTION_DEN 256
114 82
115 /* pre-computed scales for all bfractions and base=256 */ 83 /* pre-computed scales for all bfractions and base=256 */
116 static const int16_t vc1_bfraction_lut[23] = { 84 extern 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 85 #endif
126 86
127 static const uint8_t vc1_bfraction_bits[23] = { 87 extern const uint8_t vc1_bfraction_bits[23];
128 3, 3, 3, 3, 88 extern const uint8_t vc1_bfraction_codes[23];
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 89
146 //Same as H.264 90 //Same as H.264
147 static const AVRational vc1_pixel_aspect[16]={ 91 extern 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 92
166 /* BitPlane IMODE - such a small table... */ 93 /* BitPlane IMODE - such a small table... */
167 static const uint8_t vc1_imode_codes[7] = { 94 extern const uint8_t vc1_imode_codes[7];
168 0, 2, 1, 3, 1, 2, 3 95 extern const uint8_t vc1_imode_bits[7];
169 };
170 static const uint8_t vc1_imode_bits[7] = {
171 4, 2, 3, 2, 4, 3, 3
172 };
173 96
174 /* Normal-2 imode */ 97 /* Normal-2 imode */
175 static const uint8_t vc1_norm2_codes[4] = { 98 extern const uint8_t vc1_norm2_codes[4];
176 0, 4, 5, 3 99 extern const uint8_t vc1_norm2_bits[4];
177 }; 100 extern const uint16_t vc1_norm6_codes[64];
178 static const uint8_t vc1_norm2_bits[4] = { 101 extern const uint8_t vc1_norm6_bits[64];
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 */ 102 /* Normal-6 imode */
196 static const uint8_t vc1_norm6_spec[64][5] = { 103 extern 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 104
263 /* 4MV Block pattern VLC tables */ 105 /* 4MV Block pattern VLC tables */
264 static const uint8_t vc1_4mv_block_pattern_codes[4][16] = { 106 extern 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}, 107 extern const uint8_t vc1_4mv_block_pattern_bits[4][16];
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 108
277 const uint8_t wmv3_dc_scale_table[32]={ 109 extern 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 110
281 /* P-Picture CBPCY VLC tables */ 111 /* 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? 112 extern const uint16_t vc1_cbpcy_p_codes[4][64];
283 static const uint16_t vc1_cbpcy_p_codes[4][64] = { 113 extern const uint8_t vc1_cbpcy_p_bits[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 114
391 /* MacroBlock Transform Type: 7.1.3.11, p89 115 /* MacroBlock Transform Type: 7.1.3.11, p89
392 * 8x8:B 116 * 8x8:B
393 * 8x4:B:btm 8x4:B:top 8x4:B:both, 117 * 8x4:B:btm 8x4:B:top 8x4:B:both,
394 * 4x8:B:right 4x8:B:left 4x8:B:both 118 * 4x8:B:right 4x8:B:left 4x8:B:both
395 * 4x4:B 8x8:MB 119 * 4x4:B 8x8:MB
396 * 8x4:MB:btm 8x4:MB:top 8x4,MB,both 120 * 8x4:MB:btm 8x4:MB:top 8x4,MB,both
397 * 4x8,MB,right 4x8,MB,left 121 * 4x8,MB,right 4x8,MB,left
398 * 4x4,MB */ 122 * 4x4,MB */
399 static const uint16_t vc1_ttmb_codes[3][16] = { 123 extern 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 124
429 static const uint8_t vc1_ttmb_bits[3][16] = { 125 extern 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 126
459 /* TTBLK (Transform Type per Block) tables */ 127 /* TTBLK (Transform Type per Block) tables */
460 static const uint8_t vc1_ttblk_codes[3][8] = { 128 extern const uint8_t vc1_ttblk_codes[3][8];
461 { 0, 1, 3, 5, 16, 17, 18, 19}, 129 extern const uint8_t vc1_ttblk_bits[3][8];
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 130
471 /* SUBBLKPAT tables, p93-94, reordered */ 131 /* SUBBLKPAT tables, p93-94, reordered */
472 static const uint8_t vc1_subblkpat_codes[3][15] = { 132 extern const uint8_t vc1_subblkpat_codes[3][15];
473 { 14, 12, 7, 11, 9, 26, 2, 10, 27, 8, 0, 6, 1, 15, 1}, 133 extern const uint8_t vc1_subblkpat_bits[3][15];
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 134
483 /* MV differential tables, p265 */ 135 /* MV differential tables, p265 */
484 static const uint16_t vc1_mv_diff_codes[4][73] = { 136 extern const uint16_t vc1_mv_diff_codes[4][73];
485 { 137 extern const uint8_t vc1_mv_diff_bits[4][73];
486 0, 2, 3, 8, 576, 3, 2, 6,
487 5, 577, 578, 7, 8, 9, 40, 19,
488 37, 82, 21, 22, 23, 579, 580, 166,
489 96, 167, 49, 194, 195, 581, 582, 583,
490 292, 293, 294, 13, 2, 7, 24, 50,
491 102, 295, 13, 7, 8, 18, 50, 103,
492 38, 20, 21, 22, 39, 204, 103, 23,
493 24, 25, 104, 410, 105, 106, 107, 108,
494 109, 220, 411, 442, 222, 443, 446, 447,
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 138
566 /* DC differentials low+hi-mo, p217 are the same as in msmpeg4data .h */ 139 /* DC differentials low+hi-mo, p217 are the same as in msmpeg4data .h */
567 140
568 /* Scantables/ZZ scan are at 11.9 (p262) and 8.1.1.12 (p10) */ 141 /* Scantables/ZZ scan are at 11.9 (p262) and 8.1.1.12 (p10) */
569 static const int8_t vc1_normal_zz[64] = { 142 extern const int8_t vc1_normal_zz[64];
570 0, 8, 1, 2, 9, 16, 24, 17, 143 extern const int8_t vc1_horizontal_zz [64];
571 10, 3, 4, 11, 18, 25, 32, 40, 144 extern const int8_t vc1_vertical_zz [64];
572 33, 48, 26, 19, 12, 5, 6, 13, 145 extern const int8_t vc1_simple_progressive_8x8_zz [64];
573 20, 27, 34, 41, 56, 49, 57, 42, 146 extern const int8_t vc1_simple_progressive_8x4_zz [32];
574 35, 28, 21, 14, 7, 15, 22, 29, 147 extern const int8_t vc1_simple_progressive_4x8_zz [32];
575 36, 43, 50, 58, 51, 59, 44, 37, 148 extern const int8_t vc1_simple_progressive_4x4_zz [16];
576 30, 23, 31, 38, 45, 52, 60, 53, 149 extern const int8_t vc1_adv_progressive_8x4_zz [32];
577 61, 46, 39, 47, 54, 62, 55, 63 150 extern const int8_t vc1_adv_progressive_4x8_zz [32];
578 }; 151 extern const int8_t vc1_adv_interlaced_8x8_zz [64];
579 152 extern const int8_t vc1_adv_interlaced_8x4_zz [32];
580 static const int8_t vc1_horizontal_zz [64] = /* Table 227 */ 153 extern const int8_t vc1_adv_interlaced_4x8_zz [32];
581 { 154 extern const int8_t vc1_adv_interlaced_4x4_zz [16];
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 155
707 /* DQScale as specified in 8.1.3.9 - almost identical to 0x40000/i */ 156 /* DQScale as specified in 8.1.3.9 - almost identical to 0x40000/i */
708 static const int32_t vc1_dqscale[63] = { 157 extern const int32_t vc1_dqscale[63];
709 0x40000, 0x20000, 0x15555, 0x10000, 0xCCCD, 0xAAAB, 0x9249, 0x8000, 158
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 */ 159 #endif /* VC1DATA_H */