|
|
|
@ -899,11 +899,11 @@ static av_always_inline int filter_3800(APEPredictor *p, |
|
|
|
|
return p->filterA[filter]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void long_filter_high_3800(int32_t *buffer, int order, int shift, |
|
|
|
|
int32_t *coeffs, int32_t *delay, int length) |
|
|
|
|
static void long_filter_high_3800(int32_t *buffer, int order, int shift, int length) |
|
|
|
|
{ |
|
|
|
|
int i, j; |
|
|
|
|
int32_t dotprod, sign; |
|
|
|
|
int32_t coeffs[256], delay[256]; |
|
|
|
|
|
|
|
|
|
memset(coeffs, 0, order * sizeof(*coeffs)); |
|
|
|
|
for (i = 0; i < order; i++) |
|
|
|
@ -947,13 +947,12 @@ static void predictor_decode_stereo_3800(APEContext *ctx, int count) |
|
|
|
|
APEPredictor *p = &ctx->predictor; |
|
|
|
|
int32_t *decoded0 = ctx->decoded[0]; |
|
|
|
|
int32_t *decoded1 = ctx->decoded[1]; |
|
|
|
|
int32_t coeffs[256], delay[256]; |
|
|
|
|
int start = 4, shift = 10; |
|
|
|
|
|
|
|
|
|
if (ctx->compression_level == COMPRESSION_LEVEL_HIGH) { |
|
|
|
|
start = 16; |
|
|
|
|
long_filter_high_3800(decoded0, 16, 9, coeffs, delay, count); |
|
|
|
|
long_filter_high_3800(decoded1, 16, 9, coeffs, delay, count); |
|
|
|
|
long_filter_high_3800(decoded0, 16, 9, count); |
|
|
|
|
long_filter_high_3800(decoded1, 16, 9, count); |
|
|
|
|
} else if (ctx->compression_level == COMPRESSION_LEVEL_EXTRA_HIGH) { |
|
|
|
|
int order = 128, shift2 = 11; |
|
|
|
|
|
|
|
|
@ -965,8 +964,8 @@ static void predictor_decode_stereo_3800(APEContext *ctx, int count) |
|
|
|
|
long_filter_ehigh_3830(decoded1 + order, count - order); |
|
|
|
|
} |
|
|
|
|
start = order; |
|
|
|
|
long_filter_high_3800(decoded0, order, shift2, coeffs, delay, count); |
|
|
|
|
long_filter_high_3800(decoded1, order, shift2, coeffs, delay, count); |
|
|
|
|
long_filter_high_3800(decoded0, order, shift2, count); |
|
|
|
|
long_filter_high_3800(decoded1, order, shift2, count); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
while (count--) { |
|
|
|
@ -1002,12 +1001,11 @@ static void predictor_decode_mono_3800(APEContext *ctx, int count) |
|
|
|
|
{ |
|
|
|
|
APEPredictor *p = &ctx->predictor; |
|
|
|
|
int32_t *decoded0 = ctx->decoded[0]; |
|
|
|
|
int32_t coeffs[256], delay[256]; |
|
|
|
|
int start = 4, shift = 10; |
|
|
|
|
|
|
|
|
|
if (ctx->compression_level == COMPRESSION_LEVEL_HIGH) { |
|
|
|
|
start = 16; |
|
|
|
|
long_filter_high_3800(decoded0, 16, 9, coeffs, delay, count); |
|
|
|
|
long_filter_high_3800(decoded0, 16, 9, count); |
|
|
|
|
} else if (ctx->compression_level == COMPRESSION_LEVEL_EXTRA_HIGH) { |
|
|
|
|
int order = 128, shift2 = 11; |
|
|
|
|
|
|
|
|
@ -1018,7 +1016,7 @@ static void predictor_decode_mono_3800(APEContext *ctx, int count) |
|
|
|
|
long_filter_ehigh_3830(decoded0 + order, count - order); |
|
|
|
|
} |
|
|
|
|
start = order; |
|
|
|
|
long_filter_high_3800(decoded0, order, shift2, coeffs, delay, count); |
|
|
|
|
long_filter_high_3800(decoded0, order, shift2, count); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
while (count--) { |
|
|
|
|