From 357bc8ca5c8fd25916fa51be1b70110e54106928 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Tue, 21 Feb 2023 12:53:45 -0500 Subject: [PATCH] resampler: correctly save off left padding. I don't know if we ever actually hit this in practice, but if this isn't replacing the whole buffer, it needs to slide the end of the existing padding over to the start before adding in the new data. --- src/audio/SDL_audiocvt.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/audio/SDL_audiocvt.c b/src/audio/SDL_audiocvt.c index af44d0a5ca..b431c31f44 100644 --- a/src/audio/SDL_audiocvt.c +++ b/src/audio/SDL_audiocvt.c @@ -1063,6 +1063,9 @@ static int SDL_ResampleAudioStream(SDL_AudioStream *stream, const void *_inbuf, retval = SDL_ResampleAudio(chans, inrate, outrate, lpadding, rpadding, inbuf, inbuflen, outbuf, outbuflen); /* update our left padding with end of current input, for next run. */ + if (cpy < paddingbytes) { /* slide end of the padding buffer to the start if we aren't replacing the whole thing. */ + SDL_memmove(lpadding, lpadding + (cpy / sizeof (float)), paddingbytes - cpy); + } SDL_memcpy((lpadding + paddingsamples) - (cpy / sizeof(float)), inbufend - cpy, cpy); return retval; }