fix audout events being missed.

This commit is contained in:
ITotalJustice 2025-07-12 02:26:49 +01:00
parent 70ea18a477
commit f19847dda4

View File

@ -105,12 +105,18 @@ static Result _audoutCmdNoInOutU32(Service* srv, u32 *out, u32 cmd_id) {
} }
Result audoutWaitPlayFinish(AudioOutBuffer **released, u32* released_count, u64 timeout) { Result audoutWaitPlayFinish(AudioOutBuffer **released, u32* released_count, u64 timeout) {
// Wait on the buffer event handle // Check if we already have a buffer free
Result rc = eventWait(&g_audoutBufferEvent, timeout); eventClear(&g_audoutBufferEvent);
Result rc = audoutGetReleasedAudioOutBuffer(released, released_count);
if (R_SUCCEEDED(rc)) { if (R_FAILED(rc) || !(*released_count)) {
// Grab the released buffer // Wait on the buffer event handle
rc = audoutGetReleasedAudioOutBuffer(released, released_count); rc = eventWait(&g_audoutBufferEvent, timeout);
if (R_SUCCEEDED(rc)) {
// Grab the released buffer
rc = audoutGetReleasedAudioOutBuffer(released, released_count);
}
} }
return rc; return rc;
@ -203,7 +209,7 @@ Result audoutAppendAudioOutBuffer(AudioOutBuffer *Buffer) {
} }
static Result _audoutRegisterBufferEvent(Event *BufferEvent) { static Result _audoutRegisterBufferEvent(Event *BufferEvent) {
return _audoutCmdGetEvent(&g_audoutIAudioOut, BufferEvent, true, 4); return _audoutCmdGetEvent(&g_audoutIAudioOut, BufferEvent, false, 4);
} }
Result audoutGetReleasedAudioOutBuffer(AudioOutBuffer **Buffer, u32 *ReleasedBuffersCount) { Result audoutGetReleasedAudioOutBuffer(AudioOutBuffer **Buffer, u32 *ReleasedBuffersCount) {