From 7c4e91d02cf22538f75411e32e022ac465b66a96 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sat, 30 Mar 2002 19:48:56 +0000 Subject: [PATCH] The audio lock and unlock functions are now a part of the driver. The MacOS audio locking has been implemented, courtesy of Ryan Gordon --- src/audio/SDL_audio.c | 34 ++++++++++++++++++++++++---------- src/audio/SDL_sysaudio.h | 5 +++++ 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/src/audio/SDL_audio.c b/src/audio/SDL_audio.c index 29520863c..3c9d5821c 100644 --- a/src/audio/SDL_audio.c +++ b/src/audio/SDL_audio.c @@ -230,6 +230,22 @@ int SDL_RunAudio(void *audiop) return(0); } +static void SDL_LockAudio_Default(SDL_AudioDevice *audio) +{ + if ( audio->thread && (SDL_ThreadID() == audio->threadid) ) { + return; + } + SDL_mutexP(audio->mixer_lock); +} + +static void SDL_UnlockAudio_Default(SDL_AudioDevice *audio) +{ + if ( audio->thread && (SDL_ThreadID() == audio->threadid) ) { + return; + } + SDL_mutexV(audio->mixer_lock); +} + int SDL_AudioInit(const char *driver_name) { SDL_AudioDevice *audio; @@ -309,6 +325,10 @@ int SDL_AudioInit(const char *driver_name) current_audio = audio; if ( current_audio ) { current_audio->name = bootstrap[i]->name; + if ( !current_audio->LockAudio && !current_audio->UnlockAudio ) { + current_audio->LockAudio = SDL_LockAudio_Default; + current_audio->UnlockAudio = SDL_UnlockAudio_Default; + } } return(0); } @@ -506,11 +526,8 @@ void SDL_LockAudio (void) SDL_AudioDevice *audio = current_audio; /* Obtain a lock on the mixing buffers */ - if ( audio ) { - if ( audio->thread && (SDL_ThreadID() == audio->threadid) ) { - return; - } - SDL_mutexP(audio->mixer_lock); + if ( audio && audio->LockAudio ) { + audio->LockAudio(audio); } } @@ -519,11 +536,8 @@ void SDL_UnlockAudio (void) SDL_AudioDevice *audio = current_audio; /* Release lock on the mixing buffers */ - if ( audio ) { - if ( audio->thread && (SDL_ThreadID() == audio->threadid) ) { - return; - } - SDL_mutexV(audio->mixer_lock); + if ( audio && audio->UnlockAudio ) { + audio->UnlockAudio(audio); } } diff --git a/src/audio/SDL_sysaudio.h b/src/audio/SDL_sysaudio.h index eeab95165..7619adbf8 100644 --- a/src/audio/SDL_sysaudio.h +++ b/src/audio/SDL_sysaudio.h @@ -58,6 +58,11 @@ struct SDL_AudioDevice { void (*WaitDone)(_THIS); void (*CloseAudio)(_THIS); + /* * * */ + /* Lock / Unlock functions added for the Mac port */ + void (*LockAudio)(_THIS); + void (*UnlockAudio)(_THIS); + /* * * */ /* Data common to all devices */