Mercurial > audlegacy
comparison Plugins/Input/wma/libffwma/wmadec.c @ 1398:1ddaf20ab50e trunk
[svn] AltiVec support for WMA, by Luca "lu_zero" Barbato from Gentoo.
author | chainsaw |
---|---|
date | Thu, 13 Jul 2006 16:01:57 -0700 |
parents | 62a33367a6cb |
children | f12d7e208b43 |
comparison
equal
deleted
inserted
replaced
1397:86242883ddc7 | 1398:1ddaf20ab50e |
---|---|
176 const uint16_t *p; | 176 const uint16_t *p; |
177 int i, l, j, level; | 177 int i, l, j, level; |
178 | 178 |
179 init_vlc(vlc, 9, n, table_bits, 1, 1, table_codes, 4, 4); | 179 init_vlc(vlc, 9, n, table_bits, 1, 1, table_codes, 4, 4); |
180 | 180 |
181 run_table = malloc(n * sizeof(uint16_t)); | 181 run_table = av_malloc(n * sizeof(uint16_t)); |
182 level_table = malloc(n * sizeof(uint16_t)); | 182 level_table = av_malloc(n * sizeof(uint16_t)); |
183 p = levels_table; | 183 p = levels_table; |
184 i = 2; | 184 i = 2; |
185 level = 1; | 185 level = 1; |
186 while (i < n) { | 186 while (i < n) { |
187 l = *p++; | 187 l = *p++; |
451 /* init MDCT windows : simple sinus window */ | 451 /* init MDCT windows : simple sinus window */ |
452 for(i = 0; i < s->nb_block_sizes; i++) { | 452 for(i = 0; i < s->nb_block_sizes; i++) { |
453 int n, j; | 453 int n, j; |
454 float alpha; | 454 float alpha; |
455 n = 1 << (s->frame_len_bits - i); | 455 n = 1 << (s->frame_len_bits - i); |
456 window = malloc(sizeof(float) * n); | 456 window = av_malloc(sizeof(float) * n); |
457 alpha = M_PI / (2.0 * n); | 457 alpha = M_PI / (2.0 * n); |
458 for(j=0;j<n;j++) { | 458 for(j=0;j<n;j++) { |
459 window[n - j - 1] = sin((j + 0.5) * alpha); | 459 window[n - j - 1] = sin((j + 0.5) * alpha); |
460 } | 460 } |
461 s->windows[i] = window; | 461 s->windows[i] = window; |
696 static int wma_decode_block(WMADecodeContext *s) | 696 static int wma_decode_block(WMADecodeContext *s) |
697 { | 697 { |
698 int n, v, a, ch, code, bsize; | 698 int n, v, a, ch, code, bsize; |
699 int coef_nb_bits, total_gain, parse_exponents; | 699 int coef_nb_bits, total_gain, parse_exponents; |
700 float window[BLOCK_MAX_SIZE * 2]; | 700 float window[BLOCK_MAX_SIZE * 2]; |
701 // XXX: FIXME!! there's a bug somewhere which makes this mandatory under altivec | 701 |
702 #ifdef BLAH_NO_ALTIVEC | 702 #ifdef HAVE_ALTIVEC |
703 volatile int nb_coefs[MAX_CHANNELS] __attribute__((aligned(16))); | 703 volatile int nb_coefs[MAX_CHANNELS] __attribute__((aligned(16))); |
704 #else | 704 #else |
705 int nb_coefs[MAX_CHANNELS]; | 705 int nb_coefs[MAX_CHANNELS]; |
706 #endif | 706 #endif |
707 float mdct_norm; | 707 float mdct_norm; |