diff options
author | D G Turner | 2011-06-14 00:15:50 +0100 |
---|---|---|
committer | D G Turner | 2011-06-14 00:15:50 +0100 |
commit | 8c485fe2dad12e00848673729b9ec9b24a72118c (patch) | |
tree | bb7d9ebff9b2432ff9d03da82af709fd2cca4ba0 | |
parent | f932a11587ca9abdb100972e3f9db0fc18a08819 (diff) | |
download | scummvm-rg350-8c485fe2dad12e00848673729b9ec9b24a72118c.tar.gz scummvm-rg350-8c485fe2dad12e00848673729b9ec9b24a72118c.tar.bz2 scummvm-rg350-8c485fe2dad12e00848673729b9ec9b24a72118c.zip |
BACKENDS: Improve SDL Mixer Output Format Checks and Reporting.
This commit corrects a number of minor issues and adds warnings
for when the desired output parameters given to SDL_OpenAudio()
don't match the obtained.
-rw-r--r-- | backends/mixer/sdl/sdl-mixer.cpp | 26 | ||||
-rw-r--r-- | backends/mixer/sdl/sdl-mixer.h | 2 |
2 files changed, 22 insertions, 6 deletions
diff --git a/backends/mixer/sdl/sdl-mixer.cpp b/backends/mixer/sdl/sdl-mixer.cpp index 16e7f22db5..f0b0885dd7 100644 --- a/backends/mixer/sdl/sdl-mixer.cpp +++ b/backends/mixer/sdl/sdl-mixer.cpp @@ -61,18 +61,34 @@ void SdlMixerManager::init() { // Get the desired audio specs SDL_AudioSpec desired = getAudioSpec(SAMPLES_PER_SEC); + // Needed as SDL_OpenAudio as of SDL-1.2.14 mutates fields in + // "desired" if used directly. + SDL_AudioSpec fmt = desired; + // Start SDL audio with the desired specs - if (SDL_OpenAudio(&desired, &_obtainedRate) != 0) { + if (SDL_OpenAudio(&fmt, &_obtained) != 0) { warning("Could not open audio device: %s", SDL_GetError()); _mixer = new Audio::MixerImpl(g_system, desired.freq); assert(_mixer); _mixer->setReady(false); } else { - debug(1, "Output sample rate: %d Hz", _obtainedRate.freq); + debug(1, "Output sample rate: %d Hz", _obtained.freq); + if (_obtained.freq != desired.freq) + warning("SDL mixer output sample rate: %d differs from desired: %d", _obtained.freq, desired.freq); - _mixer = new Audio::MixerImpl(g_system, _obtainedRate.freq); - assert(_mixer); + debug(1, "Output buffer size: %d samples", _obtained.samples); + if (_obtained.samples != desired.samples) + warning("SDL mixer output buffer size: %d differs from desired: %d", _obtained.samples, desired.samples); + + if (_obtained.format != desired.format) + warning("SDL mixer sound format: %d differs from desired: %d", _obtained.format, desired.format); + + if (_obtained.channels != 2) + error("SDL mixer output requires stereo output device"); + + _mixer = new Audio::MixerImpl(g_system, _obtained.freq); + assert(_mixer); _mixer->setReady(true); startAudio(); @@ -133,7 +149,7 @@ void SdlMixerManager::suspendAudio() { int SdlMixerManager::resumeAudio() { if (!_audioSuspended) return -2; - if (SDL_OpenAudio(&_obtainedRate, NULL) < 0){ + if (SDL_OpenAudio(&_obtained, NULL) < 0){ return -1; } SDL_PauseAudio(0); diff --git a/backends/mixer/sdl/sdl-mixer.h b/backends/mixer/sdl/sdl-mixer.h index 5590c90ab3..82ffa4f901 100644 --- a/backends/mixer/sdl/sdl-mixer.h +++ b/backends/mixer/sdl/sdl-mixer.h @@ -67,7 +67,7 @@ protected: * The obtained audio specification after opening the * audio system. */ - SDL_AudioSpec _obtainedRate; + SDL_AudioSpec _obtained; /** State of the audio system */ bool _audioSuspended; |