From: dmitrykos Date: Tue, 16 Feb 2021 10:43:58 +0000 (+0200) Subject: wasapi: Fixed compilation for UWP platform, minor cleanup and refactoring. X-Git-Tag: v19.7.0~8^2 X-Git-Url: https://andrewgundersen.net/repos?a=commitdiff_plain;h=712685c71acfec2a3640fe493ef1de86bebc2954;p=portaudio wasapi: Fixed compilation for UWP platform, minor cleanup and refactoring. --- diff --git a/src/hostapi/wasapi/pa_win_wasapi.c b/src/hostapi/wasapi/pa_win_wasapi.c index 9936838..23f41a1 100644 --- a/src/hostapi/wasapi/pa_win_wasapi.c +++ b/src/hostapi/wasapi/pa_win_wasapi.c @@ -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);