21 #include "../../SDL_internal.h" 23 #if SDL_AUDIO_DRIVER_FUSIONSOUND 36 #include "../SDL_audio_c.h" 39 #include <fusionsound/fusionsound_version.h> 43 #ifdef SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC 50 #if (FUSIONSOUND_MAJOR_VERSION == 1) && (FUSIONSOUND_MINOR_VERSION < 1) 51 typedef DFBResult DirectResult;
55 #define FUSION_BUFFERS (2) 57 #ifdef SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC 59 static const char *fs_library = SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC;
60 static void *fs_handle =
NULL;
62 static DirectResult (*
SDL_NAME(FusionSoundInit)) (
int *argc,
char *(*argv[]));
63 static DirectResult (*
SDL_NAME(FusionSoundCreate)) (IFusionSound **
66 #define SDL_FS_SYM(x) { #x, (void **) (char *) &SDL_NAME(x) } 73 SDL_FS_SYM(FusionSoundInit),
74 SDL_FS_SYM(FusionSoundCreate),
81 UnloadFusionSoundLibrary()
83 if (fs_handle !=
NULL) {
90 LoadFusionSoundLibrary(
void)
94 if (fs_handle ==
NULL) {
96 if (fs_handle !=
NULL) {
99 *fs_functions[
i].func =
101 if (!*fs_functions[i].
func) {
103 UnloadFusionSoundLibrary();
116 UnloadFusionSoundLibrary()
122 LoadFusionSoundLibrary(
void)
131 SDL_FS_WaitDevice(
_THIS)
133 this->hidden->stream->Wait(this->hidden->stream,
134 this->hidden->mixsamples);
138 SDL_FS_PlayDevice(
_THIS)
142 ret = this->hidden->stream->Write(this->hidden->stream,
143 this->hidden->mixbuf,
144 this->hidden->mixsamples);
150 fprintf(stderr,
"Wrote %d bytes of audio data\n", this->hidden->mixlen);
156 SDL_FS_GetDeviceBuf(
_THIS)
158 return (this->hidden->mixbuf);
163 SDL_FS_CloseDevice(
_THIS)
165 if (this->hidden->stream) {
166 this->hidden->stream->Release(this->hidden->stream);
168 if (this->hidden->fs) {
169 this->hidden->fs->Release(this->hidden->fs);
177 SDL_FS_OpenDevice(
_THIS,
void *
handle,
const char *devname,
int iscapture)
181 FSSampleFormat fs_format;
182 FSStreamDescription desc;
188 if (this->hidden ==
NULL) {
195 !
format && test_format;) {
197 fprintf(stderr,
"Trying format 0x%4.4x\n", test_format);
199 switch (test_format) {
206 fs_format = FSSF_S16;
211 fs_format = FSSF_S32;
216 fs_format = FSSF_FLOAT;
230 return SDL_SetError(
"Couldn't find any hardware audio formats");
235 ret =
SDL_NAME(FusionSoundCreate) (&this->hidden->fs);
237 return SDL_SetError(
"Unable to initialize FusionSound: %d", ret);
243 desc.flags = FSSDF_SAMPLERATE | FSSDF_BUFFERSIZE |
244 FSSDF_CHANNELS | FSSDF_SAMPLEFORMAT | FSSDF_PREBUFFER;
246 desc.buffersize = this->
spec.
size * FUSION_BUFFERS;
249 desc.sampleformat = fs_format;
252 this->hidden->fs->CreateStream(this->hidden->fs, &desc,
253 &this->hidden->stream);
255 return SDL_SetError(
"Unable to create FusionSoundStream: %d", ret);
259 desc.flags = FSSDF_SAMPLERATE | FSSDF_BUFFERSIZE |
260 FSSDF_CHANNELS | FSSDF_SAMPLEFORMAT;
261 ret = this->hidden->stream->GetDescription(this->hidden->stream, &desc);
265 desc.buffersize / FUSION_BUFFERS * bytes * desc.channels;
272 this->hidden->mixlen = this->
spec.
size;
274 if (this->hidden->mixbuf ==
NULL) {
277 SDL_memset(this->hidden->mixbuf, this->spec.silence, this->spec.size);
285 SDL_FS_Deinitialize(
void)
287 UnloadFusionSoundLibrary();
294 if (LoadFusionSoundLibrary() < 0) {
301 UnloadFusionSoundLibrary();
303 (
"FusionSound: SDL_FS_init failed (FusionSoundInit: %d)",
323 "fusionsound",
"FusionSound", SDL_FS_Init, 0
SDL_AudioFormat SDL_FirstAudioFormat(SDL_AudioFormat format)
void(* PlayDevice)(_THIS)
void(* WaitDevice)(_THIS)
void SDL_OpenedAudioDeviceDisconnected(SDL_AudioDevice *device)
Uint16 SDL_AudioFormat
Audio format flags.
SDL_AudioFormat SDL_NextAudioFormat(void)
GLuint const GLchar * name
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
int OnlyHasDefaultOutputDevice
EGLImageKHR EGLint EGLint * handle
AudioBootStrap FUSIONSOUND_bootstrap
void(* Deinitialize)(void)
void SDL_CalculateAudioSpec(SDL_AudioSpec *spec)
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
int(* OpenDevice)(_THIS, void *handle, const char *devname, int iscapture)
#define SDL_OutOfMemory()
void(* CloseDevice)(_THIS)
Uint8 *(* GetDeviceBuf)(_THIS)
#define SDL_arraysize(array)
void * SDL_LoadFunction(void *handle, const char *name)