Add mutexes to 3DS audio backend
This commit is contained in:
parent
2f8e771333
commit
497adce14b
1 changed files with 22 additions and 7 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue