|
|
|
@ -517,7 +517,7 @@ static inline int APESIGN(int32_t x) { |
|
|
|
|
return (x < 0) - (x > 0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int predictor_update_filter(APEPredictor *p, const int decoded, const int filter, const int delayA, const int delayB, const int adaptA, const int adaptB) |
|
|
|
|
static av_always_inline int predictor_update_filter(APEPredictor *p, const int decoded, const int filter, const int delayA, const int delayB, const int adaptA, const int adaptB) |
|
|
|
|
{ |
|
|
|
|
int32_t predictionA, predictionB; |
|
|
|
|
|
|
|
|
@ -578,17 +578,16 @@ static int predictor_update_filter(APEPredictor *p, const int decoded, const int |
|
|
|
|
|
|
|
|
|
static void predictor_decode_stereo(APEContext * ctx, int count) |
|
|
|
|
{ |
|
|
|
|
int32_t predictionA, predictionB; |
|
|
|
|
APEPredictor *p = &ctx->predictor; |
|
|
|
|
int32_t *decoded0 = ctx->decoded0; |
|
|
|
|
int32_t *decoded1 = ctx->decoded1; |
|
|
|
|
|
|
|
|
|
while (count--) { |
|
|
|
|
/* Predictor Y */ |
|
|
|
|
predictionA = predictor_update_filter(p, *decoded0, 0, YDELAYA, YDELAYB, YADAPTCOEFFSA, YADAPTCOEFFSB); |
|
|
|
|
predictionB = predictor_update_filter(p, *decoded1, 1, XDELAYA, XDELAYB, XADAPTCOEFFSA, XADAPTCOEFFSB); |
|
|
|
|
*(decoded0++) = predictionA; |
|
|
|
|
*(decoded1++) = predictionB; |
|
|
|
|
*decoded0 = predictor_update_filter(p, *decoded0, 0, YDELAYA, YDELAYB, YADAPTCOEFFSA, YADAPTCOEFFSB); |
|
|
|
|
decoded0++; |
|
|
|
|
*decoded1 = predictor_update_filter(p, *decoded1, 1, XDELAYA, XDELAYB, XADAPTCOEFFSA, XADAPTCOEFFSB); |
|
|
|
|
decoded1++; |
|
|
|
|
|
|
|
|
|
/* Combined */ |
|
|
|
|
p->buf++; |
|
|
|
|