diff options
author | Alejandro Marzini | 2010-06-01 04:00:55 +0000 |
---|---|---|
committer | Alejandro Marzini | 2010-06-01 04:00:55 +0000 |
commit | 0bc8f4c8b4050c54e551aabdf58b30be79b6720c (patch) | |
tree | 31c5022d4abe8f566e1cf5e1435892d0fe0a9550 /backends/platform/sdl/audio.h | |
parent | 16c559a095af85a7f553912461cf4468366070a7 (diff) | |
download | scummvm-rg350-0bc8f4c8b4050c54e551aabdf58b30be79b6720c.tar.gz scummvm-rg350-0bc8f4c8b4050c54e551aabdf58b30be79b6720c.tar.bz2 scummvm-rg350-0bc8f4c8b4050c54e551aabdf58b30be79b6720c.zip |
SDL audio subsystem created.
svn-id: r49369
Diffstat (limited to 'backends/platform/sdl/audio.h')
-rw-r--r-- | backends/platform/sdl/audio.h | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/backends/platform/sdl/audio.h b/backends/platform/sdl/audio.h new file mode 100644 index 0000000000..4ef560999e --- /dev/null +++ b/backends/platform/sdl/audio.h @@ -0,0 +1,116 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef BACKENDS_SDL_SUBSYS_AUDIO_H +#define BACKENDS_SDL_SUBSYS_AUDIO_H + +#include "backends/base-subsys-audio.h" + +#if defined(__SYMBIAN32__) +#include <esdl\SDL.h> +#else +#include <SDL.h> +#endif + +#if defined(MACOSX) +// On Mac OS X, we need to double buffer the audio buffer, else anything +// which produces sampled data with high latency (like the MT-32 emulator) +// will sound terribly. +// This could be enabled for more / most ports in the future, but needs some +// testing. +#define MIXER_DOUBLE_BUFFERING 1 +#endif + +namespace Audio { + class MixerImpl; +} + +class SdlSubSys_Audio : public BaseSubSys_Audio { +public: + SdlSubSys_Audio(); + ~SdlSubSys_Audio(); + + virtual void audioInit(); + virtual void audioDone(); + + bool hasFeature(Feature f); + void setFeatureState(Feature f, bool enable); + bool getFeatureState(Feature f); + + // Set function that generates samples + virtual void setupMixer(); + static void mixCallback(void *s, byte *samples, int len); + + virtual void closeMixer(); + + virtual Audio::Mixer *getMixer(); + + virtual bool openCD(int drive); + + // Poll CD status + // Returns true if cd audio is playing + bool pollCD(); + + // Play CD audio track + void playCD(int track, int num_loops, int start_frame, int duration); + + // Stop CD audio track + void stopCD(); + + // Update CD audio status + void updateCD(); + +protected: + bool _inited; + + SDL_AudioSpec _obtainedRate; + + // CD Audio + SDL_CD *_cdrom; + int _cdTrack, _cdNumLoops, _cdStartFrame, _cdDuration; + uint32 _cdEndTime, _cdStopTime; + +#ifdef MIXER_DOUBLE_BUFFERING + SDL_mutex *_soundMutex; + SDL_cond *_soundCond; + SDL_Thread *_soundThread; + bool _soundThreadIsRunning; + bool _soundThreadShouldQuit; + + byte _activeSoundBuf; + uint _soundBufSize; + byte *_soundBuffers[2]; + + void mixerProducerThread(); + static int SDLCALL mixerProducerThreadEntry(void *arg); + void initThreadedMixer(Audio::MixerImpl *mixer, uint bufSize); + void deinitThreadedMixer(); +#endif + + Audio::MixerImpl *_mixer; +}; + + +#endif |