Skip to content

Commit

Permalink
The audio lock and unlock functions are now a part of the driver.
Browse files Browse the repository at this point in the history
The MacOS audio locking has been implemented, courtesy of Ryan Gordon
  • Loading branch information
slouken committed Mar 30, 2002
1 parent 707ab0b commit 7c4e91d
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 10 deletions.
34 changes: 24 additions & 10 deletions src/audio/SDL_audio.c
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -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);
}
}

Expand All @@ -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);
}
}

Expand Down
5 changes: 5 additions & 0 deletions src/audio/SDL_sysaudio.h
Expand Up @@ -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 */

Expand Down

0 comments on commit 7c4e91d

Please sign in to comment.