comparison src/audio/SDL_audio.c @ 1668:4da1ee79c9af SDL-1.3

more tweaking indent options
author Sam Lantinga <slouken@libsdl.org>
date Mon, 29 May 2006 04:04:35 +0000
parents 782fd950bd46
children
comparison
equal deleted inserted replaced
1667:1fddae038bc8 1668:4da1ee79c9af
110 NULL 110 NULL
111 }; 111 };
112 SDL_AudioDevice *current_audio = NULL; 112 SDL_AudioDevice *current_audio = NULL;
113 113
114 /* Various local functions */ 114 /* Various local functions */
115 int SDL_AudioInit (const char *driver_name); 115 int SDL_AudioInit(const char *driver_name);
116 void SDL_AudioQuit (void); 116 void SDL_AudioQuit(void);
117 117
118 #if SDL_AUDIO_DRIVER_AHI 118 #if SDL_AUDIO_DRIVER_AHI
119 static int audio_configured = 0; 119 static int audio_configured = 0;
120 #endif 120 #endif
121 121
122 /* The general mixing thread function */ 122 /* The general mixing thread function */
123 int SDLCALL 123 int SDLCALL
124 SDL_RunAudio (void *audiop) 124 SDL_RunAudio(void *audiop)
125 { 125 {
126 SDL_AudioDevice *audio = (SDL_AudioDevice *) audiop; 126 SDL_AudioDevice *audio = (SDL_AudioDevice *) audiop;
127 Uint8 *stream; 127 Uint8 *stream;
128 int stream_len; 128 int stream_len;
129 void *udata; 129 void *udata;
132 #if SDL_AUDIO_DRIVER_AHI 132 #if SDL_AUDIO_DRIVER_AHI
133 int started = 0; 133 int started = 0;
134 134
135 /* AmigaOS NEEDS that the audio driver is opened in the thread that uses it! */ 135 /* AmigaOS NEEDS that the audio driver is opened in the thread that uses it! */
136 136
137 D (bug ("Task audio started audio struct:<%lx>...\n", audiop)); 137 D(bug("Task audio started audio struct:<%lx>...\n", audiop));
138 138
139 D (bug ("Before Openaudio...")); 139 D(bug("Before Openaudio..."));
140 if (audio->OpenAudio (audio, &audio->spec) == -1) { 140 if (audio->OpenAudio(audio, &audio->spec) == -1) {
141 D (bug ("Open audio failed...\n")); 141 D(bug("Open audio failed...\n"));
142 return (-1); 142 return (-1);
143 } 143 }
144 D (bug ("OpenAudio...OK\n")); 144 D(bug("OpenAudio...OK\n"));
145 #endif 145 #endif
146 146
147 /* Perform any thread setup */ 147 /* Perform any thread setup */
148 if (audio->ThreadInit) { 148 if (audio->ThreadInit) {
149 audio->ThreadInit (audio); 149 audio->ThreadInit(audio);
150 } 150 }
151 audio->threadid = SDL_ThreadID (); 151 audio->threadid = SDL_ThreadID();
152 152
153 /* Set up the mixing function */ 153 /* Set up the mixing function */
154 fill = audio->spec.callback; 154 fill = audio->spec.callback;
155 udata = audio->spec.userdata; 155 udata = audio->spec.userdata;
156 156
157 #if SDL_AUDIO_DRIVER_AHI 157 #if SDL_AUDIO_DRIVER_AHI
158 audio_configured = 1; 158 audio_configured = 1;
159 159
160 D (bug ("Audio configured... Checking for conversion\n")); 160 D(bug("Audio configured... Checking for conversion\n"));
161 SDL_mutexP (audio->mixer_lock); 161 SDL_mutexP(audio->mixer_lock);
162 D (bug ("Semaphore obtained...\n")); 162 D(bug("Semaphore obtained...\n"));
163 #endif 163 #endif
164 164
165 if (audio->convert.needed) { 165 if (audio->convert.needed) {
166 if (audio->convert.src_format == AUDIO_U8) { 166 if (audio->convert.src_format == AUDIO_U8) {
167 silence = 0x80; 167 silence = 0x80;
173 silence = audio->spec.silence; 173 silence = audio->spec.silence;
174 stream_len = audio->spec.size; 174 stream_len = audio->spec.size;
175 } 175 }
176 176
177 #if SDL_AUDIO_DRIVER_AHI 177 #if SDL_AUDIO_DRIVER_AHI
178 SDL_mutexV (audio->mixer_lock); 178 SDL_mutexV(audio->mixer_lock);
179 D (bug ("Entering audio loop...\n")); 179 D(bug("Entering audio loop...\n"));
180 #endif 180 #endif
181 181
182 #ifdef __OS2__ 182 #ifdef __OS2__
183 /* Increase the priority of this thread to make sure that 183 /* Increase the priority of this thread to make sure that
184 the audio will be continuous all the time! */ 184 the audio will be continuous all the time! */
185 #ifdef USE_DOSSETPRIORITY 185 #ifdef USE_DOSSETPRIORITY
186 if (SDL_getenv ("SDL_USE_TIMECRITICAL_AUDIO")) { 186 if (SDL_getenv("SDL_USE_TIMECRITICAL_AUDIO")) {
187 #ifdef DEBUG_BUILD 187 #ifdef DEBUG_BUILD
188 printf 188 printf
189 ("[SDL_RunAudio] : Setting priority to TimeCritical+0! (TID%d)\n", 189 ("[SDL_RunAudio] : Setting priority to TimeCritical+0! (TID%d)\n",
190 SDL_ThreadID ()); 190 SDL_ThreadID());
191 #endif 191 #endif
192 DosSetPriority (PRTYS_THREAD, PRTYC_TIMECRITICAL, 0, 0); 192 DosSetPriority(PRTYS_THREAD, PRTYC_TIMECRITICAL, 0, 0);
193 } else { 193 } else {
194 #ifdef DEBUG_BUILD 194 #ifdef DEBUG_BUILD
195 printf 195 printf
196 ("[SDL_RunAudio] : Setting priority to ForegroundServer+0! (TID%d)\n", 196 ("[SDL_RunAudio] : Setting priority to ForegroundServer+0! (TID%d)\n",
197 SDL_ThreadID ()); 197 SDL_ThreadID());
198 #endif 198 #endif
199 DosSetPriority (PRTYS_THREAD, PRTYC_FOREGROUNDSERVER, 0, 0); 199 DosSetPriority(PRTYS_THREAD, PRTYC_FOREGROUNDSERVER, 0, 0);
200 } 200 }
201 #endif 201 #endif
202 #endif 202 #endif
203 203
204 /* Loop, filling the audio buffers */ 204 /* Loop, filling the audio buffers */
210 stream = audio->convert.buf; 210 stream = audio->convert.buf;
211 } else { 211 } else {
212 continue; 212 continue;
213 } 213 }
214 } else { 214 } else {
215 stream = audio->GetAudioBuf (audio); 215 stream = audio->GetAudioBuf(audio);
216 if (stream == NULL) { 216 if (stream == NULL) {
217 stream = audio->fake_stream; 217 stream = audio->fake_stream;
218 } 218 }
219 } 219 }
220 SDL_memset (stream, silence, stream_len); 220 SDL_memset(stream, silence, stream_len);
221 221
222 if (!audio->paused) { 222 if (!audio->paused) {
223 SDL_mutexP (audio->mixer_lock); 223 SDL_mutexP(audio->mixer_lock);
224 (*fill) (udata, stream, stream_len); 224 (*fill) (udata, stream, stream_len);
225 SDL_mutexV (audio->mixer_lock); 225 SDL_mutexV(audio->mixer_lock);
226 } 226 }
227 227
228 /* Convert the audio if necessary */ 228 /* Convert the audio if necessary */
229 if (audio->convert.needed) { 229 if (audio->convert.needed) {
230 SDL_ConvertAudio (&audio->convert); 230 SDL_ConvertAudio(&audio->convert);
231 stream = audio->GetAudioBuf (audio); 231 stream = audio->GetAudioBuf(audio);
232 if (stream == NULL) { 232 if (stream == NULL) {
233 stream = audio->fake_stream; 233 stream = audio->fake_stream;
234 } 234 }
235 SDL_memcpy (stream, audio->convert.buf, audio->convert.len_cvt); 235 SDL_memcpy(stream, audio->convert.buf, audio->convert.len_cvt);
236 } 236 }
237 237
238 /* Ready current buffer for play and change current buffer */ 238 /* Ready current buffer for play and change current buffer */
239 if (stream != audio->fake_stream) { 239 if (stream != audio->fake_stream) {
240 audio->PlayAudio (audio); 240 audio->PlayAudio(audio);
241 } 241 }
242 242
243 /* Wait for an audio buffer to become available */ 243 /* Wait for an audio buffer to become available */
244 if (stream == audio->fake_stream) { 244 if (stream == audio->fake_stream) {
245 SDL_Delay ((audio->spec.samples * 1000) / audio->spec.freq); 245 SDL_Delay((audio->spec.samples * 1000) / audio->spec.freq);
246 } else { 246 } else {
247 audio->WaitAudio (audio); 247 audio->WaitAudio(audio);
248 } 248 }
249 } 249 }
250 250
251 /* Wait for the audio to drain.. */ 251 /* Wait for the audio to drain.. */
252 if (audio->WaitDone) { 252 if (audio->WaitDone) {
253 audio->WaitDone (audio); 253 audio->WaitDone(audio);
254 } 254 }
255 #if SDL_AUDIO_DRIVER_AHI 255 #if SDL_AUDIO_DRIVER_AHI
256 D (bug ("WaitAudio...Done\n")); 256 D(bug("WaitAudio...Done\n"));
257 257
258 audio->CloseAudio (audio); 258 audio->CloseAudio(audio);
259 259
260 D (bug ("CloseAudio..Done, subtask exiting...\n")); 260 D(bug("CloseAudio..Done, subtask exiting...\n"));
261 audio_configured = 0; 261 audio_configured = 0;
262 #endif 262 #endif
263 #ifdef __OS2__ 263 #ifdef __OS2__
264 #ifdef DEBUG_BUILD 264 #ifdef DEBUG_BUILD
265 printf ("[SDL_RunAudio] : Task exiting. (TID%d)\n", SDL_ThreadID ()); 265 printf("[SDL_RunAudio] : Task exiting. (TID%d)\n", SDL_ThreadID());
266 #endif 266 #endif
267 #endif 267 #endif
268 return (0); 268 return (0);
269 } 269 }
270 270
271 static void 271 static void
272 SDL_LockAudio_Default (SDL_AudioDevice * audio) 272 SDL_LockAudio_Default(SDL_AudioDevice * audio)
273 { 273 {
274 if (audio->thread && (SDL_ThreadID () == audio->threadid)) { 274 if (audio->thread && (SDL_ThreadID() == audio->threadid)) {
275 return; 275 return;
276 } 276 }
277 SDL_mutexP (audio->mixer_lock); 277 SDL_mutexP(audio->mixer_lock);
278 } 278 }
279 279
280 static void 280 static void
281 SDL_UnlockAudio_Default (SDL_AudioDevice * audio) 281 SDL_UnlockAudio_Default(SDL_AudioDevice * audio)
282 { 282 {
283 if (audio->thread && (SDL_ThreadID () == audio->threadid)) { 283 if (audio->thread && (SDL_ThreadID() == audio->threadid)) {
284 return; 284 return;
285 } 285 }
286 SDL_mutexV (audio->mixer_lock); 286 SDL_mutexV(audio->mixer_lock);
287 } 287 }
288 288
289 static Uint16 289 static Uint16
290 SDL_ParseAudioFormat (const char *string) 290 SDL_ParseAudioFormat(const char *string)
291 { 291 {
292 Uint16 format = 0; 292 Uint16 format = 0;
293 293
294 switch (*string) { 294 switch (*string) {
295 case 'U': 295 case 'U':
301 format |= 0x8000; 301 format |= 0x8000;
302 break; 302 break;
303 default: 303 default:
304 return 0; 304 return 0;
305 } 305 }
306 switch (SDL_atoi (string)) { 306 switch (SDL_atoi(string)) {
307 case 8: 307 case 8:
308 string += 1; 308 string += 1;
309 format |= 8; 309 format |= 8;
310 break; 310 break;
311 case 16: 311 case 16:
312 string += 2; 312 string += 2;
313 format |= 16; 313 format |= 16;
314 if (SDL_strcmp (string, "LSB") == 0 314 if (SDL_strcmp(string, "LSB") == 0
315 #if SDL_BYTEORDER == SDL_LIL_ENDIAN 315 #if SDL_BYTEORDER == SDL_LIL_ENDIAN
316 || SDL_strcmp (string, "SYS") == 0 316 || SDL_strcmp(string, "SYS") == 0
317 #endif 317 #endif
318 ) { 318 ) {
319 format |= 0x0000; 319 format |= 0x0000;
320 } 320 }
321 if (SDL_strcmp (string, "MSB") == 0 321 if (SDL_strcmp(string, "MSB") == 0
322 #if SDL_BYTEORDER == SDL_BIG_ENDIAN 322 #if SDL_BYTEORDER == SDL_BIG_ENDIAN
323 || SDL_strcmp (string, "SYS") == 0 323 || SDL_strcmp(string, "SYS") == 0
324 #endif 324 #endif
325 ) { 325 ) {
326 format |= 0x1000; 326 format |= 0x1000;
327 } 327 }
328 break; 328 break;
331 } 331 }
332 return format; 332 return format;
333 } 333 }
334 334
335 int 335 int
336 SDL_GetNumAudioDrivers (void) 336 SDL_GetNumAudioDrivers(void)
337 { 337 {
338 return (SDL_arraysize (bootstrap) - 1); 338 return (SDL_arraysize(bootstrap) - 1);
339 } 339 }
340 340
341 const char * 341 const char *
342 SDL_GetAudioDriver (int index) 342 SDL_GetAudioDriver(int index)
343 { 343 {
344 if (index >= 0 && index < SDL_GetNumAudioDrivers ()) { 344 if (index >= 0 && index < SDL_GetNumAudioDrivers()) {
345 return (bootstrap[index]->name); 345 return (bootstrap[index]->name);
346 } 346 }
347 return (NULL); 347 return (NULL);
348 } 348 }
349 349
350 int 350 int
351 SDL_AudioInit (const char *driver_name) 351 SDL_AudioInit(const char *driver_name)
352 { 352 {
353 SDL_AudioDevice *audio; 353 SDL_AudioDevice *audio;
354 int i = 0, idx; 354 int i = 0, idx;
355 355
356 /* Check to make sure we don't overwrite 'current_audio' */ 356 /* Check to make sure we don't overwrite 'current_audio' */
357 if (current_audio != NULL) { 357 if (current_audio != NULL) {
358 SDL_AudioQuit (); 358 SDL_AudioQuit();
359 } 359 }
360 360
361 /* Select the proper audio driver */ 361 /* Select the proper audio driver */
362 audio = NULL; 362 audio = NULL;
363 idx = 0; 363 idx = 0;
364 #if SDL_AUDIO_DRIVER_ESD 364 #if SDL_AUDIO_DRIVER_ESD
365 if ((driver_name == NULL) && (SDL_getenv ("ESPEAKER") != NULL)) { 365 if ((driver_name == NULL) && (SDL_getenv("ESPEAKER") != NULL)) {
366 /* Ahem, we know that if ESPEAKER is set, user probably wants 366 /* Ahem, we know that if ESPEAKER is set, user probably wants
367 to use ESD, but don't start it if it's not already running. 367 to use ESD, but don't start it if it's not already running.
368 This probably isn't the place to do this, but... Shh! :) 368 This probably isn't the place to do this, but... Shh! :)
369 */ 369 */
370 for (i = 0; bootstrap[i]; ++i) { 370 for (i = 0; bootstrap[i]; ++i) {
371 if (SDL_strcmp (bootstrap[i]->name, "esd") == 0) { 371 if (SDL_strcmp(bootstrap[i]->name, "esd") == 0) {
372 #ifdef HAVE_PUTENV 372 #ifdef HAVE_PUTENV
373 const char *esd_no_spawn; 373 const char *esd_no_spawn;
374 374
375 /* Don't start ESD if it's not running */ 375 /* Don't start ESD if it's not running */
376 esd_no_spawn = getenv ("ESD_NO_SPAWN"); 376 esd_no_spawn = getenv("ESD_NO_SPAWN");
377 if (esd_no_spawn == NULL) { 377 if (esd_no_spawn == NULL) {
378 putenv ("ESD_NO_SPAWN=1"); 378 putenv("ESD_NO_SPAWN=1");
379 } 379 }
380 #endif 380 #endif
381 if (bootstrap[i]->available ()) { 381 if (bootstrap[i]->available()) {
382 audio = bootstrap[i]->create (0); 382 audio = bootstrap[i]->create(0);
383 break; 383 break;
384 } 384 }
385 #ifdef HAVE_UNSETENV 385 #ifdef HAVE_UNSETENV
386 if (esd_no_spawn == NULL) { 386 if (esd_no_spawn == NULL) {
387 unsetenv ("ESD_NO_SPAWN"); 387 unsetenv("ESD_NO_SPAWN");
388 } 388 }
389 #endif 389 #endif
390 } 390 }
391 } 391 }
392 } 392 }
393 #endif /* SDL_AUDIO_DRIVER_ESD */ 393 #endif /* SDL_AUDIO_DRIVER_ESD */
394 if (audio == NULL) { 394 if (audio == NULL) {
395 if (driver_name != NULL) { 395 if (driver_name != NULL) {
396 #if 0 /* This will be replaced with a better driver selection API */ 396 #if 0 /* This will be replaced with a better driver selection API */
397 if (SDL_strrchr (driver_name, ':') != NULL) { 397 if (SDL_strrchr(driver_name, ':') != NULL) {
398 idx = atoi (SDL_strrchr (driver_name, ':') + 1); 398 idx = atoi(SDL_strrchr(driver_name, ':') + 1);
399 } 399 }
400 #endif 400 #endif
401 for (i = 0; bootstrap[i]; ++i) { 401 for (i = 0; bootstrap[i]; ++i) {
402 if (SDL_strncmp (bootstrap[i]->name, driver_name, 402 if (SDL_strncmp(bootstrap[i]->name, driver_name,
403 SDL_strlen (bootstrap[i]->name)) == 0) { 403 SDL_strlen(bootstrap[i]->name)) == 0) {
404 if (bootstrap[i]->available ()) { 404 if (bootstrap[i]->available()) {
405 audio = bootstrap[i]->create (idx); 405 audio = bootstrap[i]->create(idx);
406 } 406 }
407 break; 407 break;
408 } 408 }
409 } 409 }
410 } else { 410 } else {
411 for (i = 0; bootstrap[i]; ++i) { 411 for (i = 0; bootstrap[i]; ++i) {
412 if (bootstrap[i]->available ()) { 412 if (bootstrap[i]->available()) {
413 audio = bootstrap[i]->create (idx); 413 audio = bootstrap[i]->create(idx);
414 if (audio != NULL) { 414 if (audio != NULL) {
415 break; 415 break;
416 } 416 }
417 } 417 }
418 } 418 }
419 } 419 }
420 if (audio == NULL) { 420 if (audio == NULL) {
421 if (driver_name) { 421 if (driver_name) {
422 SDL_SetError ("%s not available", driver_name); 422 SDL_SetError("%s not available", driver_name);
423 } else { 423 } else {
424 SDL_SetError ("No available audio device"); 424 SDL_SetError("No available audio device");
425 } 425 }
426 #if 0 /* Don't fail SDL_Init() if audio isn't available. 426 #if 0 /* Don't fail SDL_Init() if audio isn't available.
427 SDL_OpenAudio() will handle it at that point. *sigh* 427 SDL_OpenAudio() will handle it at that point. *sigh*
428 */ 428 */
429 return (-1); 429 return (-1);
443 443
444 /* 444 /*
445 * Get the current audio driver name 445 * Get the current audio driver name
446 */ 446 */
447 const char * 447 const char *
448 SDL_GetCurrentAudioDriver () 448 SDL_GetCurrentAudioDriver()
449 { 449 {
450 if (current_audio) { 450 if (current_audio) {
451 return current_audio->name; 451 return current_audio->name;
452 } 452 }
453 return (NULL); 453 return (NULL);
454 } 454 }
455 455
456 int 456 int
457 SDL_OpenAudio (SDL_AudioSpec * desired, SDL_AudioSpec * obtained) 457 SDL_OpenAudio(SDL_AudioSpec * desired, SDL_AudioSpec * obtained)
458 { 458 {
459 SDL_AudioDevice *audio; 459 SDL_AudioDevice *audio;
460 const char *env; 460 const char *env;
461 461
462 /* Start up the audio driver, if necessary */ 462 /* Start up the audio driver, if necessary */
463 if (!current_audio) { 463 if (!current_audio) {
464 if ((SDL_InitSubSystem (SDL_INIT_AUDIO) < 0) || 464 if ((SDL_InitSubSystem(SDL_INIT_AUDIO) < 0) ||
465 (current_audio == NULL)) { 465 (current_audio == NULL)) {
466 return (-1); 466 return (-1);
467 } 467 }
468 } 468 }
469 audio = current_audio; 469 audio = current_audio;
470 470
471 if (audio->opened) { 471 if (audio->opened) {
472 SDL_SetError ("Audio device is already opened"); 472 SDL_SetError("Audio device is already opened");
473 return (-1); 473 return (-1);
474 } 474 }
475 475
476 /* Verify some parameters */ 476 /* Verify some parameters */
477 if (desired->freq == 0) { 477 if (desired->freq == 0) {
478 env = SDL_getenv ("SDL_AUDIO_FREQUENCY"); 478 env = SDL_getenv("SDL_AUDIO_FREQUENCY");
479 if (env) { 479 if (env) {
480 desired->freq = SDL_atoi (env); 480 desired->freq = SDL_atoi(env);
481 } 481 }
482 } 482 }
483 if (desired->freq == 0) { 483 if (desired->freq == 0) {
484 /* Pick some default audio frequency */ 484 /* Pick some default audio frequency */
485 desired->freq = 22050; 485 desired->freq = 22050;
486 } 486 }
487 if (desired->format == 0) { 487 if (desired->format == 0) {
488 env = SDL_getenv ("SDL_AUDIO_FORMAT"); 488 env = SDL_getenv("SDL_AUDIO_FORMAT");
489 if (env) { 489 if (env) {
490 desired->format = SDL_ParseAudioFormat (env); 490 desired->format = SDL_ParseAudioFormat(env);
491 } 491 }
492 } 492 }
493 if (desired->format == 0) { 493 if (desired->format == 0) {
494 /* Pick some default audio format */ 494 /* Pick some default audio format */
495 desired->format = AUDIO_S16; 495 desired->format = AUDIO_S16;
496 } 496 }
497 if (desired->channels == 0) { 497 if (desired->channels == 0) {
498 env = SDL_getenv ("SDL_AUDIO_CHANNELS"); 498 env = SDL_getenv("SDL_AUDIO_CHANNELS");
499 if (env) { 499 if (env) {
500 desired->channels = SDL_atoi (env); 500 desired->channels = SDL_atoi(env);
501 } 501 }
502 } 502 }
503 if (desired->channels == 0) { 503 if (desired->channels == 0) {
504 /* Pick a default number of channels */ 504 /* Pick a default number of channels */
505 desired->channels = 2; 505 desired->channels = 2;
509 case 2: /* Stereo */ 509 case 2: /* Stereo */
510 case 4: /* surround */ 510 case 4: /* surround */
511 case 6: /* surround with center and lfe */ 511 case 6: /* surround with center and lfe */
512 break; 512 break;
513 default: 513 default:
514 SDL_SetError ("1 (mono) and 2 (stereo) channels supported"); 514 SDL_SetError("1 (mono) and 2 (stereo) channels supported");
515 return (-1); 515 return (-1);
516 } 516 }
517 if (desired->samples == 0) { 517 if (desired->samples == 0) {
518 env = SDL_getenv ("SDL_AUDIO_SAMPLES"); 518 env = SDL_getenv("SDL_AUDIO_SAMPLES");
519 if (env) { 519 if (env) {
520 desired->samples = SDL_atoi (env); 520 desired->samples = SDL_atoi(env);
521 } 521 }
522 } 522 }
523 if (desired->samples == 0) { 523 if (desired->samples == 0) {
524 /* Pick a default of ~46 ms at desired frequency */ 524 /* Pick a default of ~46 ms at desired frequency */
525 int samples = (desired->freq / 1000) * 46; 525 int samples = (desired->freq / 1000) * 46;
528 power2 *= 2; 528 power2 *= 2;
529 } 529 }
530 desired->samples = power2; 530 desired->samples = power2;
531 } 531 }
532 if (desired->callback == NULL) { 532 if (desired->callback == NULL) {
533 SDL_SetError ("SDL_OpenAudio() passed a NULL callback"); 533 SDL_SetError("SDL_OpenAudio() passed a NULL callback");
534 return (-1); 534 return (-1);
535 } 535 }
536 #if defined(__MACOS__) || (defined(__RISCOS__) && SDL_THREADS_DISABLED) 536 #if defined(__MACOS__) || (defined(__RISCOS__) && SDL_THREADS_DISABLED)
537 /* FIXME: Need to implement PPC interrupt asm for SDL_LockAudio() */ 537 /* FIXME: Need to implement PPC interrupt asm for SDL_LockAudio() */
538 #else 538 #else
539 #if defined(__MINT__) && SDL_THREADS_DISABLED 539 #if defined(__MINT__) && SDL_THREADS_DISABLED
540 /* Uses interrupt driven audio, without thread */ 540 /* Uses interrupt driven audio, without thread */
541 #else 541 #else
542 /* Create a semaphore for locking the sound buffers */ 542 /* Create a semaphore for locking the sound buffers */
543 audio->mixer_lock = SDL_CreateMutex (); 543 audio->mixer_lock = SDL_CreateMutex();
544 if (audio->mixer_lock == NULL) { 544 if (audio->mixer_lock == NULL) {
545 SDL_SetError ("Couldn't create mixer lock"); 545 SDL_SetError("Couldn't create mixer lock");
546 SDL_CloseAudio (); 546 SDL_CloseAudio();
547 return (-1); 547 return (-1);
548 } 548 }
549 #endif /* __MINT__ */ 549 #endif /* __MINT__ */
550 #endif /* __MACOS__ */ 550 #endif /* __MACOS__ */
551 551
552 /* Calculate the silence and size of the audio specification */ 552 /* Calculate the silence and size of the audio specification */
553 SDL_CalculateAudioSpec (desired); 553 SDL_CalculateAudioSpec(desired);
554 554
555 /* Open the audio subsystem */ 555 /* Open the audio subsystem */
556 SDL_memcpy (&audio->spec, desired, sizeof (audio->spec)); 556 SDL_memcpy(&audio->spec, desired, sizeof(audio->spec));
557 audio->convert.needed = 0; 557 audio->convert.needed = 0;
558 audio->enabled = 1; 558 audio->enabled = 1;
559 audio->paused = 1; 559 audio->paused = 1;
560 560
561 #if !SDL_AUDIO_DRIVER_AHI 561 #if !SDL_AUDIO_DRIVER_AHI
562 562
563 /* AmigaOS opens audio inside the main loop */ 563 /* AmigaOS opens audio inside the main loop */
564 audio->opened = audio->OpenAudio (audio, &audio->spec) + 1; 564 audio->opened = audio->OpenAudio(audio, &audio->spec) + 1;
565 565
566 if (!audio->opened) { 566 if (!audio->opened) {
567 SDL_CloseAudio (); 567 SDL_CloseAudio();
568 return (-1); 568 return (-1);
569 } 569 }
570 #else 570 #else
571 D (bug ("Locking semaphore...")); 571 D(bug("Locking semaphore..."));
572 SDL_mutexP (audio->mixer_lock); 572 SDL_mutexP(audio->mixer_lock);
573 573
574 574
575 audio->thread = SDL_CreateThread (SDL_RunAudio, audio); 575 audio->thread = SDL_CreateThread(SDL_RunAudio, audio);
576 D (bug ("Created thread...\n")); 576 D(bug("Created thread...\n"));
577 577
578 if (audio->thread == NULL) { 578 if (audio->thread == NULL) {
579 SDL_mutexV (audio->mixer_lock); 579 SDL_mutexV(audio->mixer_lock);
580 SDL_CloseAudio (); 580 SDL_CloseAudio();
581 SDL_SetError ("Couldn't create audio thread"); 581 SDL_SetError("Couldn't create audio thread");
582 return (-1); 582 return (-1);
583 } 583 }
584 584
585 while (!audio_configured) 585 while (!audio_configured)
586 SDL_Delay (100); 586 SDL_Delay(100);
587 #endif 587 #endif
588 588
589 /* If the audio driver changes the buffer size, accept it */ 589 /* If the audio driver changes the buffer size, accept it */
590 if (audio->spec.samples != desired->samples) { 590 if (audio->spec.samples != desired->samples) {
591 desired->samples = audio->spec.samples; 591 desired->samples = audio->spec.samples;
592 SDL_CalculateAudioSpec (desired); 592 SDL_CalculateAudioSpec(desired);
593 } 593 }
594 594
595 /* Allocate a fake audio memory buffer */ 595 /* Allocate a fake audio memory buffer */
596 audio->fake_stream = SDL_AllocAudioMem (audio->spec.size); 596 audio->fake_stream = SDL_AllocAudioMem(audio->spec.size);
597 if (audio->fake_stream == NULL) { 597 if (audio->fake_stream == NULL) {
598 SDL_CloseAudio (); 598 SDL_CloseAudio();
599 SDL_OutOfMemory (); 599 SDL_OutOfMemory();
600 return (-1); 600 return (-1);
601 } 601 }
602 602
603 /* See if we need to do any conversion */ 603 /* See if we need to do any conversion */
604 if (obtained != NULL) { 604 if (obtained != NULL) {
605 SDL_memcpy (obtained, &audio->spec, sizeof (audio->spec)); 605 SDL_memcpy(obtained, &audio->spec, sizeof(audio->spec));
606 } else if (desired->freq != audio->spec.freq || 606 } else if (desired->freq != audio->spec.freq ||
607 desired->format != audio->spec.format || 607 desired->format != audio->spec.format ||
608 desired->channels != audio->spec.channels) { 608 desired->channels != audio->spec.channels) {
609 /* Build an audio conversion block */ 609 /* Build an audio conversion block */
610 if (SDL_BuildAudioCVT (&audio->convert, 610 if (SDL_BuildAudioCVT(&audio->convert,
611 desired->format, desired->channels, 611 desired->format, desired->channels,
612 desired->freq, 612 desired->freq,
613 audio->spec.format, audio->spec.channels, 613 audio->spec.format, audio->spec.channels,
614 audio->spec.freq) < 0) { 614 audio->spec.freq) < 0) {
615 SDL_CloseAudio (); 615 SDL_CloseAudio();
616 return (-1); 616 return (-1);
617 } 617 }
618 if (audio->convert.needed) { 618 if (audio->convert.needed) {
619 audio->convert.len = desired->size; 619 audio->convert.len = desired->size;
620 audio->convert.buf = 620 audio->convert.buf =
621 (Uint8 *) SDL_AllocAudioMem (audio->convert.len * 621 (Uint8 *) SDL_AllocAudioMem(audio->convert.len *
622 audio->convert.len_mult); 622 audio->convert.len_mult);
623 if (audio->convert.buf == NULL) { 623 if (audio->convert.buf == NULL) {
624 SDL_CloseAudio (); 624 SDL_CloseAudio();
625 SDL_OutOfMemory (); 625 SDL_OutOfMemory();
626 return (-1); 626 return (-1);
627 } 627 }
628 } 628 }
629 } 629 }
630 #if !SDL_AUDIO_DRIVER_AHI 630 #if !SDL_AUDIO_DRIVER_AHI
632 switch (audio->opened) { 632 switch (audio->opened) {
633 case 1: 633 case 1:
634 /* Start the audio thread */ 634 /* Start the audio thread */
635 #if (defined(__WIN32__) && !defined(_WIN32_WCE)) && !defined(HAVE_LIBC) 635 #if (defined(__WIN32__) && !defined(_WIN32_WCE)) && !defined(HAVE_LIBC)
636 #undef SDL_CreateThread 636 #undef SDL_CreateThread
637 audio->thread = SDL_CreateThread (SDL_RunAudio, audio, NULL, NULL); 637 audio->thread = SDL_CreateThread(SDL_RunAudio, audio, NULL, NULL);
638 #else 638 #else
639 audio->thread = SDL_CreateThread (SDL_RunAudio, audio); 639 audio->thread = SDL_CreateThread(SDL_RunAudio, audio);
640 #endif 640 #endif
641 if (audio->thread == NULL) { 641 if (audio->thread == NULL) {
642 SDL_CloseAudio (); 642 SDL_CloseAudio();
643 SDL_SetError ("Couldn't create audio thread"); 643 SDL_SetError("Couldn't create audio thread");
644 return (-1); 644 return (-1);
645 } 645 }
646 break; 646 break;
647 647
648 default: 648 default:
649 /* The audio is now playing */ 649 /* The audio is now playing */
650 break; 650 break;
651 } 651 }
652 #else 652 #else
653 SDL_mutexV (audio->mixer_lock); 653 SDL_mutexV(audio->mixer_lock);
654 D (bug ("SDL_OpenAudio USCITA...\n")); 654 D(bug("SDL_OpenAudio USCITA...\n"));
655 655
656 #endif 656 #endif
657 657
658 return (0); 658 return (0);
659 } 659 }
660 660
661 SDL_audiostatus 661 SDL_audiostatus
662 SDL_GetAudioStatus (void) 662 SDL_GetAudioStatus(void)
663 { 663 {
664 SDL_AudioDevice *audio = current_audio; 664 SDL_AudioDevice *audio = current_audio;
665 SDL_audiostatus status; 665 SDL_audiostatus status;
666 666
667 status = SDL_AUDIO_STOPPED; 667 status = SDL_AUDIO_STOPPED;
674 } 674 }
675 return (status); 675 return (status);
676 } 676 }
677 677
678 void 678 void
679 SDL_PauseAudio (int pause_on) 679 SDL_PauseAudio(int pause_on)
680 { 680 {
681 SDL_AudioDevice *audio = current_audio; 681 SDL_AudioDevice *audio = current_audio;
682 682
683 if (audio) { 683 if (audio) {
684 audio->paused = pause_on; 684 audio->paused = pause_on;
685 } 685 }
686 } 686 }
687 687
688 void 688 void
689 SDL_LockAudio (void) 689 SDL_LockAudio(void)
690 { 690 {
691 SDL_AudioDevice *audio = current_audio; 691 SDL_AudioDevice *audio = current_audio;
692 692
693 /* Obtain a lock on the mixing buffers */ 693 /* Obtain a lock on the mixing buffers */
694 if (audio && audio->LockAudio) { 694 if (audio && audio->LockAudio) {
695 audio->LockAudio (audio); 695 audio->LockAudio(audio);
696 } 696 }
697 } 697 }
698 698
699 void 699 void
700 SDL_UnlockAudio (void) 700 SDL_UnlockAudio(void)
701 { 701 {
702 SDL_AudioDevice *audio = current_audio; 702 SDL_AudioDevice *audio = current_audio;
703 703
704 /* Release lock on the mixing buffers */ 704 /* Release lock on the mixing buffers */
705 if (audio && audio->UnlockAudio) { 705 if (audio && audio->UnlockAudio) {
706 audio->UnlockAudio (audio); 706 audio->UnlockAudio(audio);
707 } 707 }
708 } 708 }
709 709
710 void 710 void
711 SDL_CloseAudio (void) 711 SDL_CloseAudio(void)
712 { 712 {
713 SDL_QuitSubSystem (SDL_INIT_AUDIO); 713 SDL_QuitSubSystem(SDL_INIT_AUDIO);
714 } 714 }
715 715
716 void 716 void
717 SDL_AudioQuit (void) 717 SDL_AudioQuit(void)
718 { 718 {
719 SDL_AudioDevice *audio = current_audio; 719 SDL_AudioDevice *audio = current_audio;
720 720
721 if (audio) { 721 if (audio) {
722 audio->enabled = 0; 722 audio->enabled = 0;
723 if (audio->thread != NULL) { 723 if (audio->thread != NULL) {
724 SDL_WaitThread (audio->thread, NULL); 724 SDL_WaitThread(audio->thread, NULL);
725 } 725 }
726 if (audio->mixer_lock != NULL) { 726 if (audio->mixer_lock != NULL) {
727 SDL_DestroyMutex (audio->mixer_lock); 727 SDL_DestroyMutex(audio->mixer_lock);
728 } 728 }
729 if (audio->fake_stream != NULL) { 729 if (audio->fake_stream != NULL) {
730 SDL_FreeAudioMem (audio->fake_stream); 730 SDL_FreeAudioMem(audio->fake_stream);
731 } 731 }
732 if (audio->convert.needed) { 732 if (audio->convert.needed) {
733 SDL_FreeAudioMem (audio->convert.buf); 733 SDL_FreeAudioMem(audio->convert.buf);
734 734
735 } 735 }
736 #if !SDL_AUDIO_DRIVER_AHI 736 #if !SDL_AUDIO_DRIVER_AHI
737 if (audio->opened) { 737 if (audio->opened) {
738 audio->CloseAudio (audio); 738 audio->CloseAudio(audio);
739 audio->opened = 0; 739 audio->opened = 0;
740 } 740 }
741 #endif 741 #endif
742 /* Free the driver data */ 742 /* Free the driver data */
743 audio->free (audio); 743 audio->free(audio);
744 current_audio = NULL; 744 current_audio = NULL;
745 } 745 }
746 } 746 }
747 747
748 #define NUM_FORMATS 6 748 #define NUM_FORMATS 6
762 {AUDIO_U16MSB, AUDIO_U16LSB, AUDIO_S16MSB, AUDIO_S16LSB, AUDIO_U8, 762 {AUDIO_U16MSB, AUDIO_U16LSB, AUDIO_S16MSB, AUDIO_S16LSB, AUDIO_U8,
763 AUDIO_S8}, 763 AUDIO_S8},
764 }; 764 };
765 765
766 Uint16 766 Uint16
767 SDL_FirstAudioFormat (Uint16 format) 767 SDL_FirstAudioFormat(Uint16 format)
768 { 768 {
769 for (format_idx = 0; format_idx < NUM_FORMATS; ++format_idx) { 769 for (format_idx = 0; format_idx < NUM_FORMATS; ++format_idx) {
770 if (format_list[format_idx][0] == format) { 770 if (format_list[format_idx][0] == format) {
771 break; 771 break;
772 } 772 }
773 } 773 }
774 format_idx_sub = 0; 774 format_idx_sub = 0;
775 return (SDL_NextAudioFormat ()); 775 return (SDL_NextAudioFormat());
776 } 776 }
777 777
778 Uint16 778 Uint16
779 SDL_NextAudioFormat (void) 779 SDL_NextAudioFormat(void)
780 { 780 {
781 if ((format_idx == NUM_FORMATS) || (format_idx_sub == NUM_FORMATS)) { 781 if ((format_idx == NUM_FORMATS) || (format_idx_sub == NUM_FORMATS)) {
782 return (0); 782 return (0);
783 } 783 }
784 return (format_list[format_idx][format_idx_sub++]); 784 return (format_list[format_idx][format_idx_sub++]);
785 } 785 }
786 786
787 void 787 void
788 SDL_CalculateAudioSpec (SDL_AudioSpec * spec) 788 SDL_CalculateAudioSpec(SDL_AudioSpec * spec)
789 { 789 {
790 switch (spec->format) { 790 switch (spec->format) {
791 case AUDIO_U8: 791 case AUDIO_U8:
792 spec->silence = 0x80; 792 spec->silence = 0x80;
793 break; 793 break;