Explicitly write silence to the audio device while it is paused.

This is what SDL 1.2 did; we'll do this properly (add a method for the target
 driver to pause) when I rewrite all this code after the official 2.0 release.

Fixes Bugzilla #1857.
This commit is contained in:
Ryan C. Gordon 2013-07-11 23:53:00 -04:00
parent a5362aa7e7
commit 37c7e9ad24

View file

@ -461,6 +461,7 @@ SDL_RunAudio(void *devicep)
}
} else {
/* Otherwise, do not use the streamer. This is the old code. */
const int silence = (int) device->spec.silence;
/* Loop, filling the audio buffers */
while (device->enabled) {
@ -484,9 +485,13 @@ SDL_RunAudio(void *devicep)
}
}
SDL_LockMutex(device->mixer_lock);
(*fill) (udata, stream, stream_len);
SDL_UnlockMutex(device->mixer_lock);
if (device->paused) {
SDL_memset(stream, silence, stream_len);
} else {
SDL_LockMutex(device->mixer_lock);
(*fill) (udata, stream, stream_len);
SDL_UnlockMutex(device->mixer_lock);
}
/* Convert the audio if necessary */
if (device->convert.needed) {