Mercurial > sdl-ios-xcode
comparison src/audio/SDL_audio.c @ 1402:d910939febfa
Use consistent identifiers for the various platforms we support.
Make sure every source file includes SDL_config.h, so the proper system
headers are chosen.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Tue, 21 Feb 2006 08:46:50 +0000 |
parents | c0a74f199ecf |
children | 39ca9a4b22f3 |
comparison
equal
deleted
inserted
replaced
1401:1819fd069e89 | 1402:d910939febfa |
---|---|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | 17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
18 | 18 |
19 Sam Lantinga | 19 Sam Lantinga |
20 slouken@libsdl.org | 20 slouken@libsdl.org |
21 */ | 21 */ |
22 #include "SDL_config.h" | |
22 | 23 |
23 /* Allow access to a raw mixing buffer */ | 24 /* Allow access to a raw mixing buffer */ |
24 | 25 |
25 #include "SDL.h" | 26 #include "SDL.h" |
26 #include "SDL_audio_c.h" | 27 #include "SDL_audio_c.h" |
95 &DISKAUD_bootstrap, | 96 &DISKAUD_bootstrap, |
96 #endif | 97 #endif |
97 #if SDL_AUDIO_DRIVER_DC | 98 #if SDL_AUDIO_DRIVER_DC |
98 &DCAUD_bootstrap, | 99 &DCAUD_bootstrap, |
99 #endif | 100 #endif |
100 #if SDL_AUDIO_DRIVER_DRENDERER | |
101 &DRENDERER_bootstrap, | |
102 #endif | |
103 #if SDL_AUDIO_DRIVER_MMEAUDIO | 101 #if SDL_AUDIO_DRIVER_MMEAUDIO |
104 &MMEAUDIO_bootstrap, | 102 &MMEAUDIO_bootstrap, |
105 #endif | 103 #endif |
106 #if SDL_AUDIO_DRIVER_DART | 104 #if SDL_AUDIO_DRIVER_DART |
107 &DART_bootstrap, | 105 &DART_bootstrap, |
112 | 110 |
113 /* Various local functions */ | 111 /* Various local functions */ |
114 int SDL_AudioInit(const char *driver_name); | 112 int SDL_AudioInit(const char *driver_name); |
115 void SDL_AudioQuit(void); | 113 void SDL_AudioQuit(void); |
116 | 114 |
117 #ifdef ENABLE_AHI | 115 #if SDL_AUDIO_DRIVER_AHI |
118 static int audio_configured = 0; | 116 static int audio_configured = 0; |
119 #endif | 117 #endif |
120 | 118 |
121 /* The general mixing thread function */ | 119 /* The general mixing thread function */ |
122 int SDL_RunAudio(void *audiop) | 120 int SDL_RunAudio(void *audiop) |
125 Uint8 *stream; | 123 Uint8 *stream; |
126 int stream_len; | 124 int stream_len; |
127 void *udata; | 125 void *udata; |
128 void (*fill)(void *userdata,Uint8 *stream, int len); | 126 void (*fill)(void *userdata,Uint8 *stream, int len); |
129 int silence; | 127 int silence; |
130 #ifdef ENABLE_AHI | 128 #if SDL_AUDIO_DRIVER_AHI |
131 int started = 0; | 129 int started = 0; |
132 | 130 |
133 /* AmigaOS NEEDS that the audio driver is opened in the thread that uses it! */ | 131 /* AmigaOS NEEDS that the audio driver is opened in the thread that uses it! */ |
134 | 132 |
135 D(bug("Task audio started audio struct:<%lx>...\n",audiop)); | 133 D(bug("Task audio started audio struct:<%lx>...\n",audiop)); |
151 | 149 |
152 /* Set up the mixing function */ | 150 /* Set up the mixing function */ |
153 fill = audio->spec.callback; | 151 fill = audio->spec.callback; |
154 udata = audio->spec.userdata; | 152 udata = audio->spec.userdata; |
155 | 153 |
156 #ifdef ENABLE_AHI | 154 #if SDL_AUDIO_DRIVER_AHI |
157 audio_configured = 1; | 155 audio_configured = 1; |
158 | 156 |
159 D(bug("Audio configured... Checking for conversion\n")); | 157 D(bug("Audio configured... Checking for conversion\n")); |
160 SDL_mutexP(audio->mixer_lock); | 158 SDL_mutexP(audio->mixer_lock); |
161 D(bug("Semaphore obtained...\n")); | 159 D(bug("Semaphore obtained...\n")); |
172 silence = audio->spec.silence; | 170 silence = audio->spec.silence; |
173 stream_len = audio->spec.size; | 171 stream_len = audio->spec.size; |
174 } | 172 } |
175 stream = audio->fake_stream; | 173 stream = audio->fake_stream; |
176 | 174 |
177 #ifdef ENABLE_AHI | 175 #if SDL_AUDIO_DRIVER_AHI |
178 SDL_mutexV(audio->mixer_lock); | 176 SDL_mutexV(audio->mixer_lock); |
179 D(bug("Entering audio loop...\n")); | 177 D(bug("Entering audio loop...\n")); |
180 #endif | 178 #endif |
181 | 179 |
182 #ifdef __OS2__ | 180 #ifdef __OS2__ |
195 | 193 |
196 /* Wait for new current buffer to finish playing */ | 194 /* Wait for new current buffer to finish playing */ |
197 if ( stream == audio->fake_stream ) { | 195 if ( stream == audio->fake_stream ) { |
198 SDL_Delay((audio->spec.samples*1000)/audio->spec.freq); | 196 SDL_Delay((audio->spec.samples*1000)/audio->spec.freq); |
199 } else { | 197 } else { |
200 #ifdef ENABLE_AHI | 198 #if SDL_AUDIO_DRIVER_AHI |
201 if ( started > 1 ) | 199 if ( started > 1 ) |
202 #endif | 200 #endif |
203 audio->WaitAudio(audio); | 201 audio->WaitAudio(audio); |
204 } | 202 } |
205 | 203 |
236 } | 234 } |
237 | 235 |
238 /* Ready current buffer for play and change current buffer */ | 236 /* Ready current buffer for play and change current buffer */ |
239 if ( stream != audio->fake_stream ) { | 237 if ( stream != audio->fake_stream ) { |
240 audio->PlayAudio(audio); | 238 audio->PlayAudio(audio); |
241 #ifdef ENABLE_AHI | 239 #if SDL_AUDIO_DRIVER_AHI |
242 /* AmigaOS don't have to wait the first time audio is played! */ | 240 /* AmigaOS don't have to wait the first time audio is played! */ |
243 started++; | 241 started++; |
244 #endif | 242 #endif |
245 } | 243 } |
246 } | 244 } |
247 /* Wait for the audio to drain.. */ | 245 /* Wait for the audio to drain.. */ |
248 if ( audio->WaitDone ) { | 246 if ( audio->WaitDone ) { |
249 audio->WaitDone(audio); | 247 audio->WaitDone(audio); |
250 } | 248 } |
251 | 249 |
252 #ifdef ENABLE_AHI | 250 #if SDL_AUDIO_DRIVER_AHI |
253 D(bug("WaitAudio...Done\n")); | 251 D(bug("WaitAudio...Done\n")); |
254 | 252 |
255 audio->CloseAudio(audio); | 253 audio->CloseAudio(audio); |
256 | 254 |
257 D(bug("CloseAudio..Done, subtask exiting...\n")); | 255 D(bug("CloseAudio..Done, subtask exiting...\n")); |
411 default: | 409 default: |
412 SDL_SetError("1 (mono) and 2 (stereo) channels supported"); | 410 SDL_SetError("1 (mono) and 2 (stereo) channels supported"); |
413 return(-1); | 411 return(-1); |
414 } | 412 } |
415 | 413 |
416 #if defined(macintosh) || (defined(__riscos__) && SDL_THREADS_DISABLED) | 414 #if defined(__MACOS__) || (defined(__RISCOS__) && SDL_THREADS_DISABLED) |
417 /* FIXME: Need to implement PPC interrupt asm for SDL_LockAudio() */ | 415 /* FIXME: Need to implement PPC interrupt asm for SDL_LockAudio() */ |
418 #else | 416 #else |
419 #if defined(__MINT__) && SDL_THREADS_DISABLED | 417 #if defined(__MINT__) && SDL_THREADS_DISABLED |
420 /* Uses interrupt driven audio, without thread */ | 418 /* Uses interrupt driven audio, without thread */ |
421 #else | 419 #else |
425 SDL_SetError("Couldn't create mixer lock"); | 423 SDL_SetError("Couldn't create mixer lock"); |
426 SDL_CloseAudio(); | 424 SDL_CloseAudio(); |
427 return(-1); | 425 return(-1); |
428 } | 426 } |
429 #endif /* __MINT__ */ | 427 #endif /* __MINT__ */ |
430 #endif /* macintosh */ | 428 #endif /* __MACOS__ */ |
431 | 429 |
432 /* Calculate the silence and size of the audio specification */ | 430 /* Calculate the silence and size of the audio specification */ |
433 SDL_CalculateAudioSpec(desired); | 431 SDL_CalculateAudioSpec(desired); |
434 | 432 |
435 /* Open the audio subsystem */ | 433 /* Open the audio subsystem */ |
436 SDL_memcpy(&audio->spec, desired, sizeof(audio->spec)); | 434 SDL_memcpy(&audio->spec, desired, sizeof(audio->spec)); |
437 audio->convert.needed = 0; | 435 audio->convert.needed = 0; |
438 audio->enabled = 1; | 436 audio->enabled = 1; |
439 audio->paused = 1; | 437 audio->paused = 1; |
440 | 438 |
441 #ifndef ENABLE_AHI | 439 #if SDL_AUDIO_DRIVER_AHI |
442 | 440 |
443 /* AmigaOS opens audio inside the main loop */ | 441 /* AmigaOS opens audio inside the main loop */ |
444 audio->opened = audio->OpenAudio(audio, &audio->spec)+1; | 442 audio->opened = audio->OpenAudio(audio, &audio->spec)+1; |
445 | 443 |
446 if ( ! audio->opened ) { | 444 if ( ! audio->opened ) { |
448 return(-1); | 446 return(-1); |
449 } | 447 } |
450 #else | 448 #else |
451 D(bug("Locking semaphore...")); | 449 D(bug("Locking semaphore...")); |
452 SDL_mutexP(audio->mixer_lock); | 450 SDL_mutexP(audio->mixer_lock); |
453 | 451 #endif |
454 #if (defined(_WIN32) && !defined(_WIN32_WCE)) && !defined(HAVE_LIBC) | 452 |
453 #if (defined(__WIN32__) && !defined(_WIN32_WCE)) && !defined(HAVE_LIBC) | |
455 #undef SDL_CreateThread | 454 #undef SDL_CreateThread |
456 audio->thread = SDL_CreateThread(SDL_RunAudio, audio, NULL, NULL); | 455 audio->thread = SDL_CreateThread(SDL_RunAudio, audio, NULL, NULL); |
457 #else | 456 #else |
458 audio->thread = SDL_CreateThread(SDL_RunAudio, audio); | 457 audio->thread = SDL_CreateThread(SDL_RunAudio, audio); |
459 #endif | 458 #endif |
464 SDL_CloseAudio(); | 463 SDL_CloseAudio(); |
465 SDL_SetError("Couldn't create audio thread"); | 464 SDL_SetError("Couldn't create audio thread"); |
466 return(-1); | 465 return(-1); |
467 } | 466 } |
468 | 467 |
468 #if SDL_AUDIO_DRIVER_AHI | |
469 while(!audio_configured) | 469 while(!audio_configured) |
470 SDL_Delay(100); | 470 SDL_Delay(100); |
471 #endif | 471 #endif |
472 | 472 |
473 /* If the audio driver changes the buffer size, accept it */ | 473 /* If the audio driver changes the buffer size, accept it */ |
509 return(-1); | 509 return(-1); |
510 } | 510 } |
511 } | 511 } |
512 } | 512 } |
513 | 513 |
514 #ifndef ENABLE_AHI | 514 #if SDL_AUDIO_DRIVER_AHI |
515 /* Start the audio thread if necessary */ | 515 /* Start the audio thread if necessary */ |
516 switch (audio->opened) { | 516 switch (audio->opened) { |
517 case 1: | 517 case 1: |
518 /* Start the audio thread */ | 518 /* Start the audio thread */ |
519 #if (defined(_WIN32) && !defined(_WIN32_WCE)) && !defined(HAVE_LIBC) | 519 #if (defined(__WIN32__) && !defined(_WIN32_WCE)) && !defined(HAVE_LIBC) |
520 #undef SDL_CreateThread | 520 #undef SDL_CreateThread |
521 audio->thread = SDL_CreateThread(SDL_RunAudio, audio, NULL, NULL); | 521 audio->thread = SDL_CreateThread(SDL_RunAudio, audio, NULL, NULL); |
522 #else | 522 #else |
523 audio->thread = SDL_CreateThread(SDL_RunAudio, audio); | 523 audio->thread = SDL_CreateThread(SDL_RunAudio, audio); |
524 #endif | 524 #endif |
609 } | 609 } |
610 if ( audio->convert.needed ) { | 610 if ( audio->convert.needed ) { |
611 SDL_FreeAudioMem(audio->convert.buf); | 611 SDL_FreeAudioMem(audio->convert.buf); |
612 | 612 |
613 } | 613 } |
614 #ifndef ENABLE_AHI | 614 #if SDL_AUDIO_DRIVER_AHI |
615 if ( audio->opened ) { | 615 if ( audio->opened ) { |
616 audio->CloseAudio(audio); | 616 audio->CloseAudio(audio); |
617 audio->opened = 0; | 617 audio->opened = 0; |
618 } | 618 } |
619 #endif | 619 #endif |