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)