obs-studio/plugins/win-wasapi/wasapi-notify.hpp
tt2468 1d5d4b29e7 win-wasapi: Handle changes to the default monitoring device
Splits the WASAPINotify class out of win-wasapi.cpp and makes it a
shared object in the plugin, then also creates a callback to reset
audio monitoring if the default output device changes.
2023-11-07 01:32:12 -06:00

35 lines
785 B
C++

#pragma once
#include <util/windows/ComPtr.hpp>
#include <Mmdeviceapi.h>
#include <unordered_map>
#include <functional>
#include <mutex>
typedef std::function<void(EDataFlow, ERole, LPCWSTR)>
WASAPINotifyDefaultDeviceChangedCallback;
class NotificationClient;
class WASAPINotify {
public:
WASAPINotify();
~WASAPINotify();
void AddDefaultDeviceChangedCallback(
void *handle, WASAPINotifyDefaultDeviceChangedCallback cb);
void RemoveDefaultDeviceChangedCallback(void *handle);
private:
void OnDefaultDeviceChanged(EDataFlow flow, ERole role, LPCWSTR id);
std::mutex mutex;
ComPtr<IMMDeviceEnumerator> enumerator;
ComPtr<NotificationClient> notificationClient;
std::unordered_map<void *, WASAPINotifyDefaultDeviceChangedCallback>
defaultDeviceChangedCallbacks;
};