mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-09-19 21:06:42 +00:00
avcodec/apedec: Fix 48khz 24bit below insane level
Fixes: Ticket9816 Fixes: vlc.ape and APE_48K_24bit_2CH_02_01.ape Regression since:ed0001482a
. Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> (cherry picked from commit80ad0e2198
) Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
parent
9352ed9ef5
commit
1b44ad81f9
@ -1166,7 +1166,8 @@ static void predictor_decode_mono_3930(APEContext *ctx, int count)
|
||||
static av_always_inline int predictor_update_filter(APEPredictor64 *p,
|
||||
const int decoded, const int filter,
|
||||
const int delayA, const int delayB,
|
||||
const int adaptA, const int adaptB)
|
||||
const int adaptA, const int adaptB,
|
||||
int compression_level)
|
||||
{
|
||||
int64_t predictionA, predictionB;
|
||||
int32_t sign;
|
||||
@ -1194,7 +1195,13 @@ static av_always_inline int predictor_update_filter(APEPredictor64 *p,
|
||||
p->buf[delayB - 3] * p->coeffsB[filter][3] +
|
||||
p->buf[delayB - 4] * p->coeffsB[filter][4];
|
||||
|
||||
p->lastA[filter] = decoded + ((int64_t)((uint64_t)predictionA + (predictionB >> 1)) >> 10);
|
||||
if (compression_level < COMPRESSION_LEVEL_INSANE) {
|
||||
predictionA = (int32_t)predictionA;
|
||||
predictionB = (int32_t)predictionB;
|
||||
p->lastA[filter] = decoded + ((int32_t)(predictionA + (predictionB >> 1)) >> 10);
|
||||
} else {
|
||||
p->lastA[filter] = decoded + ((int64_t)((uint64_t)predictionA + (predictionB >> 1)) >> 10);
|
||||
}
|
||||
p->filterA[filter] = p->lastA[filter] + ((int64_t)(p->filterA[filter] * 31ULL) >> 5);
|
||||
|
||||
sign = APESIGN(decoded);
|
||||
@ -1222,10 +1229,12 @@ static void predictor_decode_stereo_3950(APEContext *ctx, int count)
|
||||
while (count--) {
|
||||
/* Predictor Y */
|
||||
*decoded0 = predictor_update_filter(p, *decoded0, 0, YDELAYA, YDELAYB,
|
||||
YADAPTCOEFFSA, YADAPTCOEFFSB);
|
||||
YADAPTCOEFFSA, YADAPTCOEFFSB,
|
||||
ctx->compression_level);
|
||||
decoded0++;
|
||||
*decoded1 = predictor_update_filter(p, *decoded1, 1, XDELAYA, XDELAYB,
|
||||
XADAPTCOEFFSA, XADAPTCOEFFSB);
|
||||
XADAPTCOEFFSA, XADAPTCOEFFSB,
|
||||
ctx->compression_level);
|
||||
decoded1++;
|
||||
|
||||
/* Combined */
|
||||
|
Loading…
Reference in New Issue
Block a user