소스 검색

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.
Ryan C. Gordon 3 년 전
부모
커밋
357bc8ca5c
1개의 변경된 파일3개의 추가작업 그리고 0개의 파일을 삭제
  1. 3 0
      src/audio/SDL_audiocvt.c

+ 3 - 0
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;
 }