| 266 | }; |
| 267 | |
| 268 | static av_cold void dca_init_vlcs(void) |
| 269 | { |
| 270 | static int vlcs_initialized = 0; |
| 271 | int i, j, c = 14; |
| 272 | static VLC_TYPE dca_table[23622][2]; |
| 273 | |
| 274 | if (vlcs_initialized) |
| 275 | return; |
| 276 | |
| 277 | dca_bitalloc_index.offset = 1; |
| 278 | dca_bitalloc_index.wrap = 2; |
| 279 | for (i = 0; i < 5; i++) { |
| 280 | dca_bitalloc_index.vlc[i].table = &dca_table[dca_vlc_offs[i]]; |
| 281 | dca_bitalloc_index.vlc[i].table_allocated = dca_vlc_offs[i + 1] - dca_vlc_offs[i]; |
| 282 | init_vlc(&dca_bitalloc_index.vlc[i], bitalloc_12_vlc_bits[i], 12, |
| 283 | bitalloc_12_bits[i], 1, 1, |
| 284 | bitalloc_12_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC); |
| 285 | } |
| 286 | dca_scalefactor.offset = -64; |
| 287 | dca_scalefactor.wrap = 2; |
| 288 | for (i = 0; i < 5; i++) { |
| 289 | dca_scalefactor.vlc[i].table = &dca_table[dca_vlc_offs[i + 5]]; |
| 290 | dca_scalefactor.vlc[i].table_allocated = dca_vlc_offs[i + 6] - dca_vlc_offs[i + 5]; |
| 291 | init_vlc(&dca_scalefactor.vlc[i], SCALES_VLC_BITS, 129, |
| 292 | scales_bits[i], 1, 1, |
| 293 | scales_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC); |
| 294 | } |
| 295 | dca_tmode.offset = 0; |
| 296 | dca_tmode.wrap = 1; |
| 297 | for (i = 0; i < 4; i++) { |
| 298 | dca_tmode.vlc[i].table = &dca_table[dca_vlc_offs[i + 10]]; |
| 299 | dca_tmode.vlc[i].table_allocated = dca_vlc_offs[i + 11] - dca_vlc_offs[i + 10]; |
| 300 | init_vlc(&dca_tmode.vlc[i], tmode_vlc_bits[i], 4, |
| 301 | tmode_bits[i], 1, 1, |
| 302 | tmode_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC); |
| 303 | } |
| 304 | |
| 305 | for(i = 0; i < 10; i++) |
| 306 | for(j = 0; j < 7; j++){ |
| 307 | if(!bitalloc_codes[i][j]) break; |
| 308 | dca_smpl_bitalloc[i+1].offset = bitalloc_offsets[i]; |
| 309 | dca_smpl_bitalloc[i+1].wrap = 1 + (j > 4); |
| 310 | dca_smpl_bitalloc[i+1].vlc[j].table = &dca_table[dca_vlc_offs[c]]; |
| 311 | dca_smpl_bitalloc[i+1].vlc[j].table_allocated = dca_vlc_offs[c + 1] - dca_vlc_offs[c]; |
| 312 | init_vlc(&dca_smpl_bitalloc[i+1].vlc[j], bitalloc_maxbits[i][j], |
| 313 | bitalloc_sizes[i], |
| 314 | bitalloc_bits[i][j], 1, 1, |
| 315 | bitalloc_codes[i][j], 2, 2, INIT_VLC_USE_NEW_STATIC); |
| 316 | c++; |
| 317 | } |
| 318 | vlcs_initialized = 1; |
| 319 | } |
| 320 | |
| 321 | static inline void get_array(GetBitContext *gb, int *dst, int len, int bits) |
| 322 | { |