Mercurial > libavcodec.hg
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}, |