Diff
Modified: trunk/Source/WebCore/ChangeLog (215361 => 215362)
--- trunk/Source/WebCore/ChangeLog 2017-04-14 15:13:09 UTC (rev 215361)
+++ trunk/Source/WebCore/ChangeLog 2017-04-14 16:04:52 UTC (rev 215362)
@@ -1,3 +1,52 @@
+2017-04-14 Jer Noble <jer.no...@apple.com>
+
+ [MediaSource] Push capabilities across process boundary during UIProcess capture.
+ https://bugs.webkit.org/show_bug.cgi?id=170814
+
+ Reviewed by Eric Carlson.
+
+ There's no real reason for RealtimeMediaSourceCapabilities to be RefCounted nor to keep them from
+ being created on the stack. So in addition to making that class coder-compliant, change all the
+ classes that vend capabilities to use a unique_ptr<> instead of a RefPtr<>.
+
+ * Modules/mediastream/CanvasCaptureMediaStreamTrack.h:
+ * Modules/webaudio/MediaStreamAudioSource.cpp:
+ (WebCore::MediaStreamAudioSource::capabilities):
+ * Modules/webaudio/MediaStreamAudioSource.h:
+ * platform/mediastream/MediaEndpoint.cpp:
+ * platform/mediastream/MediaStreamTrackPrivate.cpp:
+ (WebCore::MediaStreamTrackPrivate::capabilities):
+ * platform/mediastream/MediaStreamTrackPrivate.h:
+ * platform/mediastream/RealtimeMediaSource.h:
+ * platform/mediastream/RealtimeMediaSourceCapabilities.h:
+ (WebCore::CapabilityValueOrRange::encode):
+ (WebCore::CapabilityValueOrRange::decode):
+ (WebCore::RealtimeMediaSourceCapabilities::RealtimeMediaSourceCapabilities):
+ (WebCore::RealtimeMediaSourceCapabilities::supportedConstraints):
+ (WebCore::RealtimeMediaSourceCapabilities::setSupportedConstraints):
+ (WebCore::RealtimeMediaSourceCapabilities::encode):
+ (WebCore::RealtimeMediaSourceCapabilities::decode):
+ (WebCore::RealtimeMediaSourceCapabilities::create): Deleted.
+ * platform/mediastream/RealtimeMediaSourceSettings.h:
+ * platform/mediastream/mac/AVMediaCaptureSource.h:
+ * platform/mediastream/mac/AVMediaCaptureSource.mm:
+ (WebCore::AVMediaCaptureSource::initializeCapabilities):
+ (WebCore::AVMediaCaptureSource::capabilities):
+ * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
+ (WebCore::CoreAudioCaptureSource::capabilities):
+ * platform/mediastream/mac/CoreAudioCaptureSource.h:
+ * platform/mediastream/mac/RealtimeIncomingAudioSource.cpp:
+ (WebCore::RealtimeIncomingAudioSource::capabilities):
+ * platform/mediastream/mac/RealtimeIncomingAudioSource.h:
+ * platform/mediastream/mac/RealtimeIncomingVideoSource.cpp:
+ (WebCore::RealtimeIncomingVideoSource::capabilities):
+ * platform/mediastream/mac/RealtimeIncomingVideoSource.h:
+ * platform/mock/MockRealtimeMediaSource.cpp:
+ (WebCore::MockRealtimeMediaSource::initializeCapabilities):
+ (WebCore::MockRealtimeMediaSource::capabilities):
+ * platform/mock/MockRealtimeMediaSource.h:
+ * platform/mediastream/openwebrtc/RealtimeMediaSourceOwr.h:
+
2017-04-13 Saam Barati <sbar...@apple.com>
WebAssembly: We should be able to postMessage a JSWebAssemblyModule
Modified: trunk/Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.h (215361 => 215362)
--- trunk/Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.h 2017-04-14 15:13:09 UTC (rev 215361)
+++ trunk/Source/WebCore/Modules/mediastream/CanvasCaptureMediaStreamTrack.h 2017-04-14 16:04:52 UTC (rev 215362)
@@ -63,7 +63,7 @@
void startProducingData() final;
void stopProducingData() final;
bool isProducingData() const { return m_isProducingData; }
- RefPtr<RealtimeMediaSourceCapabilities> capabilities() const final { return nullptr; }
+ const RealtimeMediaSourceCapabilities& capabilities() const final { return RealtimeMediaSourceCapabilities::emptyCapabilities(); }
const RealtimeMediaSourceSettings& settings() const final { return m_settings; }
bool applySize(const IntSize&) final { return true; }
Modified: trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp (215361 => 215362)
--- trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp 2017-04-14 15:13:09 UTC (rev 215361)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp 2017-04-14 16:04:52 UTC (rev 215362)
@@ -216,28 +216,28 @@
{
auto capabilities = m_private->capabilities();
TrackCapabilities result;
- if (capabilities->supportsWidth())
- result.width = capabilityIntRange(capabilities->width());
- if (capabilities->supportsHeight())
- result.height = capabilityIntRange(capabilities->height());
- if (capabilities->supportsAspectRatio())
- result.aspectRatio = capabilityDoubleRange(capabilities->aspectRatio());
- if (capabilities->supportsFrameRate())
- result.frameRate = capabilityDoubleRange(capabilities->frameRate());
- if (capabilities->supportsFacingMode())
- result.facingMode = capabilityStringVector(capabilities->facingMode());
- if (capabilities->supportsVolume())
- result.volume = capabilityDoubleRange(capabilities->volume());
- if (capabilities->supportsSampleRate())
- result.sampleRate = capabilityIntRange(capabilities->sampleRate());
- if (capabilities->supportsSampleSize())
- result.sampleSize = capabilityIntRange(capabilities->sampleSize());
- if (capabilities->supportsEchoCancellation())
- result.echoCancellation = capabilityBooleanVector(capabilities->echoCancellation());
- if (capabilities->supportsDeviceId())
- result.deviceId = capabilities->deviceId();
- if (capabilities->supportsGroupId())
- result.groupId = capabilities->groupId();
+ if (capabilities.supportsWidth())
+ result.width = capabilityIntRange(capabilities.width());
+ if (capabilities.supportsHeight())
+ result.height = capabilityIntRange(capabilities.height());
+ if (capabilities.supportsAspectRatio())
+ result.aspectRatio = capabilityDoubleRange(capabilities.aspectRatio());
+ if (capabilities.supportsFrameRate())
+ result.frameRate = capabilityDoubleRange(capabilities.frameRate());
+ if (capabilities.supportsFacingMode())
+ result.facingMode = capabilityStringVector(capabilities.facingMode());
+ if (capabilities.supportsVolume())
+ result.volume = capabilityDoubleRange(capabilities.volume());
+ if (capabilities.supportsSampleRate())
+ result.sampleRate = capabilityIntRange(capabilities.sampleRate());
+ if (capabilities.supportsSampleSize())
+ result.sampleSize = capabilityIntRange(capabilities.sampleSize());
+ if (capabilities.supportsEchoCancellation())
+ result.echoCancellation = capabilityBooleanVector(capabilities.echoCancellation());
+ if (capabilities.supportsDeviceId())
+ result.deviceId = capabilities.deviceId();
+ if (capabilities.supportsGroupId())
+ result.groupId = capabilities.groupId();
return result;
}
Modified: trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSource.cpp (215361 => 215362)
--- trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSource.cpp 2017-04-14 15:13:09 UTC (rev 215361)
+++ trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSource.cpp 2017-04-14 16:04:52 UTC (rev 215362)
@@ -44,12 +44,12 @@
{
}
-RefPtr<RealtimeMediaSourceCapabilities> MediaStreamAudioSource::capabilities() const
+const RealtimeMediaSourceCapabilities& MediaStreamAudioSource::capabilities() const
{
// FIXME: implement this.
// https://bugs.webkit.org/show_bug.cgi?id=122430
notImplemented();
- return nullptr;
+ return RealtimeMediaSourceCapabilities::emptyCapabilities();
}
const RealtimeMediaSourceSettings& MediaStreamAudioSource::settings() const
Modified: trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSource.h (215361 => 215362)
--- trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSource.h 2017-04-14 15:13:09 UTC (rev 215361)
+++ trunk/Source/WebCore/Modules/webaudio/MediaStreamAudioSource.h 2017-04-14 16:04:52 UTC (rev 215362)
@@ -46,7 +46,7 @@
~MediaStreamAudioSource() { }
- RefPtr<RealtimeMediaSourceCapabilities> capabilities() const final;
+ const RealtimeMediaSourceCapabilities& capabilities() const final;
const RealtimeMediaSourceSettings& settings() const final;
const String& deviceId() const { return m_deviceId; }
Modified: trunk/Source/WebCore/platform/mediastream/MediaEndpoint.cpp (215361 => 215362)
--- trunk/Source/WebCore/platform/mediastream/MediaEndpoint.cpp 2017-04-14 15:13:09 UTC (rev 215361)
+++ trunk/Source/WebCore/platform/mediastream/MediaEndpoint.cpp 2017-04-14 16:04:52 UTC (rev 215362)
@@ -46,7 +46,7 @@
private:
EmptyRealtimeMediaSource() : RealtimeMediaSource(emptyString(), Type::None, emptyString()) { }
- RefPtr<RealtimeMediaSourceCapabilities> capabilities() const final { return nullptr; }
+ const RealtimeMediaSourceCapabilities& capabilities() const final { return RealtimeMediaSourceCapabilities::emptyCapabilities(); }
const RealtimeMediaSourceSettings& settings() const final { return m_sourceSettings; }
RealtimeMediaSourceSettings m_sourceSettings;
Modified: trunk/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp (215361 => 215362)
--- trunk/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp 2017-04-14 15:13:09 UTC (rev 215361)
+++ trunk/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp 2017-04-14 16:04:52 UTC (rev 215362)
@@ -136,7 +136,7 @@
return m_source->settings();
}
-RefPtr<RealtimeMediaSourceCapabilities> MediaStreamTrackPrivate::capabilities() const
+const RealtimeMediaSourceCapabilities& MediaStreamTrackPrivate::capabilities() const
{
return m_source->capabilities();
}
Modified: trunk/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.h (215361 => 215362)
--- trunk/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.h 2017-04-14 15:13:09 UTC (rev 215361)
+++ trunk/Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.h 2017-04-14 16:04:52 UTC (rev 215362)
@@ -87,7 +87,7 @@
void removeObserver(Observer&);
const RealtimeMediaSourceSettings& settings() const;
- RefPtr<RealtimeMediaSourceCapabilities> capabilities() const;
+ const RealtimeMediaSourceCapabilities& capabilities() const;
void applyConstraints(const MediaConstraints&, RealtimeMediaSource::SuccessHandler, RealtimeMediaSource::FailureHandler);
Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp (215361 => 215362)
--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp 2017-04-14 15:13:09 UTC (rev 215361)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp 2017-04-14 16:04:52 UTC (rev 215362)
@@ -184,8 +184,7 @@
if (!widthConstraint && !heightConstraint && !frameRateConstraint)
return true;
- ASSERT(this->capabilities());
- RealtimeMediaSourceCapabilities& capabilities = *this->capabilities();
+ auto& capabilities = this->capabilities();
distance = std::numeric_limits<double>::infinity();
@@ -244,8 +243,7 @@
double RealtimeMediaSource::fitnessDistance(const MediaConstraint& constraint)
{
- ASSERT(this->capabilities());
- RealtimeMediaSourceCapabilities& capabilities = *this->capabilities();
+ auto& capabilities = this->capabilities();
switch (constraint.constraintType()) {
case MediaConstraintType::Width: {
@@ -388,7 +386,7 @@
void RealtimeMediaSource::applyConstraint(const MediaConstraint& constraint)
{
- RealtimeMediaSourceCapabilities& capabilities = *this->capabilities();
+ auto& capabilities = this->capabilities();
switch (constraint.constraintType()) {
case MediaConstraintType::Width: {
ASSERT(constraint.isInt());
@@ -612,8 +610,7 @@
bool RealtimeMediaSource::supportsConstraint(const MediaConstraint& constraint) const
{
- ASSERT(this->capabilities());
- RealtimeMediaSourceCapabilities& capabilities = *this->capabilities();
+ auto& capabilities = this->capabilities();
switch (constraint.constraintType()) {
case MediaConstraintType::Width:
@@ -697,7 +694,7 @@
beginConfiguration();
- RealtimeMediaSourceCapabilities& capabilities = *this->capabilities();
+ auto& capabilities = this->capabilities();
std::optional<int> width;
if (const MediaConstraint* constraint = constraints.find(MediaConstraintType::Width)) {
Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h (215361 => 215362)
--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h 2017-04-14 15:13:09 UTC (rev 215361)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h 2017-04-14 16:04:52 UTC (rev 215362)
@@ -107,7 +107,7 @@
virtual unsigned fitnessScore() const { return m_fitnessScore; }
- virtual RefPtr<RealtimeMediaSourceCapabilities> capabilities() const = 0;
+ virtual const RealtimeMediaSourceCapabilities& capabilities() const = 0;
virtual const RealtimeMediaSourceSettings& settings() const = 0;
using SuccessHandler = std::function<void()>;
Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCapabilities.h (215361 => 215362)
--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCapabilities.h 2017-04-14 15:13:09 UTC (rev 215361)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCapabilities.h 2017-04-14 16:04:52 UTC (rev 215362)
@@ -29,6 +29,7 @@
#if ENABLE(MEDIA_STREAM)
#include "RealtimeMediaSourceSettings.h"
+#include <wtf/NeverDestroyed.h>
#include <wtf/RefCounted.h>
#include <wtf/Vector.h>
#include <wtf/text/AtomicString.h>
@@ -101,6 +102,9 @@
return m_minOrValue;
}
+ template<class Encoder> void encode(Encoder&) const;
+ template<class Decoder> static bool decode(Decoder&, CapabilityValueOrRange&);
+
private:
ValueUnion m_minOrValue;
ValueUnion m_max;
@@ -107,45 +111,68 @@
Type m_type;
};
-class RealtimeMediaSourceCapabilities : public RefCounted<RealtimeMediaSourceCapabilities> {
+template<class Encoder>
+void CapabilityValueOrRange::encode(Encoder& encoder) const
+{
+ encoder.encodeFixedLengthData(reinterpret_cast<const uint8_t*>(&m_minOrValue), sizeof(ValueUnion), alignof(ValueUnion));
+ encoder.encodeFixedLengthData(reinterpret_cast<const uint8_t*>(&m_max), sizeof(ValueUnion), alignof(ValueUnion));
+ encoder.encodeEnum(m_type);
+}
+
+template<class Decoder>
+bool CapabilityValueOrRange::decode(Decoder& decoder, CapabilityValueOrRange& valueOrRange)
+{
+ return decoder.decodeFixedLengthData(reinterpret_cast<uint8_t*>(&valueOrRange.m_minOrValue), sizeof(ValueUnion), alignof(ValueUnion))
+ && decoder.decodeFixedLengthData(reinterpret_cast<uint8_t*>(&valueOrRange.m_max), sizeof(ValueUnion), alignof(ValueUnion))
+ && decoder.decodeEnum(valueOrRange.m_type);
+}
+
+class RealtimeMediaSourceCapabilities {
public:
- static PassRefPtr<RealtimeMediaSourceCapabilities> create(const RealtimeMediaSourceSupportedConstraints& supportedConstraints)
+ RealtimeMediaSourceCapabilities() = default;
+ RealtimeMediaSourceCapabilities(const RealtimeMediaSourceSupportedConstraints& supportedConstraints)
+ : m_supportedConstraints(supportedConstraints)
{
- return adoptRef(new RealtimeMediaSourceCapabilities(supportedConstraints));
}
- ~RealtimeMediaSourceCapabilities() { }
+ ~RealtimeMediaSourceCapabilities() = default;
+ static const RealtimeMediaSourceCapabilities& emptyCapabilities()
+ {
+ static NeverDestroyed<RealtimeMediaSourceCapabilities> emptyCapabilities;
+ return emptyCapabilities;
+ }
+
bool supportsWidth() const { return m_supportedConstraints.supportsWidth(); }
- const CapabilityValueOrRange& width() { return m_width; }
+ const CapabilityValueOrRange& width() const { return m_width; }
void setWidth(const CapabilityValueOrRange& width) { m_width = width; }
bool supportsHeight() const { return m_supportedConstraints.supportsHeight(); }
- const CapabilityValueOrRange& height() { return m_height; }
+ const CapabilityValueOrRange& height() const { return m_height; }
void setHeight(const CapabilityValueOrRange& height) { m_height = height; }
bool supportsFrameRate() const { return m_supportedConstraints.supportsFrameRate(); }
- const CapabilityValueOrRange& frameRate() { return m_frameRate; }
+ const CapabilityValueOrRange& frameRate() const { return m_frameRate; }
void setFrameRate(const CapabilityValueOrRange& frameRate) { m_frameRate = frameRate; }
bool supportsFacingMode() const { return m_supportedConstraints.supportsFacingMode(); }
- const Vector<RealtimeMediaSourceSettings::VideoFacingMode>& facingMode() { return m_facingMode; }
+ const Vector<RealtimeMediaSourceSettings::VideoFacingMode>& facingMode() const { return m_facingMode; }
void addFacingMode(RealtimeMediaSourceSettings::VideoFacingMode mode) { m_facingMode.append(mode); }
bool supportsAspectRatio() const { return m_supportedConstraints.supportsAspectRatio(); }
- const CapabilityValueOrRange& aspectRatio() { return m_aspectRatio; }
+ const CapabilityValueOrRange& aspectRatio() const { return m_aspectRatio; }
void setAspectRatio(const CapabilityValueOrRange& aspectRatio) { m_aspectRatio = aspectRatio; }
bool supportsVolume() const { return m_supportedConstraints.supportsVolume(); }
- const CapabilityValueOrRange& volume() { return m_volume; }
+ const CapabilityValueOrRange& volume() const { return m_volume; }
void setVolume(const CapabilityValueOrRange& volume) { m_volume = volume; }
bool supportsSampleRate() const { return m_supportedConstraints.supportsSampleRate(); }
- const CapabilityValueOrRange& sampleRate() { return m_sampleRate; }
+ const CapabilityValueOrRange& sampleRate() const { return m_sampleRate; }
void setSampleRate(const CapabilityValueOrRange& sampleRate) { m_sampleRate = sampleRate; }
bool supportsSampleSize() const { return m_supportedConstraints.supportsSampleSize(); }
- const CapabilityValueOrRange& sampleSize() { return m_sampleSize; }
+ const CapabilityValueOrRange& sampleSize() const { return m_sampleSize; }
void setSampleSize(const CapabilityValueOrRange& sampleSize) { m_sampleSize = sampleSize; }
enum class EchoCancellation {
@@ -153,23 +180,24 @@
ReadWrite = 1,
};
bool supportsEchoCancellation() const { return m_supportedConstraints.supportsEchoCancellation(); }
- EchoCancellation echoCancellation() { return m_echoCancellation; }
+ EchoCancellation echoCancellation() const { return m_echoCancellation; }
void setEchoCancellation(EchoCancellation echoCancellation) { m_echoCancellation = echoCancellation; }
bool supportsDeviceId() const { return m_supportedConstraints.supportsDeviceId(); }
- const AtomicString& deviceId() { return m_deviceId; }
+ const AtomicString& deviceId() const { return m_deviceId; }
void setDeviceId(const AtomicString& id) { m_deviceId = id; }
bool supportsGroupId() const { return m_supportedConstraints.supportsGroupId(); }
- const AtomicString& groupId() { return m_groupId; }
+ const AtomicString& groupId() const { return m_groupId; }
void setGroupId(const AtomicString& id) { m_groupId = id; }
+ const RealtimeMediaSourceSupportedConstraints& supportedConstraints() const { return m_supportedConstraints; }
+ void setSupportedConstraints(const RealtimeMediaSourceSupportedConstraints& constraints) { m_supportedConstraints = constraints; }
+
+ template<class Encoder> void encode(Encoder&) const;
+ template<class Decoder> static bool decode(Decoder&, RealtimeMediaSourceCapabilities&);
+
private:
- RealtimeMediaSourceCapabilities(const RealtimeMediaSourceSupportedConstraints& supportedConstraints)
- : m_supportedConstraints(supportedConstraints)
- {
- }
-
CapabilityValueOrRange m_width;
CapabilityValueOrRange m_height;
CapabilityValueOrRange m_aspectRatio;
@@ -182,9 +210,43 @@
AtomicString m_deviceId;
AtomicString m_groupId;
- const RealtimeMediaSourceSupportedConstraints& m_supportedConstraints;
+ RealtimeMediaSourceSupportedConstraints m_supportedConstraints;
};
+template<class Encoder>
+void RealtimeMediaSourceCapabilities::encode(Encoder& encoder) const
+{
+ encoder << m_width
+ << m_height
+ << m_aspectRatio
+ << m_frameRate
+ << m_facingMode
+ << m_volume
+ << m_sampleRate
+ << m_sampleSize
+ << m_deviceId
+ << m_groupId
+ << m_supportedConstraints;
+ encoder.encodeEnum(m_echoCancellation);
+}
+
+template<class Decoder>
+bool RealtimeMediaSourceCapabilities::decode(Decoder& decoder, RealtimeMediaSourceCapabilities& capabilities)
+{
+ return decoder.decode(capabilities.m_width)
+ && decoder.decode(capabilities.m_height)
+ && decoder.decode(capabilities.m_aspectRatio)
+ && decoder.decode(capabilities.m_frameRate)
+ && decoder.decode(capabilities.m_facingMode)
+ && decoder.decode(capabilities.m_volume)
+ && decoder.decode(capabilities.m_sampleRate)
+ && decoder.decode(capabilities.m_sampleSize)
+ && decoder.decode(capabilities.m_deviceId)
+ && decoder.decode(capabilities.m_groupId)
+ && decoder.decode(capabilities.m_supportedConstraints)
+ && decoder.decodeEnum(capabilities.m_echoCancellation);
+}
+
} // namespace WebCore
#endif // RealtimeMediaSourceCapabilities_h
Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceSettings.h (215361 => 215362)
--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceSettings.h 2017-04-14 15:13:09 UTC (rev 215361)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceSettings.h 2017-04-14 16:04:52 UTC (rev 215362)
@@ -29,6 +29,7 @@
#if ENABLE(MEDIA_STREAM)
#include "RealtimeMediaSourceSupportedConstraints.h"
+#include <wtf/EnumTraits.h>
#include <wtf/RefCounted.h>
#include <wtf/Vector.h>
#include <wtf/text/AtomicString.h>
@@ -150,6 +151,21 @@
} // namespace WebCore
+namespace WTF {
+
+template <> struct EnumTraits<WebCore::RealtimeMediaSourceSettings::VideoFacingMode> {
+ using values = EnumValues<
+ WebCore::RealtimeMediaSourceSettings::VideoFacingMode,
+ WebCore::RealtimeMediaSourceSettings::VideoFacingMode::Unknown,
+ WebCore::RealtimeMediaSourceSettings::VideoFacingMode::User,
+ WebCore::RealtimeMediaSourceSettings::VideoFacingMode::Environment,
+ WebCore::RealtimeMediaSourceSettings::VideoFacingMode::Left,
+ WebCore::RealtimeMediaSourceSettings::VideoFacingMode::Right
+ >;
+};
+
+}
+
#endif // RealtimeMediaSourceSettings_h
#endif
Modified: trunk/Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.h (215361 => 215362)
--- trunk/Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.h 2017-04-14 15:13:09 UTC (rev 215361)
+++ trunk/Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.h 2017-04-14 16:04:52 UTC (rev 215362)
@@ -84,7 +84,7 @@
AVCaptureDevice *device() const { return m_device.get(); }
RealtimeMediaSourceSupportedConstraints& supportedConstraints();
- RefPtr<RealtimeMediaSourceCapabilities> capabilities() const final;
+ const RealtimeMediaSourceCapabilities& capabilities() const final;
void setVideoSampleBufferDelegate(AVCaptureVideoDataOutput*);
void setAudioSampleBufferDelegate(AVCaptureAudioDataOutput*);
@@ -104,7 +104,7 @@
RealtimeMediaSourceSettings m_currentSettings;
RealtimeMediaSourceSupportedConstraints m_supportedConstraints;
RetainPtr<WebCoreAVMediaCaptureSourceObserver> m_objcObserver;
- RefPtr<RealtimeMediaSourceCapabilities> m_capabilities;
+ std::unique_ptr<RealtimeMediaSourceCapabilities> m_capabilities;
RetainPtr<AVCaptureSession> m_session;
RetainPtr<AVCaptureDevice> m_device;
InterruptionReason m_interruption { InterruptionReason::None };
Modified: trunk/Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.mm (215361 => 215362)
--- trunk/Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.mm 2017-04-14 15:13:09 UTC (rev 215361)
+++ trunk/Source/WebCore/platform/mediastream/mac/AVMediaCaptureSource.mm 2017-04-14 16:04:52 UTC (rev 215362)
@@ -229,17 +229,17 @@
void AVMediaCaptureSource::initializeCapabilities()
{
- m_capabilities = RealtimeMediaSourceCapabilities::create(supportedConstraints());
+ m_capabilities = std::make_unique<RealtimeMediaSourceCapabilities>(supportedConstraints());
m_capabilities->setDeviceId(id());
initializeCapabilities(*m_capabilities.get());
}
-RefPtr<RealtimeMediaSourceCapabilities> AVMediaCaptureSource::capabilities() const
+const RealtimeMediaSourceCapabilities& AVMediaCaptureSource::capabilities() const
{
if (!m_capabilities)
const_cast<AVMediaCaptureSource&>(*this).initializeCapabilities();
- return m_capabilities;
+ return *m_capabilities;
}
void AVMediaCaptureSource::setupSession()
Modified: trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp (215361 => 215362)
--- trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp 2017-04-14 15:13:09 UTC (rev 215361)
+++ trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp 2017-04-14 16:04:52 UTC (rev 215362)
@@ -488,10 +488,10 @@
return err;
}
-RefPtr<RealtimeMediaSourceCapabilities> CoreAudioCaptureSource::capabilities() const
+const RealtimeMediaSourceCapabilities& CoreAudioCaptureSource::capabilities() const
{
if (m_capabilities)
- return m_capabilities;
+ return *m_capabilities;
m_supportedConstraints.setSupportsDeviceId(true);
m_supportedConstraints.setSupportsEchoCancellation(true);
@@ -498,12 +498,12 @@
m_supportedConstraints.setSupportsVolume(true);
// FIXME: finish this.
- m_capabilities = RealtimeMediaSourceCapabilities::create(m_supportedConstraints);
+ m_capabilities = std::make_unique<RealtimeMediaSourceCapabilities>(m_supportedConstraints);
m_capabilities->setDeviceId(id());
m_capabilities->setEchoCancellation(RealtimeMediaSourceCapabilities::EchoCancellation::ReadWrite);
m_capabilities->setVolume(CapabilityValueOrRange(0.0, 1.0));
- return m_capabilities;
+ return *m_capabilities;
}
const RealtimeMediaSourceSettings& CoreAudioCaptureSource::settings() const
Modified: trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h (215361 => 215362)
--- trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h 2017-04-14 15:13:09 UTC (rev 215361)
+++ trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h 2017-04-14 16:04:52 UTC (rev 215362)
@@ -78,7 +78,7 @@
OSStatus suspend();
OSStatus resume();
- RefPtr<RealtimeMediaSourceCapabilities> capabilities() const final;
+ const RealtimeMediaSourceCapabilities& capabilities() const final;
const RealtimeMediaSourceSettings& settings() const final;
OSStatus setupAudioUnits();
@@ -129,7 +129,7 @@
Lock m_pendingSourceQueueLock;
Lock m_internalStateLock;
- mutable RefPtr<RealtimeMediaSourceCapabilities> m_capabilities;
+ mutable std::unique_ptr<RealtimeMediaSourceCapabilities> m_capabilities;
mutable RealtimeMediaSourceSupportedConstraints m_supportedConstraints;
RealtimeMediaSourceSettings m_currentSettings;
};
Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.cpp (215361 => 215362)
--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.cpp 2017-04-14 15:13:09 UTC (rev 215361)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.cpp 2017-04-14 16:04:52 UTC (rev 215362)
@@ -140,9 +140,9 @@
m_audioTrack->AddSink(this);
}
-RefPtr<RealtimeMediaSourceCapabilities> RealtimeIncomingAudioSource::capabilities() const
+const RealtimeMediaSourceCapabilities& RealtimeIncomingAudioSource::capabilities() const
{
- return m_capabilities;
+ return RealtimeMediaSourceCapabilities::emptyCapabilities();
}
const RealtimeMediaSourceSettings& RealtimeIncomingAudioSource::settings() const
Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.h (215361 => 215362)
--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.h 2017-04-14 15:13:09 UTC (rev 215361)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSource.h 2017-04-14 16:04:52 UTC (rev 215362)
@@ -61,7 +61,7 @@
void startProducingData() final;
void stopProducingData() final;
- RefPtr<RealtimeMediaSourceCapabilities> capabilities() const final;
+ const RealtimeMediaSourceCapabilities& capabilities() const final;
const RealtimeMediaSourceSettings& settings() const final;
MediaConstraints& constraints() { return *m_constraints.get(); }
@@ -73,7 +73,6 @@
RealtimeMediaSourceSettings m_currentSettings;
RealtimeMediaSourceSupportedConstraints m_supportedConstraints;
- RefPtr<RealtimeMediaSourceCapabilities> m_capabilities;
RefPtr<MediaConstraints> m_constraints;
bool m_isProducingData { false };
rtc::scoped_refptr<webrtc::AudioTrackInterface> m_audioTrack;
Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.cpp (215361 => 215362)
--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.cpp 2017-04-14 15:13:09 UTC (rev 215361)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.cpp 2017-04-14 16:04:52 UTC (rev 215362)
@@ -207,9 +207,9 @@
videoSampleAvailable(MediaSampleAVFObjC::create(sample, rotation));
}
-RefPtr<RealtimeMediaSourceCapabilities> RealtimeIncomingVideoSource::capabilities() const
+const RealtimeMediaSourceCapabilities& RealtimeIncomingVideoSource::capabilities() const
{
- return m_capabilities;
+ return RealtimeMediaSourceCapabilities::emptyCapabilities();
}
const RealtimeMediaSourceSettings& RealtimeIncomingVideoSource::settings() const
Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.h (215361 => 215362)
--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.h 2017-04-14 15:13:09 UTC (rev 215361)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSource.h 2017-04-14 16:04:52 UTC (rev 215362)
@@ -58,7 +58,7 @@
void startProducingData() final;
void stopProducingData() final;
- RefPtr<RealtimeMediaSourceCapabilities> capabilities() const final;
+ const RealtimeMediaSourceCapabilities& capabilities() const final;
const RealtimeMediaSourceSettings& settings() const final;
MediaConstraints& constraints() { return *m_constraints.get(); }
@@ -77,7 +77,6 @@
RefPtr<Image> m_currentImage;
RealtimeMediaSourceSettings m_currentSettings;
RealtimeMediaSourceSupportedConstraints m_supportedConstraints;
- RefPtr<RealtimeMediaSourceCapabilities> m_capabilities;
RefPtr<MediaConstraints> m_constraints;
bool m_isProducingData { false };
rtc::scoped_refptr<webrtc::VideoTrackInterface> m_videoTrack;
Modified: trunk/Source/WebCore/platform/mediastream/openwebrtc/RealtimeMediaSourceOwr.h (215361 => 215362)
--- trunk/Source/WebCore/platform/mediastream/openwebrtc/RealtimeMediaSourceOwr.h 2017-04-14 15:13:09 UTC (rev 215361)
+++ trunk/Source/WebCore/platform/mediastream/openwebrtc/RealtimeMediaSourceOwr.h 2017-04-14 16:04:52 UTC (rev 215362)
@@ -72,7 +72,7 @@
setMuted(false);
}
- RefPtr<RealtimeMediaSourceCapabilities> capabilities() const override { return m_capabilities; }
+ const RealtimeMediaSourceCapabilities& capabilities() const override { return m_capabilities; }
const RealtimeMediaSourceSettings& settings() const override;
OwrMediaSource* mediaSource() const { return m_mediaSource; }
@@ -86,7 +86,7 @@
private:
RealtimeMediaSourceSupportedConstraints m_supportedConstraints;
- RefPtr<RealtimeMediaSourceCapabilities> m_capabilities;
+ RealtimeMediaSourceCapabilities m_capabilities;
OwrMediaSource* m_mediaSource;
};
Modified: trunk/Source/WebCore/platform/mock/MockRealtimeMediaSource.cpp (215361 => 215362)
--- trunk/Source/WebCore/platform/mock/MockRealtimeMediaSource.cpp 2017-04-14 15:13:09 UTC (rev 215361)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeMediaSource.cpp 2017-04-14 16:04:52 UTC (rev 215362)
@@ -83,16 +83,16 @@
void MockRealtimeMediaSource::initializeCapabilities()
{
- m_capabilities = RealtimeMediaSourceCapabilities::create(supportedConstraints());
+ m_capabilities = std::make_unique<RealtimeMediaSourceCapabilities>(supportedConstraints());
m_capabilities->setDeviceId(id());
initializeCapabilities(*m_capabilities.get());
}
-RefPtr<RealtimeMediaSourceCapabilities> MockRealtimeMediaSource::capabilities() const
+const RealtimeMediaSourceCapabilities& MockRealtimeMediaSource::capabilities() const
{
if (!m_capabilities)
const_cast<MockRealtimeMediaSource&>(*this).initializeCapabilities();
- return m_capabilities;
+ return *m_capabilities;
}
void MockRealtimeMediaSource::initializeSettings()
Modified: trunk/Source/WebCore/platform/mock/MockRealtimeMediaSource.h (215361 => 215362)
--- trunk/Source/WebCore/platform/mock/MockRealtimeMediaSource.h 2017-04-14 15:13:09 UTC (rev 215361)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeMediaSource.h 2017-04-14 16:04:52 UTC (rev 215362)
@@ -68,7 +68,7 @@
void startProducingData() override;
void stopProducingData() override;
- RefPtr<RealtimeMediaSourceCapabilities> capabilities() const override;
+ const RealtimeMediaSourceCapabilities& capabilities() const override;
const RealtimeMediaSourceSettings& settings() const override;
MediaConstraints& constraints() { return *m_constraints.get(); }
@@ -88,7 +88,7 @@
RealtimeMediaSourceSettings m_currentSettings;
RealtimeMediaSourceSupportedConstraints m_supportedConstraints;
- RefPtr<RealtimeMediaSourceCapabilities> m_capabilities;
+ std::unique_ptr<RealtimeMediaSourceCapabilities> m_capabilities;
RefPtr<MediaConstraints> m_constraints;
unsigned m_deviceIndex { 0 };
bool m_isProducingData { false };
Modified: trunk/Source/WebKit2/ChangeLog (215361 => 215362)
--- trunk/Source/WebKit2/ChangeLog 2017-04-14 15:13:09 UTC (rev 215361)
+++ trunk/Source/WebKit2/ChangeLog 2017-04-14 16:04:52 UTC (rev 215362)
@@ -1,3 +1,23 @@
+2017-04-14 Jer Noble <jer.no...@apple.com>
+
+ [MediaSource] Push capabilities across process boundary during UIProcess capture.
+ https://bugs.webkit.org/show_bug.cgi?id=170814
+
+ Reviewed by Eric Carlson.
+
+ Make a new synchronous getter for capabilities(), moderated by only requesting the capabilities() cross-process
+ the first time called.
+
+ * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
+ (WebKit::UserMediaCaptureManagerProxy::capabilities):
+ (WebKit::UserMediaCaptureManagerProxy::supportedConstraints):
+ * UIProcess/Cocoa/UserMediaCaptureManagerProxy.h:
+ * UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in:
+ * WebProcess/cocoa/UserMediaCaptureManager.cpp:
+ (WebKit::UserMediaCaptureManager::Source::setCapabilities):
+ (WebKit::UserMediaCaptureManager::capabilities):
+ * WebProcess/cocoa/UserMediaCaptureManager.h:
+
2017-04-13 Dan Bernstein <m...@apple.com>
[Cocoa] Allow clients to specify in _WKProcessPoolConfiguration additional directory sandbox extensions
Modified: trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp (215361 => 215362)
--- trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp 2017-04-14 15:13:09 UTC (rev 215361)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp 2017-04-14 16:04:52 UTC (rev 215362)
@@ -130,7 +130,7 @@
auto constraints = MediaConstraintsImpl::create(constraintsData);
auto source = RealtimeMediaSourceCenter::singleton().audioFactory()->createMediaSourceForCaptureDeviceWithConstraints(device, constraints.ptr(), invalidConstraints);
succeeded = !!source;
-
+
if (source)
m_proxies.set(id, std::make_unique<SourceProxy>(id, *this, source.releaseNonNull()));
}
@@ -149,6 +149,13 @@
iter->value->source().stopProducingData();
}
+void UserMediaCaptureManagerProxy::capabilities(uint64_t id, WebCore::RealtimeMediaSourceCapabilities& capabilities)
+{
+ auto iter = m_proxies.find(id);
+ if (iter != m_proxies.end())
+ capabilities = iter->value->source().capabilities();
}
+
+}
#endif
Modified: trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.h (215361 => 215362)
--- trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.h 2017-04-14 15:13:09 UTC (rev 215361)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.h 2017-04-14 16:04:52 UTC (rev 215362)
@@ -52,6 +52,7 @@
void createMediaSourceForCaptureDeviceWithConstraints(uint64_t id, const WebCore::CaptureDevice&, const WebCore::MediaConstraintsData&, bool& succeeded, String& invalidConstraints);
void startProducingData(uint64_t);
void stopProducingData(uint64_t);
+ void capabilities(uint64_t, WebCore::RealtimeMediaSourceCapabilities&);
class SourceProxy;
friend class SourceProxy;
Modified: trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in (215361 => 215362)
--- trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in 2017-04-14 15:13:09 UTC (rev 215361)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in 2017-04-14 16:04:52 UTC (rev 215362)
@@ -25,4 +25,5 @@
CreateMediaSourceForCaptureDeviceWithConstraints(uint64_t id, WebCore::CaptureDevice device, struct WebCore::MediaConstraintsData constraints) -> (bool success, String invalidConstraints)
StartProducingData(uint64_t id)
StopProducingData(uint64_t id)
+ Capabilities(uint64_t id) -> (WebCore::RealtimeMediaSourceCapabilities capabilities)
}
Modified: trunk/Source/WebKit2/WebProcess/cocoa/UserMediaCaptureManager.cpp (215361 => 215362)
--- trunk/Source/WebKit2/WebProcess/cocoa/UserMediaCaptureManager.cpp 2017-04-14 15:13:09 UTC (rev 215361)
+++ trunk/Source/WebKit2/WebProcess/cocoa/UserMediaCaptureManager.cpp 2017-04-14 16:04:52 UTC (rev 215362)
@@ -66,8 +66,11 @@
}
SharedRingBufferStorage& storage() { return static_cast<SharedRingBufferStorage&>(m_ringBuffer.storage()); }
- RefPtr<RealtimeMediaSourceCapabilities> capabilities() const final { return m_capabilities; }
- void setCapabilities(RefPtr<RealtimeMediaSourceCapabilities> capabilities) { m_capabilities = capabilities; }
+ const RealtimeMediaSourceCapabilities& capabilities() const final {
+ if (!m_capabilities)
+ m_capabilities = m_manager.capabilities(m_id);
+ return m_capabilities.value();
+ }
const RealtimeMediaSourceSettings& settings() const final { return m_settings; }
void setSettings(const RealtimeMediaSourceSettings& settings)
@@ -131,7 +134,7 @@
uint64_t m_id;
UserMediaCaptureManager& m_manager;
- RefPtr<RealtimeMediaSourceCapabilities> m_capabilities;
+ mutable std::optional<RealtimeMediaSourceCapabilities> m_capabilities;
RealtimeMediaSourceSettings m_settings;
CAAudioStreamDescription m_description;
CARingBuffer m_ringBuffer;
@@ -234,6 +237,13 @@
m_process.send(Messages::UserMediaCaptureManagerProxy::StopProducingData(id), 0);
}
+WebCore::RealtimeMediaSourceCapabilities&& UserMediaCaptureManager::capabilities(uint64_t id)
+{
+ WebCore::RealtimeMediaSourceCapabilities capabilities;
+ m_process.sendSync(Messages::UserMediaCaptureManagerProxy::Capabilities(id), Messages::UserMediaCaptureManagerProxy::Capabilities::Reply(capabilities), 0);
+ return WTFMove(capabilities);
}
+}
+
#endif
Modified: trunk/Source/WebKit2/WebProcess/cocoa/UserMediaCaptureManager.h (215361 => 215362)
--- trunk/Source/WebKit2/WebProcess/cocoa/UserMediaCaptureManager.h 2017-04-14 15:13:09 UTC (rev 215361)
+++ trunk/Source/WebKit2/WebProcess/cocoa/UserMediaCaptureManager.h 2017-04-14 16:04:52 UTC (rev 215362)
@@ -70,6 +70,7 @@
void startProducingData(uint64_t);
void stopProducingData(uint64_t);
+ WebCore::RealtimeMediaSourceCapabilities&& capabilities(uint64_t);
class Source;
friend class Source;