From 37f404fb871713c35bccf91420404e4c665ba2ee Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Fri, 6 Jan 2017 00:47:42 -0800 Subject: [PATCH] Fixed confusion between Ryan's new audio stream and the audio buffer we were calling stream in the callback --- src/audio/SDL_audio.c | 48 +++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/audio/SDL_audio.c b/src/audio/SDL_audio.c index 7e874e193..5773a4f5d 100644 --- a/src/audio/SDL_audio.c +++ b/src/audio/SDL_audio.c @@ -547,8 +547,8 @@ SDL_RunAudio(void *devicep) SDL_AudioDevice *device = (SDL_AudioDevice *) devicep; const int silence = (int) device->spec.silence; const Uint32 delay = ((device->spec.samples * 1000) / device->spec.freq); - const int stream_len = device->callbackspec.size; - Uint8 *stream; + const int data_len = device->callbackspec.size; + Uint8 *data; void *udata = device->spec.userdata; SDL_AudioCallback callback = device->spec.callback; @@ -565,8 +565,8 @@ SDL_RunAudio(void *devicep) while (!SDL_AtomicGet(&device->shutdown)) { /* Fill the current buffer with sound */ if (!device->stream && SDL_AtomicGet(&device->enabled)) { - SDL_assert(device->spec.size == device->callbackspec.size); - stream = current_audio.impl.GetDeviceBuf(device); + SDL_assert(data_len == device->spec.size); + data = current_audio.impl.GetDeviceBuf(device); } else { /* if the device isn't enabled, we still write to the work_buffer, so the app's callback will fire with @@ -574,48 +574,48 @@ SDL_RunAudio(void *devicep) for timing or progress. They can use hotplug now to know if the device failed. Streaming playback uses work_buffer, too. */ - stream = NULL; + data = NULL; } - if (stream == NULL) { - stream = device->work_buffer; + if (data == NULL) { + data = device->work_buffer; } if ( SDL_AtomicGet(&device->enabled) ) { /* !!! FIXME: this should be LockDevice. */ SDL_LockMutex(device->mixer_lock); if (SDL_AtomicGet(&device->paused)) { - SDL_memset(stream, silence, stream_len); + SDL_memset(data, silence, data_len); } else { - callback(udata, stream, stream_len); + callback(udata, data, data_len); } SDL_UnlockMutex(device->mixer_lock); } else { - SDL_memset(stream, silence, stream_len); + SDL_memset(data, silence, data_len); } if (device->stream) { /* Stream available audio to device, converting/resampling. */ /* if this fails...oh well. We'll play silence here. */ - SDL_AudioStreamPut(device->stream, stream, stream_len); + SDL_AudioStreamPut(device->stream, data, data_len); while (SDL_AudioStreamAvailable(device->stream) >= ((int) device->spec.size)) { - stream = SDL_AtomicGet(&device->enabled) ? current_audio.impl.GetDeviceBuf(device) : NULL; - if (stream == NULL) { + data = SDL_AtomicGet(&device->enabled) ? current_audio.impl.GetDeviceBuf(device) : NULL; + if (data == NULL) { SDL_AudioStreamClear(device->stream); SDL_Delay(delay); break; } else { - const int got = SDL_AudioStreamGet(device->stream, stream, device->spec.size); + const int got = SDL_AudioStreamGet(device->stream, data, device->spec.size); SDL_assert((got < 0) || (got == device->spec.size)); if (got != device->spec.size) { - SDL_memset(stream, device->spec.silence, device->spec.size); + SDL_memset(data, device->spec.silence, device->spec.size); } current_audio.impl.PlayDevice(device); current_audio.impl.WaitDevice(device); } } - } else if (stream == device->work_buffer) { + } else if (data == device->work_buffer) { /* nothing to do; pause like we queued a buffer to play. */ SDL_Delay(delay); } else { /* writing directly to the device. */ @@ -640,8 +640,8 @@ SDL_CaptureAudio(void *devicep) SDL_AudioDevice *device = (SDL_AudioDevice *) devicep; const int silence = (int) device->spec.silence; const Uint32 delay = ((device->spec.samples * 1000) / device->spec.freq); - const int stream_len = device->spec.size; - Uint8 *stream; + const int data_len = device->spec.size; + Uint8 *data; void *udata = device->spec.userdata; SDL_AudioCallback callback = device->spec.callback; @@ -669,13 +669,13 @@ SDL_CaptureAudio(void *devicep) } /* Fill the current buffer with sound */ - still_need = stream_len; + still_need = data_len; /* Use the work_buffer to hold data read from the device. */ - stream = device->work_buffer; - SDL_assert(stream != NULL); + data = device->work_buffer; + SDL_assert(data != NULL); - ptr = stream; + ptr = data; /* We still read from the device when "paused" to keep the state sane, and block when there isn't data so this thread isn't eating CPU. @@ -700,7 +700,7 @@ SDL_CaptureAudio(void *devicep) if (device->stream) { /* if this fails...oh well. */ - SDL_AudioStreamPut(device->stream, stream, stream_len); + SDL_AudioStreamPut(device->stream, data, data_len); while (SDL_AudioStreamAvailable(device->stream) >= ((int) device->callbackspec.size)) { const int got = SDL_AudioStreamGet(device->stream, device->work_buffer, device->callbackspec.size); @@ -720,7 +720,7 @@ SDL_CaptureAudio(void *devicep) /* !!! FIXME: this should be LockDevice. */ SDL_LockMutex(device->mixer_lock); if (!SDL_AtomicGet(&device->paused)) { - callback(udata, stream, device->callbackspec.size); + callback(udata, data, device->callbackspec.size); } SDL_UnlockMutex(device->mixer_lock); }