]> Repos - portaudio/commitdiff
WASAPI: Add PaWaspi_GetIMMDevice function
authorPeter Ross <pross@xvid.org>
Tue, 9 Feb 2021 03:55:41 +0000 (14:55 +1100)
committerPeter Ross <pross@xvid.org>
Tue, 9 Feb 2021 21:10:21 +0000 (08:10 +1100)
The IMMDevice pointer enables access to audio device capabiltiies not exposed by PortAudio.
https://docs.microsoft.com/en-us/windows/win32/api/mmdeviceapi/nn-mmdeviceapi-immdevice

build/msvc/portaudio.def
cmake_support/template_portaudio.def
include/pa_win_wasapi.h
src/hostapi/wasapi/pa_win_wasapi.c

index 8f1738f9e88669bd306ed40ea2f97d28ba736a8c..6ecb142d4e3baea958e31a180f6edaf26668cbc3 100644 (file)
@@ -55,3 +55,4 @@ PaWasapi_GetJackDescription         @66
 PaWasapi_SetStreamStateHandler      @68
 PaWasapiWinrt_SetDefaultDeviceId    @67
 PaWasapiWinrt_PopulateDeviceList    @69
+PaWasapi_GetIMMDevice               @70
index 462c4cadb9d0453c7ec9968420b9ed485fa962a2..9cf0dc3fb00b21a0e0432650febbe8c8213fa6f5 100644 (file)
@@ -58,3 +58,4 @@ PaUtil_SetDebugPrintFunction        @55
 @DEF_EXCLUDE_WASAPI_SYMBOLS@PaWasapi_SetStreamStateHandler      @68
 @DEF_EXCLUDE_WASAPI_SYMBOLS@PaWasapiWinrt_SetDefaultDeviceId    @67
 @DEF_EXCLUDE_WASAPI_SYMBOLS@PaWasapiWinrt_PopulateDeviceList    @69
+@DEF_EXCLUDE_WASAPI_SYMBOLS@PaWasapi_GetIMMDevice               @70
index a3d82ee140ac7e675296bf20be4c57d053e3ec38..c046afd709e26429540ab3a23aa5c4a37382c9db 100644 (file)
@@ -437,6 +437,16 @@ int PaWasapi_GetDeviceMixFormat( void *pFormat, unsigned int formatSize, PaDevic
 int/*PaWasapiDeviceRole*/ PaWasapi_GetDeviceRole( PaDeviceIndex device );
 
 
+/** Get device IMMDevice pointer
+
+ @param device Device index.
+ @param pAudioClient Pointer to pointer of IMMDevice.
+
+ @return Error code indicating success or failure.
+*/
+PaError PaWasapi_GetIMMDevice( PaDeviceIndex device, void **pIMMDevice );
+
+
 /** Boost thread priority of calling thread (MMCSS).
 
     Use it for Blocking Interface only inside the thread which makes calls to Pa_WriteStream/Pa_ReadStream.
index 34fb52b5ee245dc65b69a146ac0d0b5e8402ff67..edb252d805148dde78aedd7d24602dff4ec3f5d5 100644 (file)
@@ -2614,6 +2614,27 @@ int PaWasapi_GetDeviceRole( PaDeviceIndex device )
     return paWasapi->devInfo[ index ].formFactor;
 }
 
+// ------------------------------------------------------------------------------------------
+int PaWasapi_GetIMMDevice( PaDeviceIndex device, void **pIMMDevice )
+{
+        PaError ret;
+        PaDeviceIndex index;
+
+        PaWasapiHostApiRepresentation *paWasapi = _GetHostApi(&ret);
+        if (paWasapi == NULL)
+                return paNotInitialized;
+
+        ret = PaUtil_DeviceIndexToHostApiDeviceIndex(&index, device, &paWasapi->inheritedHostApiRep);
+        if (ret != paNoError)
+                return ret;
+
+        if ((UINT32)index >= paWasapi->deviceCount)
+                return paInvalidDevice;
+
+        *pIMMDevice = paWasapi->devInfo[ index ].device;
+        return paNoError;
+}
+
 // ------------------------------------------------------------------------------------------
 PaError PaWasapi_GetFramesPerHostBuffer( PaStream *pStream, unsigned int *pInput, unsigned int *pOutput )
 {