diff options
Diffstat (limited to 'backends/platform/sdl')
-rw-r--r-- | backends/platform/sdl/sdl-common.h | 22 | ||||
-rw-r--r-- | backends/platform/sdl/sdl.cpp | 51 |
2 files changed, 72 insertions, 1 deletions
diff --git a/backends/platform/sdl/sdl-common.h b/backends/platform/sdl/sdl-common.h index 093e7950f9..aeb9c5bf37 100644 --- a/backends/platform/sdl/sdl-common.h +++ b/backends/platform/sdl/sdl-common.h @@ -33,6 +33,15 @@ #include "backends/intern.h" +namespace Audio { + class Mixer; +} + +namespace Common { + class SaveFileManager; + class TimerManager; +} + #if !defined(_WIN32_WCE) && !defined(__SYMBIAN32__) // Uncomment this to enable the 'on screen display' code. #define USE_OSD 1 @@ -124,9 +133,10 @@ public: virtual bool pollEvent(Event &event); // overloaded by CE backend // Set function that generates samples + typedef void (*SoundProc)(void *param, byte *buf, int len); virtual bool setSoundCallback(SoundProc proc, void *param); // overloaded by CE backend - void clearSoundCallback(); + virtual Audio::Mixer *getMixer(); // Poll CD status // Returns true if cd audio is playing @@ -146,7 +156,9 @@ public: // Add a callback timer + typedef int (*TimerProc)(int interval); void setTimerCallback(TimerProc callback, int timer); + virtual Common::TimerManager *getTimerManager(); // Mutex handling MutexRef createMutex(); @@ -187,6 +199,8 @@ public: void displayMessageOnOSD(const char *msg); #endif + virtual Common::SaveFileManager *getSavefileManager(); + protected: bool _inited; @@ -357,6 +371,12 @@ protected: MutexRef _graphicsMutex; + Common::SaveFileManager *_savefile; + Audio::Mixer *_mixer; + Common::TimerManager *_timer; + + + void addDirtyRgnAuto(const byte *buf); void makeChecksums(const byte *buf); diff --git a/backends/platform/sdl/sdl.cpp b/backends/platform/sdl/sdl.cpp index 21f5935c58..b4677eac0f 100644 --- a/backends/platform/sdl/sdl.cpp +++ b/backends/platform/sdl/sdl.cpp @@ -27,6 +27,10 @@ #include "common/util.h" #include "base/main.h" +#include "backends/saves/default/default-saves.h" +#include "backends/timer/default/default-timer.h" +#include "sound/mixer.h" + #include "icons/scummvm.xpm" #if defined(__SYMBIAN32__) @@ -42,6 +46,11 @@ int __stdcall WinMain(HINSTANCE /*hInst*/, HINSTANCE /*hPrevInst*/, LPSTR /*lpC } #endif +static int timer_handler(int t) { + DefaultTimerManager *tm = (DefaultTimerManager *)g_system->getTimerManager(); + return tm->handler(t); +} + int main(int argc, char *argv[]) { #if defined(__SYMBIAN32__) @@ -169,6 +178,29 @@ void OSystem_SDL::initBackend() { printf("Using joystick: %s\n", SDL_JoystickName(0)); _joystick = SDL_JoystickOpen(joystick_num); } + + + // Create the savefile manager, if none exists yet (we check for this to + // allow subclasses to provide their own). + if (_savefile == 0) { + _savefile = new DefaultSaveFileManager(); + } + + // Create and hook up the mixer, if none exists yet (we check for this to + // allow subclasses to provide their own). + if (_mixer == 0) { + _mixer = new Audio::Mixer(); + setSoundCallback(Audio::Mixer::mixCallback, _mixer); + } + + // Create and hook up the timer manager, if none exists yet (we check for + // this to allow subclasses to provide their own). + if (_timer == 0) { + _timer = new DefaultTimerManager(); + setTimerCallback(&timer_handler, 10); + } + + OSystem::initBackend(); _inited = true; } @@ -189,6 +221,9 @@ OSystem_SDL::OSystem_SDL() _joystick(0), _currentShakePos(0), _newShakePos(0), _paletteDirtyStart(0), _paletteDirtyEnd(0), + _savefile(0), + _mixer(0), + _timer(0), _graphicsMutex(0), _transactionMode(kTransactionNone) { // allocate palette storage @@ -223,6 +258,16 @@ void OSystem_SDL::setTimerCallback(TimerProc callback, int timer) { SDL_SetTimer(timer, (SDL_TimerCallback) callback); } +Common::TimerManager *OSystem_SDL::getTimerManager() { + assert(_timer); + return _timer; +} + +Common::SaveFileManager *OSystem_SDL::getSavefileManager() { + assert(_savefile); + return _savefile; +} + void OSystem_SDL::setWindowCaption(const char *caption) { SDL_WM_SetCaption(caption, caption); } @@ -395,6 +440,7 @@ bool OSystem_SDL::setSoundCallback(SoundProc proc, void *param) { // least on some platforms SDL will lie and claim it did get the rate // even if it didn't. Probably only happens for "weird" rates, though. _samplesPerSec = obtained.freq; + debug(1, "Output sample rate: %d Hz", _samplesPerSec); SDL_PauseAudio(0); return true; } @@ -407,6 +453,11 @@ int OSystem_SDL::getOutputSampleRate() const { return _samplesPerSec; } +Audio::Mixer *OSystem_SDL::getMixer() { + assert(_mixer); + return _mixer; +} + #pragma mark - #pragma mark --- CD Audio --- #pragma mark - |