MockRealtimeMediaSource.cpp [plain text]
#include "config.h"
#include "MockRealtimeMediaSource.h"
#if ENABLE(MEDIA_STREAM)
#include "CaptureDevice.h"
#include "Logging.h"
#include "MediaConstraints.h"
#include "NotImplemented.h"
#include "RealtimeMediaSourceSettings.h"
#include <math.h>
#include <wtf/CurrentTime.h>
#include <wtf/NeverDestroyed.h>
#include <wtf/text/StringView.h>
namespace WebCore {
Vector<CaptureDevice>& MockRealtimeMediaSource::audioDevices()
{
static NeverDestroyed<Vector<CaptureDevice>> info;
if (!info.get().size()) {
auto captureDevice = CaptureDevice("239c24b0-2b15-11e3-8224-0800200c9a66", CaptureDevice::DeviceType::Audio, "Mock audio device 1");
captureDevice.setEnabled(true);
info.get().append(captureDevice);
captureDevice = CaptureDevice("239c24b1-2b15-11e3-8224-0800200c9a66", CaptureDevice::DeviceType::Audio, "Mock audio device 2");
captureDevice.setEnabled(true);
info.get().append(captureDevice);
}
return info;
}
Vector<CaptureDevice>& MockRealtimeMediaSource::videoDevices()
{
static NeverDestroyed<Vector<CaptureDevice>> info;
if (!info.get().size()) {
auto captureDevice = CaptureDevice("239c24b2-2b15-11e3-8224-0800200c9a66", CaptureDevice::DeviceType::Video, "Mock video device 1");
captureDevice.setEnabled(true);
info.get().append(captureDevice);
captureDevice = CaptureDevice("239c24b3-2b15-11e3-8224-0800200c9a66", CaptureDevice::DeviceType::Video, "Mock video device 2");
captureDevice.setEnabled(true);
info.get().append(captureDevice);
}
return info;
}
MockRealtimeMediaSource::MockRealtimeMediaSource(const String& id, RealtimeMediaSource::Type type, const String& name)
: BaseRealtimeMediaSourceClass(id, type, name)
{
switch (type) {
case RealtimeMediaSource::Type::Audio:
m_deviceIndex = name == audioDevices()[0].label() ? 0 : 1;
setPersistentID(String(audioDevices()[m_deviceIndex].persistentId()));
return;
case RealtimeMediaSource::Type::Video:
m_deviceIndex = name == videoDevices()[0].label() ? 0 : 1;
setPersistentID(String(videoDevices()[m_deviceIndex].persistentId()));
return;
case RealtimeMediaSource::Type::None:
ASSERT_NOT_REACHED();
}
}
void MockRealtimeMediaSource::initializeCapabilities()
{
m_capabilities = std::make_unique<RealtimeMediaSourceCapabilities>(supportedConstraints());
m_capabilities->setDeviceId(id());
initializeCapabilities(*m_capabilities.get());
}
const RealtimeMediaSourceCapabilities& MockRealtimeMediaSource::capabilities() const
{
if (!m_capabilities)
const_cast<MockRealtimeMediaSource&>(*this).initializeCapabilities();
return *m_capabilities;
}
void MockRealtimeMediaSource::initializeSettings()
{
if (m_currentSettings.deviceId().isEmpty()) {
m_currentSettings.setSupportedConstraints(supportedConstraints());
m_currentSettings.setDeviceId(id());
}
updateSettings(m_currentSettings);
}
const RealtimeMediaSourceSettings& MockRealtimeMediaSource::settings() const
{
const_cast<MockRealtimeMediaSource&>(*this).initializeSettings();
return m_currentSettings;
}
RealtimeMediaSourceSupportedConstraints& MockRealtimeMediaSource::supportedConstraints()
{
if (m_supportedConstraints.supportsDeviceId())
return m_supportedConstraints;
m_supportedConstraints.setSupportsDeviceId(true);
initializeSupportedConstraints(m_supportedConstraints);
return m_supportedConstraints;
}
}
#endif // ENABLE(MEDIA_STREAM)