RealtimeMediaSourceCenterMac.cpp [plain text]
#include "config.h"
#if ENABLE(MEDIA_STREAM)
#include "RealtimeMediaSourceCenterMac.h"
#include "AVAudioSessionCaptureDeviceManager.h"
#include "AVCaptureDeviceManager.h"
#include "AVVideoCaptureSource.h"
#include "CoreAudioCaptureDeviceManager.h"
#include "CoreAudioCaptureSource.h"
#include "DisplayCaptureManagerCocoa.h"
#include "Logging.h"
#include "MediaStreamPrivate.h"
#include "ScreenDisplayCaptureSourceMac.h"
#include <wtf/MainThread.h>
namespace WebCore {
class VideoCaptureSourceFactoryMac final : public RealtimeMediaSource::VideoCaptureFactory
{
public:
CaptureSourceOrError createVideoCaptureSource(const CaptureDevice& device, const MediaConstraints* constraints) final
{
switch (device.type()) {
case CaptureDevice::DeviceType::Camera:
return AVVideoCaptureSource::create(device.persistentId(), constraints);
break;
case CaptureDevice::DeviceType::Screen:
#if PLATFORM(MAC)
return ScreenDisplayCaptureSourceMac::create(device.persistentId(), constraints);
break;
#endif
case CaptureDevice::DeviceType::Application:
case CaptureDevice::DeviceType::Window:
case CaptureDevice::DeviceType::Browser:
case CaptureDevice::DeviceType::Microphone:
case CaptureDevice::DeviceType::Unknown:
ASSERT_NOT_REACHED();
break;
}
return { };
}
#if PLATFORM(IOS)
private:
void setVideoCapturePageState(bool interrupted, bool pageMuted)
{
if (activeSource())
activeSource()->setInterrupted(interrupted, pageMuted);
}
#endif
};
RealtimeMediaSource::VideoCaptureFactory& RealtimeMediaSourceCenterMac::videoCaptureSourceFactory()
{
static NeverDestroyed<VideoCaptureSourceFactoryMac> factory;
return factory.get();
}
RealtimeMediaSource::AudioCaptureFactory& RealtimeMediaSourceCenterMac::audioCaptureSourceFactory()
{
return RealtimeMediaSourceCenterMac::singleton().audioFactory();
}
RealtimeMediaSourceCenterMac& RealtimeMediaSourceCenterMac::singleton()
{
ASSERT(isMainThread());
static NeverDestroyed<RealtimeMediaSourceCenterMac> center;
return center;
}
RealtimeMediaSourceCenter& RealtimeMediaSourceCenter::platformCenter()
{
return RealtimeMediaSourceCenterMac::singleton();
}
RealtimeMediaSourceCenterMac::RealtimeMediaSourceCenterMac() = default;
RealtimeMediaSourceCenterMac::~RealtimeMediaSourceCenterMac() = default;
RealtimeMediaSource::AudioCaptureFactory& RealtimeMediaSourceCenterMac::audioFactory()
{
if (m_audioFactoryOverride)
return *m_audioFactoryOverride;
return CoreAudioCaptureSource::factory();
}
RealtimeMediaSource::VideoCaptureFactory& RealtimeMediaSourceCenterMac::videoFactory()
{
return videoCaptureSourceFactory();
}
CaptureDeviceManager& RealtimeMediaSourceCenterMac::audioCaptureDeviceManager()
{
#if PLATFORM(MAC)
return CoreAudioCaptureDeviceManager::singleton();
#else
return AVAudioSessionCaptureDeviceManager::singleton();
#endif
}
CaptureDeviceManager& RealtimeMediaSourceCenterMac::videoCaptureDeviceManager()
{
return AVCaptureDeviceManager::singleton();
}
CaptureDeviceManager& RealtimeMediaSourceCenterMac::displayCaptureDeviceManager()
{
return DisplayCaptureManagerCocoa::singleton();
}
}
#endif // ENABLE(MEDIA_STREAM)