e14743d1 |
1 | /* |
2 | SDL - Simple DirectMedia Layer |
3 | Copyright (C) 1997-2009 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@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_ALSA |
110 | extern AudioBootStrap ALSA_bootstrap; |
111 | #endif |
112 | #if SDL_AUDIO_DRIVER_OSS |
113 | extern AudioBootStrap DSP_bootstrap; |
114 | extern AudioBootStrap DMA_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 */ |