X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;ds=sidebyside;f=wmadec_filter.c;h=a76f77df0dbe18b018a3cdb64d1703bb1673b975;hb=9943be4e9a56cedf1d0ec6317ca09da3ccc3949e;hp=6ddedac23c79deb11cad10e48df0895bcf3f1532;hpb=30fdc1bcb5fd37398943cb6b072a9ca4633f2592;p=paraslash.git diff --git a/wmadec_filter.c b/wmadec_filter.c index 6ddedac2..a76f77df 100644 --- a/wmadec_filter.c +++ b/wmadec_filter.c @@ -159,23 +159,6 @@ static void sine_window_init(float *window, int n) window[i] = sinf((i + 0.5) * (M_PI / (2.0 * n))); } -static void wmadec_cleanup(struct private_wmadec_data *pwd) -{ - int i; - - for (i = 0; i < pwd->nb_block_sizes; i++) - imdct_end(pwd->mdct_ctx[i]); - if (pwd->ahi.use_exp_vlc) - free_vlc(&pwd->exp_vlc); - if (pwd->use_noise_coding) - free_vlc(&pwd->hgain_vlc); - for (i = 0; i < 2; i++) { - free_vlc(&pwd->coef_vlc[i]); - free(pwd->run_table[i]); - free(pwd->level_table[i]); - } -} - static void init_coef_vlc(struct vlc *vlc, uint16_t **prun_table, uint16_t **plevel_table, const struct coef_vlc_table *vlc_table) { @@ -1063,16 +1046,7 @@ static int wma_decode_superframe(struct private_wmadec_data *pwd, void *data, int ret; int16_t *samples; - if (buf_size == 0) { - pwd->last_superframe_len = 0; - *data_size = 0; - return 0; - } - if (buf_size < pwd->ahi.block_align) { - *data_size = 0; - return 0; - } - buf_size = pwd->ahi.block_align; + buf_size = pwd->ahi.packet_size - WMA_FRAME_SKIP; samples = data; init_get_bits(&pwd->gb, buf, buf_size); if (pwd->ahi.use_bit_reservoir) { @@ -1173,10 +1147,21 @@ fail: static void wmadec_close(struct filter_node *fn) { struct private_wmadec_data *pwd = fn->private_data; + int i; if (!pwd) return; - wmadec_cleanup(pwd); + for (i = 0; i < pwd->nb_block_sizes; i++) + imdct_end(pwd->mdct_ctx[i]); + if (pwd->ahi.use_exp_vlc) + free_vlc(&pwd->exp_vlc); + if (pwd->use_noise_coding) + free_vlc(&pwd->hgain_vlc); + for (i = 0; i < 2; i++) { + free_vlc(&pwd->coef_vlc[i]); + free(pwd->run_table[i]); + free(pwd->level_table[i]); + } free(fn->private_data); fn->private_data = NULL; }