From fa52df018ef44a30b45ceed31dffc25de3393e84 Mon Sep 17 00:00:00 2001
From: Colin Snover
Date: Tue, 5 Sep 2017 20:56:19 -0500
Subject: SDL: Fix DoubleBufferSDLMixerManager doubling audio latency

If it turns out that everything that had previously been fixed by
this manager is broken by this change, everything that had been
fixed probably could have been fixed by just increasing the audio
buffer size in SdlMixerManager. :\
---
 backends/mixer/doublebuffersdl/doublebuffersdl-mixer.cpp | 7 +++++++
 backends/mixer/doublebuffersdl/doublebuffersdl-mixer.h   | 2 ++
 2 files changed, 9 insertions(+)

(limited to 'backends/mixer')

diff --git a/backends/mixer/doublebuffersdl/doublebuffersdl-mixer.cpp b/backends/mixer/doublebuffersdl/doublebuffersdl-mixer.cpp
index e5f63dc908..ea0ba024bc 100644
--- a/backends/mixer/doublebuffersdl/doublebuffersdl-mixer.cpp
+++ b/backends/mixer/doublebuffersdl/doublebuffersdl-mixer.cpp
@@ -62,6 +62,13 @@ void DoubleBufferSDLMixerManager::startAudio() {
 	SdlMixerManager::startAudio();
 }
 
+SDL_AudioSpec DoubleBufferSDLMixerManager::getAudioSpec(uint32 rate) {
+	SDL_AudioSpec desired = SdlMixerManager::getAudioSpec(rate);
+	// Don't double audio latency when double buffering
+	desired.samples /= 2;
+	return desired;
+}
+
 void DoubleBufferSDLMixerManager::mixerProducerThread() {
 	byte nextSoundBuffer;
 
diff --git a/backends/mixer/doublebuffersdl/doublebuffersdl-mixer.h b/backends/mixer/doublebuffersdl/doublebuffersdl-mixer.h
index e3019fe11b..e952cd2100 100644
--- a/backends/mixer/doublebuffersdl/doublebuffersdl-mixer.h
+++ b/backends/mixer/doublebuffersdl/doublebuffersdl-mixer.h
@@ -44,6 +44,8 @@ protected:
 	uint _soundBufSize;
 	byte *_soundBuffers[2];
 
+	virtual SDL_AudioSpec getAudioSpec(uint32 rate) override;
+
 	/**
 	 * Handles and swap the sound buffers
 	 */
-- 
cgit v1.2.3