comparison vc9data.h @ 2475:db05cb59c6fc libavcodec

- add another way to decode norm6 VLC; modify VLC_NORM6_METH0D define in vc9data.h to select the behaviour - modified decode_b_picture_primary_header so that decode_bi_picture_header is no more required Fixes: - modifications for some more using of MpegEncContext - fixed a bit frame type decoding - switch from pointers to index for AC tables - corrected P CBPCY decoding (p_cbpcy += 4) patch by anonymous
author michael
date Sun, 30 Jan 2005 21:54:20 +0000
parents 81a9f883a17a
children 38dbec9a148d
comparison
equal deleted inserted replaced
2474:81a9f883a17a 2475:db05cb59c6fc
3 * VC9 tables. 3 * VC9 tables.
4 */ 4 */
5 5
6 #ifndef VC9DATA_H 6 #ifndef VC9DATA_H
7 #define VC9DATA_H 7 #define VC9DATA_H
8
9 /* Set a method for reading VLC in NORM6 bitplane decoding */
10 #define VLC_NORM6_METH0D 2
8 11
9 /* bfraction is fractional, we scale to the GCD 3*5*7*8 = 840 */ 12 /* bfraction is fractional, we scale to the GCD 3*5*7*8 = 840 */
10 const int16_t vc9_bfraction_lut[23] = { 13 const int16_t vc9_bfraction_lut[23] = {
11 420 /*1/2*/, 280 /*1/3*/, 560 /*2/3*/, 210 /*1/4*/, 14 420 /*1/2*/, 280 /*1/3*/, 560 /*2/3*/, 210 /*1/4*/,
12 630 /*3/4*/, 168 /*1/5*/, 336 /*2/5*/, 15 630 /*3/4*/, 168 /*1/5*/, 336 /*2/5*/,
69 }; 72 };
70 static const uint8_t vc9_norm2_bits[4] = { 73 static const uint8_t vc9_norm2_bits[4] = {
71 1, 3, 3, 2 74 1, 3, 3, 2
72 }; 75 };
73 76
77 #if VLC_NORM6_METH0D == 1
74 static const uint16_t vc9_norm6_codes[64] = { 78 static const uint16_t vc9_norm6_codes[64] = {
75 0x001, 0x002, 0x003, 0x000, 0x004, 0x001, 0x002, 0x047, 0x005, 0x003, 0x004, 0x04B, 0x005, 0x04D, 0x04E, 0x30E, 79 0x001, 0x002, 0x003, 0x000, 0x004, 0x001, 0x002, 0x047, 0x005, 0x003, 0x004, 0x04B, 0x005, 0x04D, 0x04E, 0x30E,
76 0x006, 0x006, 0x007, 0x053, 0x008, 0x055, 0x056, 0x30D, 0x009, 0x059, 0x05A, 0x30C, 0x05C, 0x30B, 0x30A, 0x037, 80 0x006, 0x006, 0x007, 0x053, 0x008, 0x055, 0x056, 0x30D, 0x009, 0x059, 0x05A, 0x30C, 0x05C, 0x30B, 0x30A, 0x037,
77 0x007, 0x00A, 0x00B, 0x043, 0x00C, 0x045, 0x046, 0x309, 0x00D, 0x049, 0x04A, 0x308, 0x04C, 0x307, 0x306, 0x036, 81 0x007, 0x00A, 0x00B, 0x043, 0x00C, 0x045, 0x046, 0x309, 0x00D, 0x049, 0x04A, 0x308, 0x04C, 0x307, 0x306, 0x036,
78 0x00E, 0x051, 0x052, 0x305, 0x054, 0x304, 0x303, 0x035, 0x058, 0x302, 0x301, 0x034, 0x300, 0x033, 0x032, 0x007, 82 0x00E, 0x051, 0x052, 0x305, 0x054, 0x304, 0x303, 0x035, 0x058, 0x302, 0x301, 0x034, 0x300, 0x033, 0x032, 0x007,
82 1, 4, 4, 8, 4, 8, 8, 10, 4, 8, 8, 10, 8, 10, 10, 13, 86 1, 4, 4, 8, 4, 8, 8, 10, 4, 8, 8, 10, 8, 10, 10, 13,
83 4, 8, 8, 10, 8, 10, 10, 13, 8, 10, 10, 13, 10, 13, 13, 9, 87 4, 8, 8, 10, 8, 10, 10, 13, 8, 10, 10, 13, 10, 13, 13, 9,
84 4, 8, 8, 10, 8, 10, 10, 13, 8, 10, 10, 13, 10, 13, 13, 9, 88 4, 8, 8, 10, 8, 10, 10, 13, 8, 10, 10, 13, 10, 13, 13, 9,
85 8, 10, 10, 13, 10, 13, 13, 9, 10, 13, 13, 9, 13, 9, 9, 6, 89 8, 10, 10, 13, 10, 13, 13, 9, 10, 13, 13, 9, 13, 9, 9, 6,
86 }; 90 };
87 #if 0
88 /* Normal-6 imode */ 91 /* Normal-6 imode */
89 static const uint8_t vc9_norm6_spec[64][5] = { 92 static const uint8_t vc9_norm6_spec[64][5] = {
90 { 0, 1, 1 }, 93 { 0, 1, 1 },
91 { 1, 2, 4 }, 94 { 1, 2, 4 },
92 { 2, 3, 4 }, 95 { 2, 3, 4 },
151 {61, 3, 5, 3, 4 }, 154 {61, 3, 5, 3, 4 },
152 {62, 3, 5, 2, 4 }, 155 {62, 3, 5, 2, 4 },
153 {63, 3, 5, 1, 1 }, 156 {63, 3, 5, 1, 1 },
154 }; 157 };
155 #endif 158 #endif
159
160 #if TILE_VLC_METHOD == 2 //Hyper-stupid way to handle sparse tables
161 static const uint8_t vc9_norm6_first[2][64] = {
162 { 1, 1}, { 2, 4}, { 3, 4}, { 0, 8},
163 { 4, 4}, { 5, 1}, { 2, 8}, { 2, 5},
164 { 5, 4}, { 3, 8}, { 4, 8}, { 2, 5},
165 { 5, 8}, { 2, 5}, { 2, 5}, { 3, 5},
166 { 6, 4}, { 6, 8}, { 7, 8}, { 2, 5},
167 { 8, 8}, { 2, 5}, { 2, 5}, { 3, 5},
168 { 9, 8}, { 2, 5}, { 2, 5}, { 3, 5},
169 { 2, 5}, { 3, 5}, { 3, 5}, { 3, 5},
170 { 7, 4}, { 10, 8}, { 11, 8}, { 2, 5},
171 { 12, 8}, { 2, 5}, { 2, 5}, { 3, 5},
172 { 13, 8}, { 2, 5}, { 2, 5}, { 3, 5},
173 { 2, 5}, { 3, 5}, { 3, 5}, { 3, 5},
174 { 14, 8}, { 2, 5}, { 2, 5}, { 3, 5},
175 { 2, 5}, { 3, 5}, { 3, 5}, { 3, 5},
176 { 2, 5}, { 3, 5}, { 3, 5}, { 3, 5},
177 { 3, 5}, { 3, 5}, { 3, 5}, { 3, 5}
178 };
179
180 /* 0=>simple VLC, 1=>VLCFLC, 2=>double VLC */
181 static const int vc9_norm6_mode[64] = {
182 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 2,
183 0, 0, 0, 1, 0, 1, 1, 2, 0, 1, 1, 2, 1, 2, 2, 2,
184 0, 0, 0, 1, 0, 1, 1, 2, 0, 1, 1, 2, 1, 2, 2, 2,
185 0, 1, 1, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2
186 };
187 static const uint8_t vc9_norm6_second[22] = {
188 { 14, 8}, { 13, 8}, { 12, 8}, { 11, 8},
189 { 10, 8}, { 7, 4}, { 9, 8}, { 8, 8},
190 { 7, 8}, { 6, 8}, { 6, 4}, { 5, 8},
191 { 4, 8}, { 3, 8}, { 5, 4}, { 2, 8},
192 { 1, 8}, { 4, 4}, { 0, 8}, { 3, 4},
193 { 2, 4}, { 1, 1}
194 };
195 static const uint8_t vc9_norm6_flc_val[20] = {
196 7, 11, 13, 14, 19, 21, 22, 25,
197 26, 28, 35, 37, 38, 41, 42, 44,
198 49, 50, 52, 56
199 };
200 static const uint8_t vc9_norm6_second_val[22] = {
201 15, 23, 27, 29, 30, 31, 39, 43,
202 45, 46, 47, 51, 53, 54, 55, 57,
203 58, 59, 60, 61, 62, 63
204 };
205 #endif
206
156 /* 4MV Block pattern VLC tables */ 207 /* 4MV Block pattern VLC tables */
157 static const uint8_t vc9_4mv_block_pattern_codes[4][16] = { 208 static const uint8_t vc9_4mv_block_pattern_codes[4][16] = {
158 { 14, 58, 59, 25, 12, 26, 15, 15, 13, 24, 27, 0, 28, 1, 2, 2}, 209 { 14, 58, 59, 25, 12, 26, 15, 15, 13, 24, 27, 0, 28, 1, 2, 2},
159 { 8, 18, 19, 4, 20, 5, 30, 11, 21, 31, 6, 12, 7, 13, 14, 0}, 210 { 8, 18, 19, 4, 20, 5, 30, 11, 21, 31, 6, 12, 7, 13, 14, 0},
160 { 15, 6, 7, 2, 8, 3, 28, 9, 10, 29, 4, 11, 5, 12, 13, 0}, 211 { 15, 6, 7, 2, 8, 3, 28, 9, 10, 29, 4, 11, 5, 12, 13, 0},