src/audio/SDL_sysaudio.h
author Sam Lantinga
Mon, 08 Dec 2008 00:25:42 +0000
branchSDL-1.2
changeset 4159 a1b03ba2fcd0
parent 3976 8582c6a5ca16
child 4301 5007e6a66814
permissions -rw-r--r--
Updated copyright date
     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_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 */