|
|
|
@@ -671,7 +671,7 @@ static int read_var_block_data(ALSDecContext *ctx, ALSBlockData *bd) |
|
|
|
if (*bd->opt_order > sconf->max_order) { |
|
|
|
*bd->opt_order = sconf->max_order; |
|
|
|
av_log(avctx, AV_LOG_ERROR, "Predictor order too large!\n"); |
|
|
|
return -1; |
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
} |
|
|
|
} else { |
|
|
|
*bd->opt_order = sconf->max_order; |
|
|
|
@@ -706,7 +706,7 @@ static int read_var_block_data(ALSDecContext *ctx, ALSBlockData *bd) |
|
|
|
int offset = parcor_rice_table[sconf->coef_table][k][0]; |
|
|
|
quant_cof[k] = decode_rice(gb, rice_param) + offset; |
|
|
|
if (quant_cof[k] < -64 || quant_cof[k] > 63) { |
|
|
|
av_log(avctx, AV_LOG_ERROR, "Quantization coefficient %d is out of range!\n", quant_cof[k]); |
|
|
|
av_log(avctx, AV_LOG_ERROR, "quant_cof %d is out of range\n", quant_cof[k]); |
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
} |
|
|
|
} |
|
|
|
@@ -770,7 +770,6 @@ static int read_var_block_data(ALSDecContext *ctx, ALSBlockData *bd) |
|
|
|
int delta[8]; |
|
|
|
unsigned int k [8]; |
|
|
|
unsigned int b = av_clip((av_ceil_log2(bd->block_length) - 3) >> 1, 0, 5); |
|
|
|
unsigned int i = start; |
|
|
|
|
|
|
|
// read most significant bits |
|
|
|
unsigned int high; |
|
|
|
@@ -781,29 +780,30 @@ static int read_var_block_data(ALSDecContext *ctx, ALSBlockData *bd) |
|
|
|
|
|
|
|
current_res = bd->raw_samples + start; |
|
|
|
|
|
|
|
for (sb = 0; sb < sub_blocks; sb++, i = 0) { |
|
|
|
for (sb = 0; sb < sub_blocks; sb++) { |
|
|
|
unsigned int sb_len = sb_length - (sb ? 0 : start); |
|
|
|
|
|
|
|
k [sb] = s[sb] > b ? s[sb] - b : 0; |
|
|
|
delta[sb] = 5 - s[sb] + k[sb]; |
|
|
|
|
|
|
|
ff_bgmc_decode(gb, sb_length - i, current_res, |
|
|
|
ff_bgmc_decode(gb, sb_len, current_res, |
|
|
|
delta[sb], sx[sb], &high, &low, &value, ctx->bgmc_lut, ctx->bgmc_lut_status); |
|
|
|
|
|
|
|
current_res += sb_length - i; |
|
|
|
current_res += sb_len; |
|
|
|
} |
|
|
|
|
|
|
|
ff_bgmc_decode_end(gb); |
|
|
|
|
|
|
|
|
|
|
|
// read least significant bits and tails |
|
|
|
i = start; |
|
|
|
current_res = bd->raw_samples + start; |
|
|
|
|
|
|
|
for (sb = 0; sb < sub_blocks; sb++, i = 0) { |
|
|
|
for (sb = 0; sb < sub_blocks; sb++, start = 0) { |
|
|
|
unsigned int cur_tail_code = tail_code[sx[sb]][delta[sb]]; |
|
|
|
unsigned int cur_k = k[sb]; |
|
|
|
unsigned int cur_s = s[sb]; |
|
|
|
|
|
|
|
for (; i < sb_length; i++) { |
|
|
|
for (; start < sb_length; start++) { |
|
|
|
int32_t res = *current_res; |
|
|
|
|
|
|
|
if (res == cur_tail_code) { |
|
|
|
@@ -1348,7 +1348,7 @@ static int read_frame_data(ALSDecContext *ctx, unsigned int ra_frame) |
|
|
|
} |
|
|
|
} else { // multi-channel coding |
|
|
|
ALSBlockData bd = { 0 }; |
|
|
|
int b; |
|
|
|
int b, ret; |
|
|
|
int *reverted_channels = ctx->reverted_channels; |
|
|
|
unsigned int offset = 0; |
|
|
|
|
|
|
|
@@ -1381,8 +1381,10 @@ static int read_frame_data(ALSDecContext *ctx, unsigned int ra_frame) |
|
|
|
bd.raw_samples = ctx->raw_samples[c] + offset; |
|
|
|
bd.raw_other = NULL; |
|
|
|
|
|
|
|
if (read_block(ctx, &bd) || read_channel_data(ctx, ctx->chan_data[c], c)) |
|
|
|
return -1; |
|
|
|
if ((ret = read_block(ctx, &bd)) < 0) |
|
|
|
return ret; |
|
|
|
if ((ret = read_channel_data(ctx, ctx->chan_data[c], c)) < 0) |
|
|
|
return ret; |
|
|
|
} |
|
|
|
|
|
|
|
for (c = 0; c < avctx->channels; c++) |
|
|
|
@@ -1401,8 +1403,9 @@ static int read_frame_data(ALSDecContext *ctx, unsigned int ra_frame) |
|
|
|
bd.lpc_cof = ctx->lpc_cof[c]; |
|
|
|
bd.quant_cof = ctx->quant_cof[c]; |
|
|
|
bd.raw_samples = ctx->raw_samples[c] + offset; |
|
|
|
if (decode_block(ctx, &bd)) |
|
|
|
return -1; |
|
|
|
|
|
|
|
if ((ret = decode_block(ctx, &bd)) < 0) |
|
|
|
return ret; |
|
|
|
} |
|
|
|
|
|
|
|
memset(reverted_channels, 0, avctx->channels * sizeof(*reverted_channels)); |
|
|
|
|