#define SERVER_COMMAND_LIST_ERRORS
#define AFS_COMMAND_LIST_ERRORS
#define AUDIOD_COMMAND_LIST_ERRORS
-#define BITSTREAM_ERRORS
+
extern const char **para_errlist[];
+#define BITSTREAM_ERRORS \
+ PARA_ERROR(VLC, "invalid vlc code"), \
+
+
#define WMA_AFH_ERRORS \
PARA_ERROR(NO_WMA, "asf/wma format not recognized"), \
PARA_ERROR(WMA_BAD_PARAMS, "invalid WMA parameters"), \
PARA_ERROR(WMA_OUTPUT_SPACE, "insufficient output space"), \
PARA_ERROR(WMA_BAD_SUPERFRAME, "invalid superframe"), \
- PARA_ERROR(WMA_DECODE, "wma decode error"), \
+ PARA_ERROR(WMA_BLOCK_SIZE, "invalid block size"), \
PARA_ERROR(INCOHERENT_BLOCK_LEN, "incoherent block length"), \
/* frame info */
int frame_len; ///< frame length in samples
int frame_len_bits; ///< frame_len = 1 << frame_len_bits
- int nb_block_sizes; ///< number of block sizes
+ /** Number of block sizes. */
+ int nb_block_sizes;
/* block info */
int reset_block_lengths;
int block_len_bits; ///< log2 of current block length
while (q < q_end) {
code = get_vlc(&pwd->gb, pwd->exp_vlc.table, EXPVLCBITS, EXPMAX);
if (code < 0)
- return -1;
+ return code;
/* NOTE: this offset is the same as MPEG4 AAC ! */
last_exp += code - 60;
/* XXX: use a table */
pwd->hgain_vlc.table, HGAINVLCBITS,
HGAINMAX);
if (code < 0)
- return -1;
+ return code;
val += code - 18;
}
pwd->high_band_values[ch][i] = val;
}
/**
- * @return 0 if OK. 1 if last block of frame. return -1 if
- * unrecorrable error.
+ * Returns 0 if OK, 1 if last block of frame, negative on uncorrectable
+ * errors.
*/
static int wma_decode_block(struct private_wmadec_data *pwd)
{
- int n, v, ch, code, bsize;
+ int ret, n, v, ch, code, bsize;
int coef_nb_bits, total_gain;
int nb_coefs[MAX_CHANNELS];
pwd->reset_block_lengths = 0;
v = get_bits(&pwd->gb, n);
if (v >= pwd->nb_block_sizes)
- return -1;
+ return -E_WMA_BLOCK_SIZE;
pwd->prev_block_len_bits = pwd->frame_len_bits - v;
v = get_bits(&pwd->gb, n);
if (v >= pwd->nb_block_sizes)
- return -1;
+ return -E_WMA_BLOCK_SIZE;
pwd->block_len_bits = pwd->frame_len_bits - v;
} else {
/* update block lengths */
}
v = get_bits(&pwd->gb, n);
if (v >= pwd->nb_block_sizes)
- return -1;
+ return -E_WMA_BLOCK_SIZE;
pwd->next_block_len_bits = pwd->frame_len_bits - v;
} else {
/* fixed block len */
for (ch = 0; ch < pwd->ahi.channels; ch++)
nb_coefs[ch] = n;
- if (compute_high_band_values(pwd, bsize, nb_coefs) < 0)
- return -1;
+ ret = compute_high_band_values(pwd, bsize, nb_coefs);
+ if (ret < 0)
+ return ret;
/* exponents can be reused in short blocks. */
if ((pwd->block_len_bits == pwd->frame_len_bits) || get_bit(&pwd->gb)) {
for (ch = 0; ch < pwd->ahi.channels; ch++) {
if (pwd->channel_coded[ch]) {
if (pwd->use_exp_vlc) {
- if (decode_exp_vlc(pwd, ch) < 0)
- return -1;
- } else {
+ ret = decode_exp_vlc(pwd, ch);
+ if (ret < 0)
+ return ret;
+ } else
decode_exp_lsp(pwd, ch);
- }
pwd->exponents_bsize[ch] = bsize;
}
}
code = get_vlc(&pwd->gb, coef_vlc->table,
VLCBITS, VLCMAX);
if (code < 0)
- return -1;
+ return code;
if (code == 1) /* EOB */
break;
if (code == 0) { /* escape */
for (;;) {
ret = wma_decode_block(pwd);
if (ret < 0)
- return -1;
+ return ret;
if (ret)
break;
}
* This frame is stored in the last superframe and in
* the current one.
*/
- ret = -E_WMA_DECODE;
- if (wma_decode_frame(pwd, samples) < 0)
+ ret = wma_decode_frame(pwd, samples);
+ if (ret < 0)
goto fail;
frame_count++;
samples += pwd->ahi.channels * pwd->frame_len;
pwd->reset_block_lengths = 1;
for (i = 0; i < nb_frames; i++) {
- ret = -E_WMA_DECODE;
- if (wma_decode_frame(pwd, samples) < 0)
+ ret = wma_decode_frame(pwd, samples);
+ if (ret < 0)
goto fail;
frame_count++;
samples += pwd->ahi.channels * pwd->frame_len;
if (pwd->ahi.channels * pwd->frame_len * sizeof(int16_t) > *data_size)
goto fail;
/* single frame decode */
- ret = -E_WMA_DECODE;
- if (wma_decode_frame(pwd, samples) < 0)
+ ret = wma_decode_frame(pwd, samples);
+ if (ret < 0)
goto fail;
frame_count++;
samples += pwd->ahi.channels * pwd->frame_len;