Exemplo n.º 1
0
// The return value should be TRUE OR FALSE means enabled or disabled.
AUDIO_DEVICE_API BOOL GetCaptureListDeviceState(DeviceInfo *pDeviceInfo, int index)
{
	InternalDeviceInfo *pInternalDeviceInfo = (InternalDeviceInfo *) pDeviceInfo;

    HRESULT hr = S_OK;
    IMMDevice *pDevice = NULL;

    if (pInternalDeviceInfo->pCaptureCollection != NULL) {
        hr = pInternalDeviceInfo->pCaptureCollection->Item(index, &pDevice);
    }

    // assert(hr == S_OK);

	DWORD dwState;
	pDevice->GetState(&dwState);

	SAFE_RELEASE(pDevice);

	return dwState == DEVICE_STATE_ACTIVE ? TRUE : FALSE;
}
Exemplo n.º 2
0
	std::vector<IMMDevice*> AudioMasterMind::getActiveDevices()
	{
		CoInitialize(NULL);

		IMMDeviceEnumerator* deviceEnumeratorPtr = NULL;
		HRESULT hr = CoCreateInstance(
			__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL,
			__uuidof(IMMDeviceEnumerator),
			(void**)&deviceEnumeratorPtr
		);

		if (FAILED(hr))
		{
			BOOST_LOG_TRIVIAL(error) << "Failed to create IMMDeviceEnumerator hr:" << hr;
			throw std::logic_error{ "Failed to create IMMDeviceEnumerator" };
		}

		IMMDeviceCollection* deviceCollectionPtr = NULL;
		hr = deviceEnumeratorPtr->EnumAudioEndpoints(eAll, DEVICE_STATEMASK_ALL, &deviceCollectionPtr);

		if (FAILED(hr))
		{
			BOOST_LOG_TRIVIAL(error) << "Failed to enumerate audio endpoints ";
			throw std::logic_error{ "Failed to enumerate audio endpoints" };
			
		}

		UINT deviceCount = 0;
		hr = deviceCollectionPtr->GetCount(&deviceCount);

		if (FAILED(hr))
		{
			BOOST_LOG_TRIVIAL(error) << "Failed to get the count of devices";
			throw std::logic_error{ "Failed to get Device count" };
			
		}

		BOOST_LOG_TRIVIAL(info) << "Device Count is: " << deviceCount;

		std::vector<IMMDevice*> activeDevices;

		for (unsigned int i = 0; i < deviceCount; ++i)
		{
			IMMDevice* devicePtr = NULL;
			hr = deviceCollectionPtr->Item(i, &devicePtr);
			if (FAILED(hr))
			{
				BOOST_LOG_TRIVIAL(error) << "Failed to get device no. " << i;
				throw std::logic_error{ "Failed to get Device Ptr" };
			}

			DWORD deviceState;
			hr = devicePtr->GetState(&deviceState);

			if (FAILED(hr))
			{
				BOOST_LOG_TRIVIAL(error) << "Failed to get devices state: " << hr;
				throw std::logic_error{ "Failed to get Device State" };
				
			}
			

			if (deviceState == DEVICE_STATE_ACTIVE)
			{
				activeDevices.push_back(devicePtr);
			}

		}
		return activeDevices;

	}