aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorD G Turner2011-06-14 00:15:50 +0100
committerD G Turner2011-06-14 00:15:50 +0100
commit8c485fe2dad12e00848673729b9ec9b24a72118c (patch)
treebb7d9ebff9b2432ff9d03da82af709fd2cca4ba0
parentf932a11587ca9abdb100972e3f9db0fc18a08819 (diff)
downloadscummvm-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.cpp26
-rw-r--r--backends/mixer/sdl/sdl-mixer.h2
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;