diff options
Diffstat (limited to 'src/sound')
-rw-r--r-- | src/sound/cocoa_s.cpp | 11 | ||||
-rw-r--r-- | src/sound/cocoa_s.h | 18 | ||||
-rw-r--r-- | src/sound/null_s.cpp | 8 | ||||
-rw-r--r-- | src/sound/null_s.h | 18 | ||||
-rw-r--r-- | src/sound/sdl_s.cpp | 11 | ||||
-rw-r--r-- | src/sound/sdl_s.h | 18 | ||||
-rw-r--r-- | src/sound/sound_driver.hpp | 27 | ||||
-rw-r--r-- | src/sound/win32_s.cpp | 11 | ||||
-rw-r--r-- | src/sound/win32_s.h | 18 |
9 files changed, 103 insertions, 37 deletions
diff --git a/src/sound/cocoa_s.cpp b/src/sound/cocoa_s.cpp index 246cbcecf..0c1e793f9 100644 --- a/src/sound/cocoa_s.cpp +++ b/src/sound/cocoa_s.cpp @@ -36,6 +36,7 @@ #undef Point #undef Rect +static FSoundDriver_Cocoa iFSoundDriver_Cocoa; static AudioUnit _outputAudioUnit; @@ -48,7 +49,7 @@ static OSStatus audioCallback(void *inRefCon, AudioUnitRenderActionFlags inActio } -static const char *CocoaSoundStart(const char * const *parm) +const char *SoundDriver_Cocoa::Start(const char * const *parm) { Component comp; ComponentDescription desc; @@ -116,7 +117,7 @@ static const char *CocoaSoundStart(const char * const *parm) } -static void CocoaSoundStop() +void SoundDriver_Cocoa::Stop() { struct AudioUnitInputCallback callback; @@ -140,10 +141,4 @@ static void CocoaSoundStop() } } - -const HalSoundDriver _cocoa_sound_driver = { - CocoaSoundStart, - CocoaSoundStop, -}; - #endif /* WITH_COCOA */ diff --git a/src/sound/cocoa_s.h b/src/sound/cocoa_s.h index 92f67cb10..96e24522f 100644 --- a/src/sound/cocoa_s.h +++ b/src/sound/cocoa_s.h @@ -3,8 +3,22 @@ #ifndef SOUND_COCOA_H #define SOUND_COCOA_H -#include "../hal.h" +#include "sound_driver.hpp" -extern const HalSoundDriver _cocoa_sound_driver; +class SoundDriver_Cocoa: public SoundDriver { +public: + /* virtual */ bool CanProbe() { return true; } + + /* virtual */ const char *Start(const char * const *param); + + /* virtual */ void Stop(); +}; + +class FSoundDriver_Cocoa: public SoundDriverFactory<FSoundDriver_Cocoa> { +public: + /* virtual */ const char *GetName() { return "cocoa"; } + /* virtual */ const char *GetDescription() { return "Cocoa Sound Driver"; } + /* virtual */ Driver *CreateInstance() { return new SoundDriver_Cocoa(); } +}; #endif /* SOUND_COCOA_H */ diff --git a/src/sound/null_s.cpp b/src/sound/null_s.cpp index 00eab496f..c8fe22ca3 100644 --- a/src/sound/null_s.cpp +++ b/src/sound/null_s.cpp @@ -3,10 +3,4 @@ #include "../stdafx.h" #include "null_s.h" -static const char *NullSoundStart(const char * const *parm) { return NULL; } -static void NullSoundStop() {} - -const HalSoundDriver _null_sound_driver = { - NullSoundStart, - NullSoundStop, -}; +static FSoundDriver_Null iFSoundDriver_Null; diff --git a/src/sound/null_s.h b/src/sound/null_s.h index 204c58376..2f5c79841 100644 --- a/src/sound/null_s.h +++ b/src/sound/null_s.h @@ -3,8 +3,22 @@ #ifndef SOUND_NULL_H #define SOUND_NULL_H -#include "../hal.h" +#include "sound_driver.hpp" -extern const HalSoundDriver _null_sound_driver; +class SoundDriver_Null: public SoundDriver { +public: + /* virtual */ bool CanProbe() { return false; } + + /* virtual */ const char *Start(const char * const *param) { return NULL; } + + /* virtual */ void Stop() { } +}; + +class FSoundDriver_Null: public SoundDriverFactory<FSoundDriver_Null> { +public: + /* virtual */ const char *GetName() { return "null"; } + /* virtual */ const char *GetDescription() { return "Null Sound Driver"; } + /* virtual */ Driver *CreateInstance() { return new SoundDriver_Null(); } +}; #endif /* SOUND_NULL_H */ diff --git a/src/sound/sdl_s.cpp b/src/sound/sdl_s.cpp index b90336866..f9f40d4e3 100644 --- a/src/sound/sdl_s.cpp +++ b/src/sound/sdl_s.cpp @@ -10,12 +10,14 @@ #include "sdl_s.h" #include <SDL.h> +static FSoundDriver_SDL iFSoundDriver_SDL; + static void CDECL fill_sound_buffer(void *userdata, Uint8 *stream, int len) { MxMixSamples(stream, len / 4); } -static const char *SdlSoundStart(const char * const *parm) +const char *SoundDriver_SDL::Start(const char * const *parm) { SDL_AudioSpec spec; @@ -32,15 +34,10 @@ static const char *SdlSoundStart(const char * const *parm) return NULL; } -static void SdlSoundStop() +void SoundDriver_SDL::Stop() { SDL_CALL SDL_CloseAudio(); SdlClose(SDL_INIT_AUDIO); } -const HalSoundDriver _sdl_sound_driver = { - SdlSoundStart, - SdlSoundStop, -}; - #endif /* WITH_SDL */ diff --git a/src/sound/sdl_s.h b/src/sound/sdl_s.h index a667e137a..97a9036eb 100644 --- a/src/sound/sdl_s.h +++ b/src/sound/sdl_s.h @@ -3,8 +3,22 @@ #ifndef SOUND_SDL_H #define SOUND_SDL_H -#include "../hal.h" +#include "sound_driver.hpp" -extern const HalSoundDriver _sdl_sound_driver; +class SoundDriver_SDL: public SoundDriver { +public: + /* virtual */ bool CanProbe() { return true; } + + /* virtual */ const char *Start(const char * const *param); + + /* virtual */ void Stop(); +}; + +class FSoundDriver_SDL: public SoundDriverFactory<FSoundDriver_SDL> { +public: + /* virtual */ const char *GetName() { return "sdl"; } + /* virtual */ const char *GetDescription() { return "SDL Sound Driver"; } + /* virtual */ Driver *CreateInstance() { return new SoundDriver_SDL(); } +}; #endif /* SOUND_SDL_H */ diff --git a/src/sound/sound_driver.hpp b/src/sound/sound_driver.hpp new file mode 100644 index 000000000..de1a19ac8 --- /dev/null +++ b/src/sound/sound_driver.hpp @@ -0,0 +1,27 @@ +/* $Id$ */ + +#ifndef SOUND_SOUND_DRIVER_HPP +#define SOUND_SOUND_DRIVER_HPP + +#include "../driver.h" + +class SoundDriver: public Driver { +}; + +class SoundDriverFactoryBase: public DriverFactoryBase { +}; + +template <class T> +class SoundDriverFactory: public SoundDriverFactoryBase { +public: + SoundDriverFactory() { this->RegisterDriver(((T *)this)->GetName(), Driver::DT_SOUND); } + + /** + * Get the long, human readable, name for the Driver-class. + */ + const char *GetName(); +}; + +extern SoundDriver *_sound_driver; + +#endif /* SOUND_SOUND_DRIVER_HPP */ diff --git a/src/sound/win32_s.cpp b/src/sound/win32_s.cpp index 61b9ce9eb..578011986 100644 --- a/src/sound/win32_s.cpp +++ b/src/sound/win32_s.cpp @@ -10,6 +10,8 @@ #include <windows.h> #include <mmsystem.h> +static FSoundDriver_Win32 iFSoundDriver_Win32; + static HWAVEOUT _waveout; static WAVEHDR _wave_hdr[2]; static int _bufsize; @@ -48,7 +50,7 @@ static void CALLBACK waveOutProc(HWAVEOUT hwo, UINT uMsg, DWORD_PTR dwInstance, } } -static const char *Win32SoundStart(const char* const* parm) +const char *SoundDriver_Win32::Start(const char* const* parm) { WAVEFORMATEX wfex; wfex.wFormatTag = WAVE_FORMAT_PCM; @@ -69,7 +71,7 @@ static const char *Win32SoundStart(const char* const* parm) return NULL; } -static void Win32SoundStop() +void SoundDriver_Win32::Stop() { HWAVEOUT waveout = _waveout; @@ -79,8 +81,3 @@ static void Win32SoundStop() waveOutUnprepareHeader(waveout, &_wave_hdr[1], sizeof(WAVEHDR)); waveOutClose(waveout); } - -const HalSoundDriver _win32_sound_driver = { - Win32SoundStart, - Win32SoundStop, -}; diff --git a/src/sound/win32_s.h b/src/sound/win32_s.h index b91495edd..10a1f7502 100644 --- a/src/sound/win32_s.h +++ b/src/sound/win32_s.h @@ -3,8 +3,22 @@ #ifndef SOUND_WIN32_H #define SOUND_WIN32_H -#include "../hal.h" +#include "sound_driver.hpp" -extern const HalSoundDriver _win32_sound_driver; +class SoundDriver_Win32: public SoundDriver { +public: + /* virtual */ bool CanProbe() { return true; } + + /* virtual */ const char *Start(const char * const *param); + + /* virtual */ void Stop(); +}; + +class FSoundDriver_Win32: public SoundDriverFactory<FSoundDriver_Win32> { +public: + /* virtual */ const char *GetName() { return "win32"; } + /* virtual */ const char *GetDescription() { return "Win32 Sound Driver"; } + /* virtual */ Driver *CreateInstance() { return new SoundDriver_Win32(); } +}; #endif /* SOUND_WIN32_H */ |