Mercurial > libavcodec.hg
comparison mpegaudiodec.c @ 3608:f713d34d5d01 libavcodec
simplify
author | michael |
---|---|
date | Wed, 23 Aug 2006 23:40:03 +0000 |
parents | 997036dffa26 |
children | 6560c84eef72 |
comparison
equal
deleted
inserted
replaced
3607:997036dffa26 | 3608:f713d34d5d01 |
---|---|
164 static void compute_antialias_integer(MPADecodeContext *s, GranuleDef *g); | 164 static void compute_antialias_integer(MPADecodeContext *s, GranuleDef *g); |
165 static void compute_antialias_float(MPADecodeContext *s, GranuleDef *g); | 165 static void compute_antialias_float(MPADecodeContext *s, GranuleDef *g); |
166 | 166 |
167 /* vlc structure for decoding layer 3 huffman tables */ | 167 /* vlc structure for decoding layer 3 huffman tables */ |
168 static VLC huff_vlc[16]; | 168 static VLC huff_vlc[16]; |
169 static uint8_t *huff_code_table[16]; | |
170 static VLC huff_quad_vlc[2]; | 169 static VLC huff_quad_vlc[2]; |
171 /* computed from band_size_long */ | 170 /* computed from band_size_long */ |
172 static uint16_t band_index_long[9][23]; | 171 static uint16_t band_index_long[9][23]; |
173 /* XXX: free when all decoders are closed */ | 172 /* XXX: free when all decoders are closed */ |
174 #define TABLE_4_3_SIZE (8191 + 16)*4 | 173 #define TABLE_4_3_SIZE (8191 + 16)*4 |
366 } | 365 } |
367 | 366 |
368 ff_mpa_synth_init(window); | 367 ff_mpa_synth_init(window); |
369 | 368 |
370 /* huffman decode tables */ | 369 /* huffman decode tables */ |
371 huff_code_table[0] = NULL; | |
372 for(i=1;i<16;i++) { | 370 for(i=1;i<16;i++) { |
373 const HuffTable *h = &mpa_huff_tables[i]; | 371 const HuffTable *h = &mpa_huff_tables[i]; |
374 int xsize, x, y; | 372 int xsize, x, y; |
375 unsigned int n; | 373 unsigned int n; |
376 uint8_t *code_table; | 374 uint8_t tmp_bits [256]; |
375 uint16_t tmp_codes[256]; | |
376 | |
377 memset(tmp_bits , 0, sizeof(tmp_bits )); | |
378 memset(tmp_codes, 0, sizeof(tmp_codes)); | |
377 | 379 |
378 xsize = h->xsize; | 380 xsize = h->xsize; |
379 n = xsize * xsize; | 381 n = xsize * xsize; |
380 /* XXX: fail test */ | 382 |
381 init_vlc(&huff_vlc[i], 8, n, | |
382 h->bits, 1, 1, h->codes, 2, 2, 1); | |
383 | |
384 code_table = av_mallocz(n); | |
385 j = 0; | 383 j = 0; |
386 for(x=0;x<xsize;x++) { | 384 for(x=0;x<xsize;x++) { |
387 for(y=0;y<xsize;y++) | 385 for(y=0;y<xsize;y++){ |
388 code_table[j++] = (x << 4) | y; | 386 tmp_bits [(x << 4) | y]= h->bits [j ]; |
389 } | 387 tmp_codes[(x << 4) | y]= h->codes[j++]; |
390 huff_code_table[i] = code_table; | 388 } |
389 } | |
390 | |
391 /* XXX: fail test */ | |
392 init_vlc(&huff_vlc[i], 8, 256, | |
393 tmp_bits, 1, 1, tmp_codes, 2, 2, 1); | |
391 } | 394 } |
392 for(i=0;i<2;i++) { | 395 for(i=0;i<2;i++) { |
393 init_vlc(&huff_quad_vlc[i], i == 0 ? 7 : 4, 16, | 396 init_vlc(&huff_quad_vlc[i], i == 0 ? 7 : 4, 16, |
394 mpa_quad_bits[i], 1, 1, mpa_quad_codes[i], 1, 1, 1); | 397 mpa_quad_bits[i], 1, 1, mpa_quad_codes[i], 1, 1, 1); |
395 } | 398 } |
1668 { | 1671 { |
1669 int s_index; | 1672 int s_index; |
1670 int linbits, code, x, y, l, v, i, j, k, pos; | 1673 int linbits, code, x, y, l, v, i, j, k, pos; |
1671 GetBitContext last_gb; | 1674 GetBitContext last_gb; |
1672 VLC *vlc; | 1675 VLC *vlc; |
1673 uint8_t *code_table; | |
1674 | 1676 |
1675 /* low frequencies (called big values) */ | 1677 /* low frequencies (called big values) */ |
1676 s_index = 0; | 1678 s_index = 0; |
1677 for(i=0;i<3;i++) { | 1679 for(i=0;i<3;i++) { |
1678 j = g->region_size[i]; | 1680 j = g->region_size[i]; |
1681 /* select vlc table */ | 1683 /* select vlc table */ |
1682 k = g->table_select[i]; | 1684 k = g->table_select[i]; |
1683 l = mpa_huff_data[k][0]; | 1685 l = mpa_huff_data[k][0]; |
1684 linbits = mpa_huff_data[k][1]; | 1686 linbits = mpa_huff_data[k][1]; |
1685 vlc = &huff_vlc[l]; | 1687 vlc = &huff_vlc[l]; |
1686 code_table = huff_code_table[l]; | |
1687 | 1688 |
1688 /* read huffcode and compute each couple */ | 1689 /* read huffcode and compute each couple */ |
1689 for(;j>0;j--) { | 1690 for(;j>0;j--) { |
1690 if (get_bits_count(&s->gb) >= end_pos) | 1691 if (get_bits_count(&s->gb) >= end_pos) |
1691 break; | 1692 break; |
1692 if (code_table) { | 1693 if (l) { |
1693 code = get_vlc2(&s->gb, vlc->table, 8, 3); | 1694 y = get_vlc2(&s->gb, vlc->table, 8, 3); |
1694 if (code < 0) | |
1695 return -1; | |
1696 y = code_table[code]; | |
1697 x = y >> 4; | 1695 x = y >> 4; |
1698 y = y & 0x0f; | 1696 y = y & 0x0f; |
1699 } else { | 1697 } else { |
1700 x = 0; | 1698 x = 0; |
1701 y = 0; | 1699 y = 0; |
2230 /* convert region offsets to region sizes and truncate | 2228 /* convert region offsets to region sizes and truncate |
2231 size to big_values */ | 2229 size to big_values */ |
2232 g->region_size[2] = (576 / 2); | 2230 g->region_size[2] = (576 / 2); |
2233 j = 0; | 2231 j = 0; |
2234 for(i=0;i<3;i++) { | 2232 for(i=0;i<3;i++) { |
2235 k = g->region_size[i]; | 2233 k = FFMIN(g->region_size[i], g->big_values); |
2236 if (k > g->big_values) | |
2237 k = g->big_values; | |
2238 g->region_size[i] = k - j; | 2234 g->region_size[i] = k - j; |
2239 j = k; | 2235 j = k; |
2240 } | 2236 } |
2241 | 2237 |
2242 /* compute band indexes */ | 2238 /* compute band indexes */ |
2250 else if (s->sample_rate_index != 8) | 2246 else if (s->sample_rate_index != 8) |
2251 g->long_end = 6; | 2247 g->long_end = 6; |
2252 else | 2248 else |
2253 g->long_end = 4; /* 8000 Hz */ | 2249 g->long_end = 4; /* 8000 Hz */ |
2254 | 2250 |
2255 if (s->sample_rate_index != 8) | 2251 g->short_start = 2 + (s->sample_rate_index != 8); |
2256 g->short_start = 3; | |
2257 else | |
2258 g->short_start = 2; | |
2259 } else { | 2252 } else { |
2260 g->long_end = 0; | 2253 g->long_end = 0; |
2261 g->short_start = 0; | 2254 g->short_start = 0; |
2262 } | 2255 } |
2263 } else { | 2256 } else { |