Merge pull request #509 from PortAudio/winrt
wasapi: Fixed compilation for UWP platform, minor cleanup and refactoring.
This commit is contained in:
commit
8ccd53fe7c
1 changed files with 54 additions and 83 deletions
|
|
@ -2525,73 +2525,7 @@ 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);
|
|
||||||
if (paWasapi == NULL)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
// Get device index
|
|
||||||
ret = PaUtil_DeviceIndexToHostApiDeviceIndex(&index, device, &paWasapi->inheritedHostApiRep);
|
|
||||||
if (ret != 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);
|
|
||||||
|
|
||||||
return size;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------
|
|
||||||
int PaWasapi_GetDeviceMixFormat( void *pFormat, unsigned int formatSize, 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);
|
|
||||||
if (paWasapi == NULL)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
// Get device index
|
|
||||||
ret = PaUtil_DeviceIndexToHostApiDeviceIndex(&index, device, &paWasapi->inheritedHostApiRep);
|
|
||||||
if (ret != paNoError)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
// Validate index
|
|
||||||
if ((UINT32)index >= paWasapi->deviceCount)
|
|
||||||
return paInvalidDevice;
|
|
||||||
|
|
||||||
size = min(formatSize, (UINT32)sizeof(paWasapi->devInfo[ index ].MixFormat));
|
|
||||||
memcpy(pFormat, &paWasapi->devInfo[ index ].MixFormat, size);
|
|
||||||
|
|
||||||
return size;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------
|
|
||||||
int PaWasapi_GetDeviceRole( PaDeviceIndex device )
|
|
||||||
{
|
{
|
||||||
PaError ret;
|
PaError ret;
|
||||||
PaDeviceIndex index;
|
PaDeviceIndex index;
|
||||||
|
|
@ -2602,36 +2536,93 @@ int PaWasapi_GetDeviceRole( PaDeviceIndex device )
|
||||||
return paNotInitialized;
|
return paNotInitialized;
|
||||||
|
|
||||||
// Get device index
|
// Get device index
|
||||||
ret = PaUtil_DeviceIndexToHostApiDeviceIndex(&index, device, &paWasapi->inheritedHostApiRep);
|
if ((ret = PaUtil_DeviceIndexToHostApiDeviceIndex(&index, device, &paWasapi->inheritedHostApiRep)) != paNoError)
|
||||||
if (ret != paNoError)
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
// Validate index
|
// Validate index
|
||||||
if ((UINT32)index >= paWasapi->deviceCount)
|
if ((UINT32)index >= paWasapi->deviceCount)
|
||||||
return paInvalidDevice;
|
return paInvalidDevice;
|
||||||
|
|
||||||
return paWasapi->devInfo[ index ].formFactor;
|
(*info) = &paWasapi->devInfo[ index ];
|
||||||
|
|
||||||
|
return paNoError;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------
|
||||||
int PaWasapi_GetIMMDevice( PaDeviceIndex device, void **pIMMDevice )
|
int PaWasapi_GetDeviceDefaultFormat( void *pFormat, unsigned int formatSize, PaDeviceIndex device )
|
||||||
{
|
{
|
||||||
PaError ret;
|
PaError ret;
|
||||||
PaDeviceIndex index;
|
PaWasapiDeviceInfo *deviceInfo;
|
||||||
|
UINT32 size;
|
||||||
|
|
||||||
PaWasapiHostApiRepresentation *paWasapi = _GetHostApi(&ret);
|
if (pFormat == NULL)
|
||||||
if (paWasapi == NULL)
|
return paBadBufferPtr;
|
||||||
return paNotInitialized;
|
if (formatSize <= 0)
|
||||||
|
return paBufferTooSmall;
|
||||||
|
|
||||||
ret = PaUtil_DeviceIndexToHostApiDeviceIndex(&index, device, &paWasapi->inheritedHostApiRep);
|
if ((ret = _GetWasapiDeviceInfoByDeviceIndex(&deviceInfo, device)) != paNoError)
|
||||||
if (ret != paNoError)
|
return ret;
|
||||||
return ret;
|
|
||||||
|
|
||||||
if ((UINT32)index >= paWasapi->deviceCount)
|
size = min(formatSize, (UINT32)sizeof(deviceInfo->DefaultFormat));
|
||||||
return paInvalidDevice;
|
memcpy(pFormat, &deviceInfo->DefaultFormat, size);
|
||||||
|
|
||||||
*pIMMDevice = paWasapi->devInfo[ index ].device;
|
return size;
|
||||||
return paNoError;
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------
|
||||||
|
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;
|
||||||
|
|
||||||
|
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;
|
||||||
|
PaWasapiDeviceInfo *deviceInfo;
|
||||||
|
|
||||||
|
if ((ret = _GetWasapiDeviceInfoByDeviceIndex(&deviceInfo, device)) != paNoError)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
return deviceInfo->formFactor;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------
|
||||||
|
PaError PaWasapi_GetIMMDevice( PaDeviceIndex device, void **pIMMDevice )
|
||||||
|
{
|
||||||
|
#ifndef PA_WINRT
|
||||||
|
PaError ret;
|
||||||
|
PaWasapiDeviceInfo *deviceInfo;
|
||||||
|
|
||||||
|
if (pIMMDevice == NULL)
|
||||||
|
return paBadBufferPtr;
|
||||||
|
|
||||||
|
if ((ret = _GetWasapiDeviceInfoByDeviceIndex(&deviceInfo, device)) != paNoError)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
(*pIMMDevice) = deviceInfo->device;
|
||||||
|
|
||||||
|
return paNoError;
|
||||||
|
#else
|
||||||
|
(void)device;
|
||||||
|
(void)pIMMDevice;
|
||||||
|
return paIncompatibleStreamHostApi;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------
|
||||||
|
|
@ -5197,7 +5188,7 @@ PaError PaWasapi_GetJackCount(PaDeviceIndex device, int *pJackCount)
|
||||||
#ifndef PA_WINRT
|
#ifndef PA_WINRT
|
||||||
PaError ret;
|
PaError ret;
|
||||||
HRESULT hr = S_OK;
|
HRESULT hr = S_OK;
|
||||||
PaDeviceIndex index;
|
PaWasapiDeviceInfo *deviceInfo;
|
||||||
IDeviceTopology *pDeviceTopology = NULL;
|
IDeviceTopology *pDeviceTopology = NULL;
|
||||||
IConnector *pConnFrom = NULL;
|
IConnector *pConnFrom = NULL;
|
||||||
IConnector *pConnTo = NULL;
|
IConnector *pConnTo = NULL;
|
||||||
|
|
@ -5205,24 +5196,14 @@ PaError PaWasapi_GetJackCount(PaDeviceIndex device, int *pJackCount)
|
||||||
IKsJackDescription *pJackDesc = NULL;
|
IKsJackDescription *pJackDesc = NULL;
|
||||||
UINT jackCount = 0;
|
UINT jackCount = 0;
|
||||||
|
|
||||||
PaWasapiHostApiRepresentation *paWasapi = _GetHostApi(&ret);
|
|
||||||
if (paWasapi == NULL)
|
|
||||||
return paNotInitialized;
|
|
||||||
|
|
||||||
if (pJackCount == NULL)
|
if (pJackCount == NULL)
|
||||||
return paUnanticipatedHostError;
|
return paUnanticipatedHostError;
|
||||||
|
|
||||||
// Get device index
|
if ((ret = _GetWasapiDeviceInfoByDeviceIndex(&deviceInfo, device)) != paNoError)
|
||||||
ret = PaUtil_DeviceIndexToHostApiDeviceIndex(&index, device, &paWasapi->inheritedHostApiRep);
|
|
||||||
if (ret != paNoError)
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
// Validate index
|
|
||||||
if ((UINT32)index >= paWasapi->deviceCount)
|
|
||||||
return paInvalidDevice;
|
|
||||||
|
|
||||||
// Get the endpoint device's IDeviceTopology interface
|
// 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);
|
CLSCTX_INPROC_SERVER, NULL, (void**)&pDeviceTopology);
|
||||||
IF_FAILED_JUMP(hr, error);
|
IF_FAILED_JUMP(hr, error);
|
||||||
|
|
||||||
|
|
@ -5372,7 +5353,7 @@ PaError PaWasapi_GetJackDescription(PaDeviceIndex device, int jackIndex, PaWasap
|
||||||
#ifndef PA_WINRT
|
#ifndef PA_WINRT
|
||||||
PaError ret;
|
PaError ret;
|
||||||
HRESULT hr = S_OK;
|
HRESULT hr = S_OK;
|
||||||
PaDeviceIndex index;
|
PaWasapiDeviceInfo *deviceInfo;
|
||||||
IDeviceTopology *pDeviceTopology = NULL;
|
IDeviceTopology *pDeviceTopology = NULL;
|
||||||
IConnector *pConnFrom = NULL;
|
IConnector *pConnFrom = NULL;
|
||||||
IConnector *pConnTo = NULL;
|
IConnector *pConnTo = NULL;
|
||||||
|
|
@ -5380,21 +5361,11 @@ PaError PaWasapi_GetJackDescription(PaDeviceIndex device, int jackIndex, PaWasap
|
||||||
IKsJackDescription *pJackDesc = NULL;
|
IKsJackDescription *pJackDesc = NULL;
|
||||||
KSJACK_DESCRIPTION jack = { 0 };
|
KSJACK_DESCRIPTION jack = { 0 };
|
||||||
|
|
||||||
PaWasapiHostApiRepresentation *paWasapi = _GetHostApi(&ret);
|
if ((ret = _GetWasapiDeviceInfoByDeviceIndex(&deviceInfo, device)) != paNoError)
|
||||||
if (paWasapi == NULL)
|
|
||||||
return paNotInitialized;
|
|
||||||
|
|
||||||
// Get device index
|
|
||||||
ret = PaUtil_DeviceIndexToHostApiDeviceIndex(&index, device, &paWasapi->inheritedHostApiRep);
|
|
||||||
if (ret != paNoError)
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
// Validate index
|
|
||||||
if ((UINT32)index >= paWasapi->deviceCount)
|
|
||||||
return paInvalidDevice;
|
|
||||||
|
|
||||||
// Get the endpoint device's IDeviceTopology interface
|
// 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);
|
CLSCTX_INPROC_SERVER, NULL, (void**)&pDeviceTopology);
|
||||||
IF_FAILED_JUMP(hr, error);
|
IF_FAILED_JUMP(hr, error);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue