From bb8331b47d0ba6ada1c25088c2305597b44a96e6 Mon Sep 17 00:00:00 2001 From: dmitrykos Date: Fri, 26 Feb 2010 08:57:44 +0000 Subject: [PATCH] +++ wasapi: Event-driven/Full-Duplex/Exclusive mode will be calling user-provided callbacks simultaneously when both input/output buffers are ready for IO --- src/hostapi/wasapi/pa_win_wasapi.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/hostapi/wasapi/pa_win_wasapi.cpp b/src/hostapi/wasapi/pa_win_wasapi.cpp index a3a4bb1..a3bbcf4 100644 --- a/src/hostapi/wasapi/pa_win_wasapi.cpp +++ b/src/hostapi/wasapi/pa_win_wasapi.cpp @@ -2820,6 +2820,14 @@ PA_THREAD_FUNC ProcThreadEvent(void *param) BOOL bInitOutput = FALSE; PaWasapiStream *stream = (PaWasapiStream *)param; + // Waiting on all events in case of Full-Duplex/Exclusive mode. + BOOL bWaitAllEvents = FALSE; + if ((stream->in.client != NULL) && (stream->out.client != NULL)) + { + bWaitAllEvents = (stream->in.shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE) && + (stream->out.shareMode == AUDCLNT_SHAREMODE_EXCLUSIVE); + } + // Setup data processors PaWasapiHostProcessor defaultProcessor; defaultProcessor.processor = WaspiHostProcessingLoop; @@ -2879,7 +2887,7 @@ PA_THREAD_FUNC ProcThreadEvent(void *param) for (;;) { // 2 sec timeout - dwResult = WaitForMultipleObjects(S_COUNT, event, FALSE, 10000); + dwResult = WaitForMultipleObjects(S_COUNT, event, bWaitAllEvents, 10000); // Check for close event (after wait for buffers to avoid any calls to user // callback when hCloseRequest was set) -- 2.43.0