CoreAudioCaptureDeviceManager.h [plain text]
#pragma once
#if ENABLE(MEDIA_STREAM) && PLATFORM(MAC)
#include "CaptureDevice.h"
#include "CaptureDeviceManager.h"
#include "GenericTaskQueue.h"
#include <CoreAudio/CoreAudio.h>
#include <wtf/HashMap.h>
#include <wtf/RefPtr.h>
#include <wtf/text/WTFString.h>
namespace WebCore {
class CoreAudioCaptureDevice;
class CoreAudioCaptureDeviceManager final : public CaptureDeviceManager {
friend class NeverDestroyed<CoreAudioCaptureDeviceManager>;
public:
static CoreAudioCaptureDeviceManager& singleton();
const Vector<CaptureDevice>& captureDevices() final;
Optional<CaptureDevice> captureDeviceWithPersistentID(CaptureDevice::DeviceType, const String&);
Optional<CoreAudioCaptureDevice> coreAudioDeviceWithUID(const String&);
const Vector<CaptureDevice>& speakerDevices() const { return m_speakerDevices; }
private:
CoreAudioCaptureDeviceManager() = default;
~CoreAudioCaptureDeviceManager() = default;
Vector<CoreAudioCaptureDevice>& coreAudioCaptureDevices();
enum class NotifyIfDevicesHaveChanged { Notify, DoNotNotify };
void refreshAudioCaptureDevices(NotifyIfDevicesHaveChanged);
void scheduleUpdateCaptureDevices();
Vector<CaptureDevice> m_captureDevices;
Vector<CaptureDevice> m_speakerDevices;
Vector<CoreAudioCaptureDevice> m_coreAudioCaptureDevices;
GenericTaskQueue<Timer> m_updateDeviceStateQueue;
};
}
#endif // ENABLE(MEDIA_STREAM) && PLATFORM(MAC)