From e5d49c20331e85ad0a05999d5c6146e34c93f545 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Wed, 30 Jul 2014 11:08:31 -0400 Subject: [PATCH] Added a GetPendingBytes method to the audio backend. This will (eventually) make SDL_GetQueuedAudioSize() more accurate, and thus reduce latency. Right now this isn't implemented anywhere, so we assume data fed to the audio callback is consumed by the hardware and immediately played to completion. --- src/audio/SDL_audio.c | 9 ++++++++- src/audio/SDL_sysaudio.h | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/audio/SDL_audio.c b/src/audio/SDL_audio.c index a788c89a2..804138c5b 100644 --- a/src/audio/SDL_audio.c +++ b/src/audio/SDL_audio.c @@ -178,6 +178,12 @@ SDL_AudioPlayDevice_Default(_THIS) { /* no-op. */ } +static int +SDL_AudioGetPendingBytes_Default(_THIS) +{ + return 0; +} + static Uint8 * SDL_AudioGetDeviceBuf_Default(_THIS) { @@ -253,6 +259,7 @@ finalize_audio_entry_points(void) FILL_STUB(ThreadInit); FILL_STUB(WaitDevice); FILL_STUB(PlayDevice); + FILL_STUB(GetPendingBytes); FILL_STUB(GetDeviceBuf); FILL_STUB(WaitDone); FILL_STUB(CloseDevice); @@ -471,7 +478,7 @@ SDL_GetQueuedAudioSize(SDL_AudioDeviceID devid) SDL_AudioDevice *device = get_audio_device(devid); if (device) { current_audio.impl.LockDevice(device); - retval = device->queued_bytes; + retval = device->queued_bytes + current_audio.impl.GetPendingBytes(device); current_audio.impl.UnlockDevice(device); } diff --git a/src/audio/SDL_sysaudio.h b/src/audio/SDL_sysaudio.h index c1810b432..4f933205d 100644 --- a/src/audio/SDL_sysaudio.h +++ b/src/audio/SDL_sysaudio.h @@ -60,6 +60,7 @@ typedef struct SDL_AudioDriverImpl void (*ThreadInit) (_THIS); /* Called by audio thread at start */ void (*WaitDevice) (_THIS); void (*PlayDevice) (_THIS); + int (*GetPendingBytes) (_THIS); Uint8 *(*GetDeviceBuf) (_THIS); void (*WaitDone) (_THIS); void (*CloseDevice) (_THIS);