Mercurial > libavcodec.hg
comparison dca.c @ 9526:b9216a975c7f libavcodec
Make VLC tables in DCA decoder use INIT_VLC_USE_NEW_STATIC
author | kostya |
---|---|
date | Tue, 21 Apr 2009 17:37:03 +0000 |
parents | 0dce4fe6e6f3 |
children | 67a20f0eb42c |
comparison
equal
deleted
inserted
replaced
9525:ad29ff444476 | 9526:b9216a975c7f |
---|---|
250 int debug_flag; ///< used for suppressing repeated error messages output | 250 int debug_flag; ///< used for suppressing repeated error messages output |
251 DSPContext dsp; | 251 DSPContext dsp; |
252 MDCTContext imdct; | 252 MDCTContext imdct; |
253 } DCAContext; | 253 } DCAContext; |
254 | 254 |
255 static const uint16_t dca_vlc_offs[] = { | |
256 0, 512, 640, 768, 1282, 1794, 2436, 3080, 3770, 4454, 5364, | |
257 5372, 5380, 5388, 5392, 5396, 5412, 5420, 5428, 5460, 5492, 5508, | |
258 5572, 5604, 5668, 5796, 5860, 5892, 6412, 6668, 6796, 7308, 7564, | |
259 7820, 8076, 8620, 9132, 9388, 9910, 10166, 10680, 11196, 11726, 12240, | |
260 12752, 13298, 13810, 14326, 14840, 15500, 16022, 16540, 17158, 17678, 18264, | |
261 18796, 19352, 19926, 20468, 21472, 22398, 23014, 23622, | |
262 }; | |
263 | |
255 static av_cold void dca_init_vlcs(void) | 264 static av_cold void dca_init_vlcs(void) |
256 { | 265 { |
257 static int vlcs_initialized = 0; | 266 static int vlcs_initialized = 0; |
258 int i, j; | 267 int i, j, c = 14; |
268 static VLC_TYPE dca_table[23622][2]; | |
259 | 269 |
260 if (vlcs_initialized) | 270 if (vlcs_initialized) |
261 return; | 271 return; |
262 | 272 |
263 dca_bitalloc_index.offset = 1; | 273 dca_bitalloc_index.offset = 1; |
264 dca_bitalloc_index.wrap = 2; | 274 dca_bitalloc_index.wrap = 2; |
265 for (i = 0; i < 5; i++) | 275 for (i = 0; i < 5; i++) { |
276 dca_bitalloc_index.vlc[i].table = &dca_table[dca_vlc_offs[i]]; | |
277 dca_bitalloc_index.vlc[i].table_allocated = dca_vlc_offs[i + 1] - dca_vlc_offs[i]; | |
266 init_vlc(&dca_bitalloc_index.vlc[i], bitalloc_12_vlc_bits[i], 12, | 278 init_vlc(&dca_bitalloc_index.vlc[i], bitalloc_12_vlc_bits[i], 12, |
267 bitalloc_12_bits[i], 1, 1, | 279 bitalloc_12_bits[i], 1, 1, |
268 bitalloc_12_codes[i], 2, 2, INIT_VLC_USE_STATIC); | 280 bitalloc_12_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC); |
281 } | |
269 dca_scalefactor.offset = -64; | 282 dca_scalefactor.offset = -64; |
270 dca_scalefactor.wrap = 2; | 283 dca_scalefactor.wrap = 2; |
271 for (i = 0; i < 5; i++) | 284 for (i = 0; i < 5; i++) { |
285 dca_scalefactor.vlc[i].table = &dca_table[dca_vlc_offs[i + 5]]; | |
286 dca_scalefactor.vlc[i].table_allocated = dca_vlc_offs[i + 6] - dca_vlc_offs[i + 5]; | |
272 init_vlc(&dca_scalefactor.vlc[i], SCALES_VLC_BITS, 129, | 287 init_vlc(&dca_scalefactor.vlc[i], SCALES_VLC_BITS, 129, |
273 scales_bits[i], 1, 1, | 288 scales_bits[i], 1, 1, |
274 scales_codes[i], 2, 2, INIT_VLC_USE_STATIC); | 289 scales_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC); |
290 } | |
275 dca_tmode.offset = 0; | 291 dca_tmode.offset = 0; |
276 dca_tmode.wrap = 1; | 292 dca_tmode.wrap = 1; |
277 for (i = 0; i < 4; i++) | 293 for (i = 0; i < 4; i++) { |
294 dca_tmode.vlc[i].table = &dca_table[dca_vlc_offs[i + 10]]; | |
295 dca_tmode.vlc[i].table_allocated = dca_vlc_offs[i + 11] - dca_vlc_offs[i + 10]; | |
278 init_vlc(&dca_tmode.vlc[i], tmode_vlc_bits[i], 4, | 296 init_vlc(&dca_tmode.vlc[i], tmode_vlc_bits[i], 4, |
279 tmode_bits[i], 1, 1, | 297 tmode_bits[i], 1, 1, |
280 tmode_codes[i], 2, 2, INIT_VLC_USE_STATIC); | 298 tmode_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC); |
299 } | |
281 | 300 |
282 for(i = 0; i < 10; i++) | 301 for(i = 0; i < 10; i++) |
283 for(j = 0; j < 7; j++){ | 302 for(j = 0; j < 7; j++){ |
284 if(!bitalloc_codes[i][j]) break; | 303 if(!bitalloc_codes[i][j]) break; |
285 dca_smpl_bitalloc[i+1].offset = bitalloc_offsets[i]; | 304 dca_smpl_bitalloc[i+1].offset = bitalloc_offsets[i]; |
286 dca_smpl_bitalloc[i+1].wrap = 1 + (j > 4); | 305 dca_smpl_bitalloc[i+1].wrap = 1 + (j > 4); |
306 dca_smpl_bitalloc[i+1].vlc[j].table = &dca_table[dca_vlc_offs[c]]; | |
307 dca_smpl_bitalloc[i+1].vlc[j].table_allocated = dca_vlc_offs[c + 1] - dca_vlc_offs[c]; | |
287 init_vlc(&dca_smpl_bitalloc[i+1].vlc[j], bitalloc_maxbits[i][j], | 308 init_vlc(&dca_smpl_bitalloc[i+1].vlc[j], bitalloc_maxbits[i][j], |
288 bitalloc_sizes[i], | 309 bitalloc_sizes[i], |
289 bitalloc_bits[i][j], 1, 1, | 310 bitalloc_bits[i][j], 1, 1, |
290 bitalloc_codes[i][j], 2, 2, INIT_VLC_USE_STATIC); | 311 bitalloc_codes[i][j], 2, 2, INIT_VLC_USE_NEW_STATIC); |
312 c++; | |
291 } | 313 } |
292 vlcs_initialized = 1; | 314 vlcs_initialized = 1; |
293 } | 315 } |
294 | 316 |
295 static inline void get_array(GetBitContext *gb, int *dst, int len, int bits) | 317 static inline void get_array(GetBitContext *gb, int *dst, int len, int bits) |