]> Repos - portaudio/commitdiff
wasapi: Fixed compilation for UWP platform, minor cleanup and refactoring.
authordmitrykos <dmitrykos@neutroncode.com>
Tue, 16 Feb 2021 10:43:58 +0000 (12:43 +0200)
committerdmitrykos <dmitrykos@neutroncode.com>
Tue, 16 Feb 2021 10:43:58 +0000 (12:43 +0200)
src/hostapi/wasapi/pa_win_wasapi.c

index 993683831d43736fbcb8cfeb794b0231783f7160..23f41a1ad1925533f0ef5443d29f97e6f169c8dd 100644 (file)
@@ -2525,67 +2525,67 @@ int PaWasapi_GetDeviceCurrentFormat( PaStream *pStream, void *pFormat, unsigned
 }
 
 // ------------------------------------------------------------------------------------------
-int PaWasapi_GetDeviceDefaultFormat( void *pFormat, unsigned int formatSize, PaDeviceIndex device )
+static PaError _GetWasapiDeviceInfoByDeviceIndex( PaWasapiDeviceInfo **info, PaDeviceIndex device )
 {
     PaError ret;
-    PaWasapiHostApiRepresentation *paWasapi;
-    UINT32 size;
     PaDeviceIndex index;
 
-    if (pFormat == NULL)
-        return paBadBufferPtr;
-    if (formatSize <= 0)
-        return paBufferTooSmall;
-
     // Get API
-    paWasapi = _GetHostApi(&ret);
+    PaWasapiHostApiRepresentation *paWasapi = _GetHostApi(&ret);
     if (paWasapi == NULL)
-        return ret;
+        return paNotInitialized;
 
     // Get device index
-    ret = PaUtil_DeviceIndexToHostApiDeviceIndex(&index, device, &paWasapi->inheritedHostApiRep);
-    if (ret != paNoError)
+    if ((ret = PaUtil_DeviceIndexToHostApiDeviceIndex(&index, device, &paWasapi->inheritedHostApiRep)) != paNoError)
         return ret;
 
     // Validate index
     if ((UINT32)index >= paWasapi->deviceCount)
         return paInvalidDevice;
 
-    size = min(formatSize, (UINT32)sizeof(paWasapi->devInfo[ index ].DefaultFormat));
-    memcpy(pFormat, &paWasapi->devInfo[ index ].DefaultFormat, size);
+    (*info) = &paWasapi->devInfo[ index ];
 
-    return size;
+    return paNoError;
 }
 
 // ------------------------------------------------------------------------------------------
-int PaWasapi_GetDeviceMixFormat( void *pFormat, unsigned int formatSize, PaDeviceIndex device )
+int PaWasapi_GetDeviceDefaultFormat( void *pFormat, unsigned int formatSize, PaDeviceIndex device )
 {
     PaError ret;
-    PaWasapiHostApiRepresentation *paWasapi;
+    PaWasapiDeviceInfo *deviceInfo;
     UINT32 size;
-    PaDeviceIndex index;
 
     if (pFormat == NULL)
         return paBadBufferPtr;
     if (formatSize <= 0)
         return paBufferTooSmall;
 
-    // Get API
-    paWasapi = _GetHostApi(&ret);
-    if (paWasapi == NULL)
+    if ((ret = _GetWasapiDeviceInfoByDeviceIndex(&deviceInfo, device)) != paNoError)
         return ret;
 
-    // Get device index
-    ret = PaUtil_DeviceIndexToHostApiDeviceIndex(&index, device, &paWasapi->inheritedHostApiRep);
-    if (ret != paNoError)
-        return ret;
+    size = min(formatSize, (UINT32)sizeof(deviceInfo->DefaultFormat));
+    memcpy(pFormat, &deviceInfo->DefaultFormat, size);
 
-    // Validate index
-    if ((UINT32)index >= paWasapi->deviceCount)
-        return paInvalidDevice;
+    return size;
+}
+
+// ------------------------------------------------------------------------------------------
+int PaWasapi_GetDeviceMixFormat( void *pFormat, unsigned int formatSize, PaDeviceIndex device )
+{
+    PaError ret;
+    PaWasapiDeviceInfo *deviceInfo;
+    UINT32 size;
+
+    if (pFormat == NULL)
+        return paBadBufferPtr;
+    if (formatSize <= 0)
+        return paBufferTooSmall;
 
-    size = min(formatSize, (UINT32)sizeof(paWasapi->devInfo[ index ].MixFormat));
-    memcpy(pFormat, &paWasapi->devInfo[ index ].MixFormat, size);
+    if ((ret = _GetWasapiDeviceInfoByDeviceIndex(&deviceInfo, device)) != paNoError)
+        return ret;
+
+    size = min(formatSize, (UINT32)sizeof(deviceInfo->MixFormat));
+    memcpy(pFormat, &deviceInfo->MixFormat, size);
 
     return size;
 }
@@ -2594,44 +2594,35 @@ int PaWasapi_GetDeviceMixFormat( void *pFormat, unsigned int formatSize, PaDevic
 int PaWasapi_GetDeviceRole( PaDeviceIndex device )
 {
     PaError ret;
-    PaDeviceIndex index;
+    PaWasapiDeviceInfo *deviceInfo;
 
-    // Get API
-    PaWasapiHostApiRepresentation *paWasapi = _GetHostApi(&ret);
-    if (paWasapi == NULL)
-        return paNotInitialized;
-
-    // Get device index
-    ret = PaUtil_DeviceIndexToHostApiDeviceIndex(&index, device, &paWasapi->inheritedHostApiRep);
-    if (ret != paNoError)
+    if ((ret = _GetWasapiDeviceInfoByDeviceIndex(&deviceInfo, device)) != paNoError)
         return ret;
 
-    // Validate index
-    if ((UINT32)index >= paWasapi->deviceCount)
-        return paInvalidDevice;
-
-    return paWasapi->devInfo[ index ].formFactor;
+    return deviceInfo->formFactor;
 }
 
 // ------------------------------------------------------------------------------------------
-int PaWasapi_GetIMMDevice( PaDeviceIndex device, void **pIMMDevice )
+PaError PaWasapi_GetIMMDevice( PaDeviceIndex device, void **pIMMDevice )
 {
-        PaError ret;
-        PaDeviceIndex index;
+#ifndef PA_WINRT
+    PaError ret;
+    PaWasapiDeviceInfo *deviceInfo;
 
-        PaWasapiHostApiRepresentation *paWasapi = _GetHostApi(&ret);
-        if (paWasapi == NULL)
-                return paNotInitialized;
+    if (pIMMDevice == NULL)
+        return paBadBufferPtr;
 
-        ret = PaUtil_DeviceIndexToHostApiDeviceIndex(&index, device, &paWasapi->inheritedHostApiRep);
-        if (ret != paNoError)
-                return ret;
+    if ((ret = _GetWasapiDeviceInfoByDeviceIndex(&deviceInfo, device)) != paNoError)
+        return ret;
 
-        if ((UINT32)index >= paWasapi->deviceCount)
-                return paInvalidDevice;
+    (*pIMMDevice) = deviceInfo->device;
 
-        *pIMMDevice = paWasapi->devInfo[ index ].device;
-        return paNoError;
+    return paNoError;
+#else
+    (void)device;
+    (void)pIMMDevice;
+    return paIncompatibleStreamHostApi;
+#endif
 }
 
 // ------------------------------------------------------------------------------------------
@@ -5197,7 +5188,7 @@ PaError PaWasapi_GetJackCount(PaDeviceIndex device, int *pJackCount)
 #ifndef PA_WINRT
     PaError ret;
     HRESULT hr = S_OK;
-    PaDeviceIndex index;
+    PaWasapiDeviceInfo *deviceInfo;
     IDeviceTopology *pDeviceTopology = NULL;
     IConnector *pConnFrom = NULL;
     IConnector *pConnTo = NULL;
@@ -5205,24 +5196,14 @@ PaError PaWasapi_GetJackCount(PaDeviceIndex device, int *pJackCount)
     IKsJackDescription *pJackDesc = NULL;
     UINT jackCount = 0;
 
-    PaWasapiHostApiRepresentation *paWasapi = _GetHostApi(&ret);
-    if (paWasapi == NULL)
-        return paNotInitialized;
-
     if (pJackCount == NULL)
         return paUnanticipatedHostError;
 
-    // Get device index
-    ret = PaUtil_DeviceIndexToHostApiDeviceIndex(&index, device, &paWasapi->inheritedHostApiRep);
-    if (ret != paNoError)
+    if ((ret = _GetWasapiDeviceInfoByDeviceIndex(&deviceInfo, device)) != paNoError)
         return ret;
 
-    // Validate index
-    if ((UINT32)index >= paWasapi->deviceCount)
-        return paInvalidDevice;
-
     // Get the endpoint device's IDeviceTopology interface
-    hr = IMMDevice_Activate(paWasapi->devInfo[index].device, &pa_IID_IDeviceTopology,
+    hr = IMMDevice_Activate(deviceInfo->device, &pa_IID_IDeviceTopology,
         CLSCTX_INPROC_SERVER, NULL, (void**)&pDeviceTopology);
     IF_FAILED_JUMP(hr, error);
 
@@ -5372,7 +5353,7 @@ PaError PaWasapi_GetJackDescription(PaDeviceIndex device, int jackIndex, PaWasap
 #ifndef PA_WINRT
     PaError ret;
     HRESULT hr = S_OK;
-    PaDeviceIndex index;
+    PaWasapiDeviceInfo *deviceInfo;
     IDeviceTopology *pDeviceTopology = NULL;
     IConnector *pConnFrom = NULL;
     IConnector *pConnTo = NULL;
@@ -5380,21 +5361,11 @@ PaError PaWasapi_GetJackDescription(PaDeviceIndex device, int jackIndex, PaWasap
     IKsJackDescription *pJackDesc = NULL;
     KSJACK_DESCRIPTION jack = { 0 };
 
-    PaWasapiHostApiRepresentation *paWasapi = _GetHostApi(&ret);
-    if (paWasapi == NULL)
-        return paNotInitialized;
-
-    // Get device index
-    ret = PaUtil_DeviceIndexToHostApiDeviceIndex(&index, device, &paWasapi->inheritedHostApiRep);
-    if (ret != paNoError)
+    if ((ret = _GetWasapiDeviceInfoByDeviceIndex(&deviceInfo, device)) != paNoError)
         return ret;
 
-    // Validate index
-    if ((UINT32)index >= paWasapi->deviceCount)
-        return paInvalidDevice;
-
     // Get the endpoint device's IDeviceTopology interface
-    hr = IMMDevice_Activate(paWasapi->devInfo[index].device, &pa_IID_IDeviceTopology,
+    hr = IMMDevice_Activate(deviceInfo->device, &pa_IID_IDeviceTopology,
         CLSCTX_INPROC_SERVER, NULL, (void**)&pDeviceTopology);
     IF_FAILED_JUMP(hr, error);