From f1cdb318c6817e0c63e397f6bdf7524bb02af2d7 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Sun, 28 Nov 2010 14:57:04 +0000 Subject: [PATCH] SYMBIAN: Fixes & improvements for SymbianSdlMixerManager (untested) svn-id: r54519 --- backends/mixer/sdl/sdl-mixer.cpp | 6 +-- backends/mixer/sdl/sdl-mixer.h | 2 +- .../mixer/symbiansdl/symbiansdl-mixer.cpp | 46 +++++-------------- backends/mixer/symbiansdl/symbiansdl-mixer.h | 6 +-- 4 files changed, 17 insertions(+), 43 deletions(-) diff --git a/backends/mixer/sdl/sdl-mixer.cpp b/backends/mixer/sdl/sdl-mixer.cpp index 3c826bfed81..fa2bf3e2324 100644 --- a/backends/mixer/sdl/sdl-mixer.cpp +++ b/backends/mixer/sdl/sdl-mixer.cpp @@ -58,7 +58,7 @@ void SdlMixerManager::init() { } // Get the desired audio specs - SDL_AudioSpec desired = getAudioSpec(); + SDL_AudioSpec desired = getAudioSpec(SAMPLES_PER_SEC); // Start SDL audio with the desired specs if (SDL_OpenAudio(&desired, &_obtainedRate) != 0) { @@ -78,7 +78,7 @@ void SdlMixerManager::init() { } } -SDL_AudioSpec SdlMixerManager::getAudioSpec() { +SDL_AudioSpec SdlMixerManager::getAudioSpec(uint32 outputRate) { SDL_AudioSpec desired; // Determine the desired output sampling frequency. @@ -86,7 +86,7 @@ SDL_AudioSpec SdlMixerManager::getAudioSpec() { if (ConfMan.hasKey("output_rate")) samplesPerSec = ConfMan.getInt("output_rate"); if (samplesPerSec <= 0) - samplesPerSec = SAMPLES_PER_SEC; + samplesPerSec = outputRate; // Determine the sample buffer size. We want it to store enough data for // at least 1/16th of a second (though at most 8192 samples). Note diff --git a/backends/mixer/sdl/sdl-mixer.h b/backends/mixer/sdl/sdl-mixer.h index 1b3a3543dc0..ca0cbbf93f3 100644 --- a/backends/mixer/sdl/sdl-mixer.h +++ b/backends/mixer/sdl/sdl-mixer.h @@ -83,7 +83,7 @@ protected: /** * Returns the desired audio specification */ - virtual SDL_AudioSpec getAudioSpec(); + virtual SDL_AudioSpec getAudioSpec(uint32 rate); /** * Starts SDL audio diff --git a/backends/mixer/symbiansdl/symbiansdl-mixer.cpp b/backends/mixer/symbiansdl/symbiansdl-mixer.cpp index 0cbae85cb96..ef81b464aca 100644 --- a/backends/mixer/symbiansdl/symbiansdl-mixer.cpp +++ b/backends/mixer/symbiansdl/symbiansdl-mixer.cpp @@ -36,56 +36,32 @@ SymbianSdlMixerManager::SymbianSdlMixerManager() : - _stereo_mix_buffer(0) { + _stereoMixBuffer(0) { } SymbianSdlMixerManager::~SymbianSdlMixerManager() { - delete[] _stereo_mix_buffer; + delete[] _stereoMixBuffer; } -void SymbianSdlMixerManager::init() { - // Start SDL Audio subsystem - if (SDL_InitSubSystem(SDL_INIT_AUDIO) == -1) { - error("Could not initialize SDL: %s", SDL_GetError()); +void SymbianSdlMixerManager::startAudio() { + // Need to create mixbuffer for stereo mix to downmix + if (_obtainedRate.channels != 2) { + _stereoMixBuffer = new byte [_obtainedRate.size * 2]; // * 2 for stereo values } - // Get the desired audio specs - SDL_AudioSpec desired = getAudioSpec(); - - // Start SDL audio with the desired specs - if (SDL_OpenAudio(&desired, &_obtainedRate) != 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); - - _channels = _obtainedRate.channels; - - // Need to create mixbuffer for stereo mix to downmix - if (_channels != 2) { - _stereo_mix_buffer = new byte [_obtainedRate.size * 2]; // * 2 for stereo values - } - - _mixer = new Audio::MixerImpl(g_system, _obtainedRate.freq); - assert(_mixer); - _mixer->setReady(true); - - startAudio(); - } + SdlMixerManager::startAudio(); } void SymbianSdlMixerManager::callbackHandler(byte *samples, int len) { + assert(_mixer); #if defined (S60) && !defined(S60V3) // If not stereo then we need to downmix - if (_mixer->_channels != 2) { - _mixer->mixCallback(_stereo_mix_buffer, len * 2); + if (_obtainedRate.channels != 2) { + _mixer->mixCallback(_stereoMixBuffer, len * 2); int16 *bitmixDst = (int16 *)samples; - int16 *bitmixSrc = (int16 *)_stereo_mix_buffer; + int16 *bitmixSrc = (int16 *)_stereoMixBuffer; for (int loop = len / 2; loop >= 0; loop --) { *bitmixDst = (*bitmixSrc + *(bitmixSrc + 1)) >> 1; diff --git a/backends/mixer/symbiansdl/symbiansdl-mixer.h b/backends/mixer/symbiansdl/symbiansdl-mixer.h index 6a0d281b1aa..9164d95ba2e 100644 --- a/backends/mixer/symbiansdl/symbiansdl-mixer.h +++ b/backends/mixer/symbiansdl/symbiansdl-mixer.h @@ -36,12 +36,10 @@ public: SymbianSdlMixerManager(); virtual ~SymbianSdlMixerManager(); - virtual void init(); - protected: - int _channels; - byte *_stereo_mix_buffer; + byte *_stereoMixBuffer; + virtual void startAudio(); virtual void callbackHandler(byte *samples, int len); };