Browse Source

coreaudio: If paused, clear any pending stream data.

This makes sure stuff that was still pending for conversion/resampling doesn't
pop in later when the device is unpaused again.

Fixes #8485.
Ryan C. Gordon 1 year ago
parent
commit
9d7feaaf9e
1 changed files with 3 additions and 0 deletions
  1. 3 0
      src/audio/coreaudio/SDL_coreaudio.m

+ 3 - 0
src/audio/coreaudio/SDL_coreaudio.m

@@ -532,6 +532,9 @@ static void outputCallback(void *inUserData, AudioQueueRef inAQ, AudioQueueBuffe
     if (!SDL_AtomicGet(&this->enabled) || SDL_AtomicGet(&this->paused)) {
         /* Supply silence if audio is not enabled or paused */
         SDL_memset(inBuffer->mAudioData, this->spec.silence, inBuffer->mAudioDataBytesCapacity);
+        if (this->stream) {
+            SDL_AudioStreamClear(this->stream);
+        }
     } else if (this->stream) {
         UInt32 remaining = inBuffer->mAudioDataBytesCapacity;
         Uint8 *ptr = (Uint8 *)inBuffer->mAudioData;