| 12345678910111213141516171819202122232425262728293031323334 |
- #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;
- };
|