Home | History | Annotate | Download | only in audio
      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