*
* 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. */
* This decoder handles Microsoft Windows Media Audio data version 2.
*/
-#define _XOPEN_SOURCE 600
-
#include <math.h>
#include <regex.h>
-#include <sys/select.h>
#include "para.h"
#include "error.h"
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. */
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;
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);
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) {
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);
* 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];
}
}
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;
/*
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 */
#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;
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) {
.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,
};