1 /* 2 SDL - Simple DirectMedia Layer 3 Copyright (C) 1997-2006 Sam Lantinga 4 5 This library is SDL_free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 This library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with this library; if not, write to the Free Software 17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 18 19 Sam Lantinga 20 slouken (at) libsdl.org 21 */ 22 #include "SDL_config.h" 23 24 #ifndef _SDL_sysaudio_h 25 #define _SDL_sysaudio_h 26 27 #include "SDL_mutex.h" 28 #include "SDL_thread.h" 29 30 /* The SDL audio driver */ 31 typedef struct SDL_AudioDevice SDL_AudioDevice; 32 33 /* Define the SDL audio driver structure */ 34 #define _THIS SDL_AudioDevice *_this 35 #ifndef _STATUS 36 #define _STATUS SDL_status *status 37 #endif 38 struct SDL_AudioDevice { 39 /* * * */ 40 /* The name of this audio driver */ 41 const char *name; 42 43 /* * * */ 44 /* The description of this audio driver */ 45 const char *desc; 46 47 /* * * */ 48 /* Public driver functions */ 49 int (*OpenAudio)(_THIS, SDL_AudioSpec *spec); 50 void (*ThreadInit)(_THIS); /* Called by audio thread at start */ 51 void (*WaitAudio)(_THIS); 52 void (*PlayAudio)(_THIS); 53 Uint8 *(*GetAudioBuf)(_THIS); 54 void (*WaitDone)(_THIS); 55 void (*CloseAudio)(_THIS); 56 57 /* * * */ 58 /* Lock / Unlock functions added for the Mac port */ 59 void (*LockAudio)(_THIS); 60 void (*UnlockAudio)(_THIS); 61 62 /* * * */ 63 /* Data common to all devices */ 64 65 /* The current audio specification (shared with audio thread) */ 66 SDL_AudioSpec spec; 67 68 /* An audio conversion block for audio format emulation */ 69 SDL_AudioCVT convert; 70 71 /* Current state flags */ 72 int enabled; 73 int paused; 74 int opened; 75 76 /* Fake audio buffer for when the audio hardware is busy */ 77 Uint8 *fake_stream; 78 79 /* A semaphore for locking the mixing buffers */ 80 SDL_mutex *mixer_lock; 81 82 /* A thread to feed the audio device */ 83 SDL_Thread *thread; 84 Uint32 threadid; 85 86 /* * * */ 87 /* Data private to this driver */ 88 struct SDL_PrivateAudioData *hidden; 89 90 /* * * */ 91 /* The function used to dispose of this structure */ 92 void (*free)(_THIS); 93 }; 94 #undef _THIS 95 96 typedef struct AudioBootStrap { 97 const char *name; 98 const char *desc; 99 int (*available)(void); 100 SDL_AudioDevice *(*create)(int devindex); 101 } AudioBootStrap; 102 103 #if SDL_AUDIO_DRIVER_BSD 104 extern AudioBootStrap BSD_AUDIO_bootstrap; 105 #endif 106 #if SDL_AUDIO_DRIVER_PULSE 107 extern AudioBootStrap PULSE_bootstrap; 108 #endif 109 #if SDL_AUDIO_DRIVER_OSS 110 extern AudioBootStrap DSP_bootstrap; 111 extern AudioBootStrap DMA_bootstrap; 112 #endif 113 #if SDL_AUDIO_DRIVER_ALSA 114 extern AudioBootStrap ALSA_bootstrap; 115 #endif 116 #if SDL_AUDIO_DRIVER_QNXNTO 117 extern AudioBootStrap QNXNTOAUDIO_bootstrap; 118 #endif 119 #if SDL_AUDIO_DRIVER_SUNAUDIO 120 extern AudioBootStrap SUNAUDIO_bootstrap; 121 #endif 122 #if SDL_AUDIO_DRIVER_DMEDIA 123 extern AudioBootStrap DMEDIA_bootstrap; 124 #endif 125 #if SDL_AUDIO_DRIVER_ARTS 126 extern AudioBootStrap ARTS_bootstrap; 127 #endif 128 #if SDL_AUDIO_DRIVER_ESD 129 extern AudioBootStrap ESD_bootstrap; 130 #endif 131 #if SDL_AUDIO_DRIVER_NAS 132 extern AudioBootStrap NAS_bootstrap; 133 #endif 134 #if SDL_AUDIO_DRIVER_DSOUND 135 extern AudioBootStrap DSOUND_bootstrap; 136 #endif 137 #if SDL_AUDIO_DRIVER_WAVEOUT 138 extern AudioBootStrap WAVEOUT_bootstrap; 139 #endif 140 #if SDL_AUDIO_DRIVER_PAUD 141 extern AudioBootStrap Paud_bootstrap; 142 #endif 143 #if SDL_AUDIO_DRIVER_BAUDIO 144 extern AudioBootStrap BAUDIO_bootstrap; 145 #endif 146 #if SDL_AUDIO_DRIVER_COREAUDIO 147 extern AudioBootStrap COREAUDIO_bootstrap; 148 #endif 149 #if SDL_AUDIO_DRIVER_SNDMGR 150 extern AudioBootStrap SNDMGR_bootstrap; 151 #endif 152 #if SDL_AUDIO_DRIVER_MINT 153 extern AudioBootStrap MINTAUDIO_GSXB_bootstrap; 154 extern AudioBootStrap MINTAUDIO_MCSN_bootstrap; 155 extern AudioBootStrap MINTAUDIO_STFA_bootstrap; 156 extern AudioBootStrap MINTAUDIO_XBIOS_bootstrap; 157 extern AudioBootStrap MINTAUDIO_DMA8_bootstrap; 158 #endif 159 #if SDL_AUDIO_DRIVER_DISK 160 extern AudioBootStrap DISKAUD_bootstrap; 161 #endif 162 #if SDL_AUDIO_DRIVER_DUMMY 163 extern AudioBootStrap DUMMYAUD_bootstrap; 164 #endif 165 #if SDL_AUDIO_DRIVER_DC 166 extern AudioBootStrap DCAUD_bootstrap; 167 #endif 168 #if SDL_AUDIO_DRIVER_NDS 169 extern AudioBootStrap NDSAUD_bootstrap; 170 #endif 171 #if SDL_AUDIO_DRIVER_MMEAUDIO 172 extern AudioBootStrap MMEAUDIO_bootstrap; 173 #endif 174 #if SDL_AUDIO_DRIVER_DART 175 extern AudioBootStrap DART_bootstrap; 176 #endif 177 #if SDL_AUDIO_DRIVER_EPOCAUDIO 178 extern AudioBootStrap EPOCAudio_bootstrap; 179 #endif 180 181 /* This is the current audio device */ 182 extern SDL_AudioDevice *current_audio; 183 184 #endif /* _SDL_sysaudio_h */ 185