int inputDeviceCount, outputDeviceCount;
int maximumPossibleDeviceCount;
PaWinMmeDeviceInfo *deviceInfoArray;
+ int initializedInfosCount;
int deviceInfoInitializationSucceeded;
PaTime defaultLowLatency, defaultHighLatency;
DWORD waveInPreferredDevice, waveOutPreferredDevice;
(DWORD_PTR)&waveOutPreferredDevice, (DWORD_PTR)&preferredDeviceStatusFlags ) != MMSYSERR_NOERROR )
waveOutPreferredDevice = WAVE_MAPPER;
+ initializedInfosCount = 0; /* incremented after successfully appending to deviceInfoArray */
+
maximumPossibleDeviceCount = 0;
#ifdef PAWIN_WMME_NO_WAVE_MAPPER
for( i = -1; i < inputDeviceCount; ++i ){
UINT winMmeDeviceId = (UINT)((i==-1) ? WAVE_MAPPER : i);
#endif
- PaWinMmeDeviceInfo *wmmeDeviceInfo = &deviceInfoArray[ *newDeviceCount ];
+ int deviceIndex = initializedInfosCount; /* host-api local index. append at end of deviceInfoArray */
+ PaWinMmeDeviceInfo *wmmeDeviceInfo = &deviceInfoArray[ deviceIndex ];
PaDeviceInfo *deviceInfo = &wmmeDeviceInfo->inheritedDeviceInfo;
deviceInfo->structVersion = 3;
deviceInfo->hostApi = hostApiIndex;
if( outArgument->defaultInputDevice == paNoDevice )
{
/* if there is currently no default device, use the first one available */
- outArgument->defaultInputDevice = *newDeviceCount;
+ outArgument->defaultInputDevice = deviceIndex;
}
else if( winMmeDeviceId == waveInPreferredDevice )
{
/* set the default device to the system preferred device */
- outArgument->defaultInputDevice = *newDeviceCount;
+ outArgument->defaultInputDevice = deviceIndex;
}
deviceInfo->connectionId = AssignDeviceConnectionId(
hostApi->deviceInfos, hostApi->info.deviceCount,
- outArgument->deviceInfos, *newDeviceCount,
+ outArgument->deviceInfos, initializedInfosCount,
wmmeDeviceInfo->deviceInterfaceName, /* isInput= */ 1 );
- outArgument->deviceInfos[ *newDeviceCount ] = deviceInfo;
+ outArgument->deviceInfos[ deviceIndex ] = deviceInfo;
+
outArgument->inputDeviceCount++;
- (*newDeviceCount)++;
+ initializedInfosCount++;
}
}
}
for( i = -1; i < outputDeviceCount; ++i ){
UINT winMmeDeviceId = (UINT)((i==-1) ? WAVE_MAPPER : i);
#endif
- PaWinMmeDeviceInfo *wmmeDeviceInfo = &deviceInfoArray[ *newDeviceCount ];
+ int deviceIndex = initializedInfosCount; /* host-api local index. append at end of deviceInfoArray */
+ PaWinMmeDeviceInfo *wmmeDeviceInfo = &deviceInfoArray[ deviceIndex ];
PaDeviceInfo *deviceInfo = &wmmeDeviceInfo->inheritedDeviceInfo;
deviceInfo->structVersion = 3;
deviceInfo->hostApi = hostApiIndex;
if( outArgument->defaultOutputDevice == paNoDevice )
{
/* if there is currently no default device, use the first one available */
- outArgument->defaultOutputDevice = *newDeviceCount;
+ outArgument->defaultOutputDevice = deviceIndex;
}
else if( winMmeDeviceId == waveOutPreferredDevice )
{
/* set the default device to the system preferred device */
- outArgument->defaultOutputDevice = *newDeviceCount;
+ outArgument->defaultOutputDevice = deviceIndex;
}
deviceInfo->connectionId = AssignDeviceConnectionId(
hostApi->deviceInfos, hostApi->info.deviceCount,
- outArgument->deviceInfos, *newDeviceCount,
+ outArgument->deviceInfos, initializedInfosCount,
wmmeDeviceInfo->deviceInterfaceName, /* isInput= */ 0 );
- outArgument->deviceInfos[ *newDeviceCount ] = deviceInfo;
+ outArgument->deviceInfos[ deviceIndex ] = deviceInfo;
+
outArgument->outputDeviceCount++;
- (*newDeviceCount)++;
+ initializedInfosCount++;
}
}
}
}
+ *newDeviceCount = initializedInfosCount;
*scanResults = outArgument;
return result;
error:
if( outArgument )
{
- FreeDeviceInfos( winMmeHostApi->allocations, outArgument->deviceInfos, *newDeviceCount );
+ FreeDeviceInfos( winMmeHostApi->allocations, outArgument->deviceInfos, initializedInfosCount );
}
- *newDeviceCount = 0;
return result;
}