From: dmitrykos Date: Fri, 26 Feb 2010 08:57:44 +0000 (+0000) Subject: +++ wasapi: Event-driven/Full-Duplex/Exclusive mode will be calling user-provided... X-Git-Tag: pa_stable_v19_20110326_r1647~167 X-Git-Url: https://andrewgundersen.net/repos?a=commitdiff_plain;h=bb8331b47d0ba6ada1c25088c2305597b44a96e6;p=portaudio +++ wasapi: Event-driven/Full-Duplex/Exclusive mode will be calling user-provided callbacks simultaneously when both input/output buffers are ready for IO --- 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)