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