Files
PowerToys/src/modules/videoconference/VideoConferenceModule/AudioDeviceNotificationClient.cpp
Andrey Nekrasov 176f2c2870 [VCM] Track newly added microphones (#16199)
* [VCM] Track newly added microphones when [All] is selected in the settings

* [VCM] handle case when no mics are left

* fixup: fix crashes onNotify

* fixup: fix build
2022-03-21 09:48:11 +00:00

79 lines
1.7 KiB
C++

#include "pch.h"
#include "AudioDeviceNotificationClient.h"
AudioDeviceNotificationClient::AudioDeviceNotificationClient()
{
(void)CoCreateInstance(__uuidof(MMDeviceEnumerator), nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&_deviceEnumerator));
if (!_deviceEnumerator)
{
return;
}
if (FAILED(_deviceEnumerator->RegisterEndpointNotificationCallback(this)))
{
_deviceEnumerator->Release();
_deviceEnumerator = nullptr;
}
}
AudioDeviceNotificationClient::~AudioDeviceNotificationClient()
{
if (!_deviceEnumerator)
{
return;
}
_deviceEnumerator->UnregisterEndpointNotificationCallback(this);
_deviceEnumerator->Release();
}
ULONG AudioDeviceNotificationClient::AddRef()
{
return 1;
}
ULONG AudioDeviceNotificationClient::Release()
{
return 1;
}
HRESULT AudioDeviceNotificationClient::QueryInterface(REFIID, void**)
{
return S_OK;
}
HRESULT AudioDeviceNotificationClient::OnPropertyValueChanged(LPCWSTR, const PROPERTYKEY)
{
_deviceConfigurationChanged = true;
return S_OK;
}
HRESULT AudioDeviceNotificationClient::OnDeviceAdded(LPCWSTR)
{
_deviceConfigurationChanged = true;
return S_OK;
}
HRESULT AudioDeviceNotificationClient::OnDeviceRemoved(LPCWSTR)
{
_deviceConfigurationChanged = true;
return S_OK;
}
HRESULT AudioDeviceNotificationClient::OnDeviceStateChanged(LPCWSTR, DWORD)
{
_deviceConfigurationChanged = true;
return S_OK;
}
HRESULT AudioDeviceNotificationClient::OnDefaultDeviceChanged(EDataFlow flow, ERole role, LPCWSTR)
{
if (role == eConsole && (flow == eCapture || flow == eAll))
{
_deviceConfigurationChanged = true;
}
return S_OK;
}