Add mutexes to 3DS audio backend

This commit is contained in:
Clownacy 2020-10-15 14:22:49 +01:00
parent 2f8e771333
commit 497adce14b

View file

@ -35,6 +35,8 @@ static struct
static void (*organya_callback)(void); static void (*organya_callback)(void);
static unsigned int organya_callback_timer; static unsigned int organya_callback_timer;
static LightLock organya_mutex;
static Thread audio_thread; static Thread audio_thread;
static bool audio_thread_die; static bool audio_thread_die;
@ -44,17 +46,20 @@ static void OrganyaThread(void *user_data)
while (!audio_thread_die) while (!audio_thread_die)
{ {
if (organya_callback_timer == 0) LightLock_Lock(&organya_mutex);
{
// If Organya isn't currently playing, idle for 10ms and check again unsigned int sleep_milliseconds = 10;
svcSleepThread(10 * 1000000);
} if (organya_callback_timer != 0)
else
{ {
organya_callback(); organya_callback();
svcSleepThread(organya_callback_timer * 1000000); sleep_milliseconds = organya_callback_timer;
} }
LightLock_Unlock(&organya_mutex);
svcSleepThread(sleep_milliseconds * 1000000);
} }
} }
@ -93,6 +98,8 @@ bool AudioBackend_Init(void)
ndspSetOutputMode(NDSP_OUTPUT_STEREO); ndspSetOutputMode(NDSP_OUTPUT_STEREO);
LightLock_Init(&organya_mutex);
audio_thread_die = false; audio_thread_die = false;
audio_thread = threadCreate(OrganyaThread, NULL, 32 * 1024, 0x18, -1, false); audio_thread = threadCreate(OrganyaThread, NULL, 32 * 1024, 0x18, -1, false);
@ -255,10 +262,18 @@ void AudioBackend_SetSoundPan(AudioBackend_Sound *sound, long pan)
void AudioBackend_SetOrganyaCallback(void (*callback)(void)) void AudioBackend_SetOrganyaCallback(void (*callback)(void))
{ {
LightLock_Lock(&organya_mutex);
organya_callback = callback; organya_callback = callback;
LightLock_Unlock(&organya_mutex);
} }
void AudioBackend_SetOrganyaTimer(unsigned int milliseconds) void AudioBackend_SetOrganyaTimer(unsigned int milliseconds)
{ {
LightLock_Lock(&organya_mutex);
organya_callback_timer = milliseconds; organya_callback_timer = milliseconds;
LightLock_Unlock(&organya_mutex);
} }