Mercurial > audlegacy
diff Plugins/Input/wma/libffwma/wmadec.c @ 218:0bea7509d6ba trunk
[svn] Working WMA support. I never said it would be pretty, neno, I should said it would play.
author | chainsaw |
---|---|
date | Mon, 21 Nov 2005 14:59:13 -0800 |
parents | 12004b385a96 |
children | 28b73b5595d1 |
line wrap: on
line diff
--- a/Plugins/Input/wma/libffwma/wmadec.c Sun Nov 20 20:02:32 2005 -0800 +++ b/Plugins/Input/wma/libffwma/wmadec.c Mon Nov 21 14:59:13 2005 -0800 @@ -38,7 +38,7 @@ #define NB_LSP_COEFS 10 /* XXX: is it a suitable value ? */ -#define MAX_CODED_SUPERFRAME_SIZE 16384 +#define MAX_CODED_SUPERFRAME_SIZE 4096 #define MAX_CHANNELS 2 @@ -175,8 +175,8 @@ init_vlc(vlc, 9, n, table_bits, 1, 1, table_codes, 4, 4); - run_table = av_malloc(n * sizeof(uint16_t)); - level_table = av_malloc(n * sizeof(uint16_t)); + run_table = malloc(n * sizeof(uint16_t)); + level_table = malloc(n * sizeof(uint16_t)); p = levels_table; i = 2; level = 1; @@ -449,7 +449,7 @@ int n, j; float alpha; n = 1 << (s->frame_len_bits - i); - window = av_malloc(sizeof(float) * n); + window = malloc(sizeof(float) * n); alpha = M_PI / (2.0 * n); for(j=0;j<n;j++) { window[n - j - 1] = sin((j + 0.5) * alpha); @@ -849,7 +849,7 @@ VLC *coef_vlc; int level, run, sign, tindex; int16_t *ptr, *eptr; - const uint16_t *level_table, *run_table; + const int16_t *level_table, *run_table; /* special VLC tables are used for ms stereo because there is potentially less energy there */ @@ -1155,7 +1155,7 @@ iptr = s->frame_out[ch]; for(i=0;i<n;i++) { - a = lrintf(*iptr++); + a = rintf(*iptr++); if (a > 32767) a = 32767; else if (a < -32768) @@ -1272,49 +1272,52 @@ static int wma_decode_end(AVCodecContext *avctx) { - WMADecodeContext *s = avctx->priv_data; - int i; + WMADecodeContext *s = avctx->priv_data; + int i; - for(i = 0; i < s->nb_block_sizes; i++) - ff_mdct_end(&s->mdct_ctx[i]); - for(i = 0; i < s->nb_block_sizes; i++) - av_free(s->windows[i]); + for (i = 0; i < s->nb_block_sizes; i++) + ff_mdct_end(&s->mdct_ctx[i]); + + for (i = 0; i < s->nb_block_sizes; i++) + free(s->windows[i]); - if (s->use_exp_vlc) { - free_vlc(&s->exp_vlc); - } - if (s->use_noise_coding) { - free_vlc(&s->hgain_vlc); - } - for(i = 0;i < 2; i++) { - free_vlc(&s->coef_vlc[i]); - av_free(s->run_table[i]); - av_free(s->level_table[i]); - } + if (s->use_exp_vlc) { + free_vlc(&s->exp_vlc); + } + + if (s->use_noise_coding) { + free_vlc(&s->hgain_vlc); + } - return 0; + for (i = 0; i < 2; i++) { + free_vlc(&s->coef_vlc[i]); + free(s->run_table[i]); + free(s->level_table[i]); + } + + return 0; } AVCodec wmav1_decoder = { - "wmav1", - CODEC_TYPE_AUDIO, - CODEC_ID_WMAV1, - sizeof(WMADecodeContext), - wma_decode_init, - NULL, - wma_decode_end, - wma_decode_superframe, + "wmav1", + CODEC_TYPE_AUDIO, + CODEC_ID_WMAV1, + sizeof(WMADecodeContext), + wma_decode_init, + NULL, + wma_decode_end, + wma_decode_superframe, }; AVCodec wmav2_decoder = { - "wmav2", - CODEC_TYPE_AUDIO, - CODEC_ID_WMAV2, - sizeof(WMADecodeContext), - wma_decode_init, - NULL, - wma_decode_end, - wma_decode_superframe, + "wmav2", + CODEC_TYPE_AUDIO, + CODEC_ID_WMAV2, + sizeof(WMADecodeContext), + wma_decode_init, + NULL, + wma_decode_end, + wma_decode_superframe, };