}
// ------------------------------------------------------------------------------------------
-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;
}
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
}
// ------------------------------------------------------------------------------------------
#ifndef PA_WINRT
PaError ret;
HRESULT hr = S_OK;
- PaDeviceIndex index;
+ PaWasapiDeviceInfo *deviceInfo;
IDeviceTopology *pDeviceTopology = NULL;
IConnector *pConnFrom = NULL;
IConnector *pConnTo = NULL;
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);
#ifndef PA_WINRT
PaError ret;
HRESULT hr = S_OK;
- PaDeviceIndex index;
+ PaWasapiDeviceInfo *deviceInfo;
IDeviceTopology *pDeviceTopology = NULL;
IConnector *pConnFrom = NULL;
IConnector *pConnTo = NULL;
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);