X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=wmadec_filter.c;h=8061f9aeedb32d6cd0b0cf2083eefd991ed8a1d8;hp=7b4b1a28183d0b242eae01c7dafc8b799eb4dc17;hb=HEAD;hpb=b6fb7ef023664c3276c8113f4a3622e9f09a1430 diff --git a/wmadec_filter.c b/wmadec_filter.c index 7b4b1a28..f2ca273c 100644 --- a/wmadec_filter.c +++ b/wmadec_filter.c @@ -5,8 +5,7 @@ * * Copyright (c) 2002 The FFmpeg Project * - * Licensed under the GNU Lesser General Public License. - * For licencing details see COPYING.LIB. + * Licensed under the GNU Lesser General Public License, see file COPYING.LIB. */ /** \file wmadec_filter.c paraslash's WMA decoder. */ @@ -15,11 +14,8 @@ * This decoder handles Microsoft Windows Media Audio data version 2. */ -#define _XOPEN_SOURCE 600 - #include #include -#include #include "para.h" #include "error.h" @@ -99,8 +95,6 @@ struct private_wmadec_data { int block_len; /** Current position in frame. */ int block_pos; - /** True if mid/side stereo mode. */ - uint8_t ms_stereo; /** True if channel is coded. */ uint8_t channel_coded[MAX_CHANNELS]; /** log2 ratio frame/exp. length. */ @@ -165,8 +159,8 @@ static void init_coef_vlc(struct private_wmadec_data *pwd, int sidx, int didx) int i, l, j, k, level, n = src->n; init_vlc(dst, VLCBITS, n, src->huffbits, src->huffcodes, 4); - pwd->run_table[didx] = para_malloc(n * sizeof(uint16_t)); - pwd->level_table[didx] = para_malloc(n * sizeof(uint16_t)); + pwd->run_table[didx] = arr_alloc(n, sizeof(uint16_t)); + pwd->level_table[didx] = arr_alloc(n, sizeof(uint16_t)); i = 2; level = 1; k = 0; @@ -433,7 +427,7 @@ static int wma_decode_init(char *initial_buf, int len, struct private_wmadec_dat int ret, i; PARA_NOTICE_LOG("initial buf: %d bytes\n", len); - pwd = para_calloc(sizeof(*pwd)); + pwd = zalloc(sizeof(*pwd)); ret = read_asf_header(initial_buf, len, &pwd->ahi); if (ret <= 0) { free(pwd); @@ -798,6 +792,7 @@ static int wma_decode_block(struct private_wmadec_data *pwd) int ret, n, v, ch, code, bsize; int coef_nb_bits, total_gain; int nb_coefs[MAX_CHANNELS]; + bool ms_stereo = false; /* mid/side stereo mode */ /* compute current block length */ if (pwd->ahi.use_variable_block_len) { @@ -835,7 +830,7 @@ static int wma_decode_block(struct private_wmadec_data *pwd) return -E_INCOHERENT_BLOCK_LEN; if (pwd->ahi.channels == 2) - pwd->ms_stereo = get_bit(&pwd->gb); + ms_stereo = get_bit(&pwd->gb); v = 0; for (ch = 0; ch < pwd->ahi.channels; ch++) { int a = get_bit(&pwd->gb); @@ -901,7 +896,7 @@ static int wma_decode_block(struct private_wmadec_data *pwd) * special VLC tables are used for ms stereo because there is * potentially less energy there */ - tindex = (ch == 1 && pwd->ms_stereo); + tindex = ch == 1 && ms_stereo; coef_vlc = &pwd->coef_vlc[tindex]; run_table = pwd->run_table[tindex]; level_table = pwd->level_table[tindex]; @@ -936,7 +931,7 @@ static int wma_decode_block(struct private_wmadec_data *pwd) } } compute_mdct_coefficients(pwd, bsize, total_gain, nb_coefs); - if (pwd->ms_stereo && pwd->channel_coded[1]) { + if (ms_stereo && pwd->channel_coded[1]) { float a, b; int i; /* @@ -964,7 +959,7 @@ next: n4 = pwd->block_len / 2; if (pwd->channel_coded[ch]) imdct(pwd->mdct_ctx[bsize], pwd->output, pwd->coefs[ch]); - else if (!(pwd->ms_stereo && ch == 1)) + else if (!(ms_stereo && ch == 1)) memset(pwd->output, 0, sizeof(pwd->output)); /* multiply by the window and add in the frame */ @@ -1163,7 +1158,7 @@ static int wmadec_execute(struct btr_node *btrn, const char *cmd, char **result) #define WMA_OUTPUT_BUFFER_SIZE (128 * 1024) -static int wmadec_post_select(__a_unused struct sched *s, void *context) +static int wmadec_post_monitor(__a_unused struct sched *s, void *context) { struct filter_node *fn = context; int ret, converted, out_size; @@ -1181,7 +1176,7 @@ next_buffer: return 0; btr_merge(btrn, fn->min_iqs); len = btr_next_buffer(btrn, &in); - ret = -E_WMADEC_EOF; + ret = -E_EOF; if (len < fn->min_iqs) goto err; if (!pwd) { @@ -1201,7 +1196,7 @@ next_buffer: if (fn->min_iqs > len) goto success; out_size = WMA_OUTPUT_BUFFER_SIZE; - out = para_malloc(out_size); + out = alloc(out_size); ret = wma_decode_superframe(pwd, out, &out_size, (uint8_t *)in + WMA_FRAME_SKIP); if (ret < 0) { @@ -1233,6 +1228,6 @@ const struct filter lsg_filter_cmd_com_wmadec_user_data = { .open = wmadec_open, .close = wmadec_close, .execute = wmadec_execute, - .pre_select = generic_filter_pre_select, - .post_select = wmadec_post_select, + .pre_monitor = generic_filter_pre_monitor, + .post_monitor = wmadec_post_monitor, };