Diff
Modified: trunk/Source/WebCore/ChangeLog (236644 => 236645)
--- trunk/Source/WebCore/ChangeLog 2018-09-29 17:40:17 UTC (rev 236644)
+++ trunk/Source/WebCore/ChangeLog 2018-09-30 07:02:39 UTC (rev 236645)
@@ -1,3 +1,78 @@
+2018-09-30 Eric Carlson <eric.carl...@apple.com>
+
+ [MediaStream] Use display-specific capture factories
+ https://bugs.webkit.org/show_bug.cgi?id=190043
+ <rdar://problem/44834412>
+
+ Reviewed by Youenn Fablet.
+
+ No new tests, no change in functionality.
+
+ * Sources.txt:
+ * WebCore.xcodeproj/project.pbxproj:
+ * platform/mediastream/RealtimeMediaSource.cpp:
+ (WebCore::RealtimeMediaSource::AudioCaptureFactory::~AudioCaptureFactory): Deleted.
+ (WebCore::RealtimeMediaSource::VideoCaptureFactory::~VideoCaptureFactory): Deleted.
+ * platform/mediastream/RealtimeMediaSource.h:
+ * platform/mediastream/RealtimeMediaSourceCenter.cpp:
+ (WebCore::RealtimeMediaSourceCenter::createMediaStream):
+ (WebCore::RealtimeMediaSourceCenter::getDisplayMediaDevices):
+ * platform/mediastream/RealtimeMediaSourceCenter.h:
+ (WebCore::RealtimeMediaSourceCenter::setAudioFactory):
+ (WebCore::RealtimeMediaSourceCenter::unsetAudioFactory):
+ * platform/mediastream/RealtimeMediaSourceFactory.cpp: Added.
+ (WebCore::SingleSourceFactory::setActiveSource):
+ (WebCore::SingleSourceFactory::unsetActiveSource):
+ * platform/mediastream/RealtimeMediaSourceFactory.h: Added.
+ (WebCore::SingleSourceFactory::activeSource):
+ (WebCore::VideoCaptureFactory::setVideoCapturePageState):
+ (WebCore::DisplayCaptureFactory::setDisplayCapturePageState):
+ * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:
+ (WebCore::libWebRTCVideoCaptureSourceFactory):
+ (WebCore::libWebRTCDisplayCaptureSourceFactory):
+ (WebCore::GStreamerVideoCaptureSource::factory):
+ (WebCore::GStreamerVideoCaptureSource::displayFactory):
+ * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.h:
+ * platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.cpp:
+ (WebCore::RealtimeMediaSourceCenterLibWebRTC::audioCaptureSourceFactory):
+ (WebCore::RealtimeMediaSourceCenterLibWebRTC::audioFactory):
+ (WebCore::RealtimeMediaSourceCenterLibWebRTC::videoFactory):
+ (WebCore::RealtimeMediaSourceCenterLibWebRTC::displayCaptureFactory):
+ * platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.h:
+ * platform/mediastream/mac/AVVideoCaptureSource.mm:
+ (WebCore::AVVideoCaptureSource::~AVVideoCaptureSource):
+ (WebCore::AVVideoCaptureSource::setupCaptureSession):
+ * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
+ (WebCore::CoreAudioCaptureSource::factory):
+ * platform/mediastream/mac/CoreAudioCaptureSource.h:
+ * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
+ (WebCore::RealtimeMediaSourceCenterMac::videoCaptureSourceFactory):
+ (WebCore::RealtimeMediaSourceCenterMac::displayCaptureSourceFactory):
+ (WebCore::RealtimeMediaSourceCenterMac::audioCaptureSourceFactory):
+ (WebCore::RealtimeMediaSourceCenterMac::audioFactory):
+ (WebCore::RealtimeMediaSourceCenterMac::videoFactory):
+ (WebCore::RealtimeMediaSourceCenterMac::displayCaptureFactory):
+ * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h:
+ * platform/mock/MockRealtimeAudioSource.cpp:
+ (WebCore::MockRealtimeAudioSource::~MockRealtimeAudioSource):
+ (WebCore::MockRealtimeAudioSource::startProducingData):
+ (): Deleted.
+ (WebCore::mockAudioCaptureSourceFactory): Deleted.
+ (WebCore::MockRealtimeAudioSource::factory): Deleted.
+ * platform/mock/MockRealtimeAudioSource.h:
+ * platform/mock/MockRealtimeMediaSourceCenter.cpp:
+ (WebCore::MockRealtimeVideoSourceFactory::setVideoCapturePageState):
+ (WebCore::MockRealtimeMediaSourceCenter::audioFactory):
+ (WebCore::MockRealtimeMediaSourceCenter::videoFactory):
+ (WebCore::MockRealtimeMediaSourceCenter::displayCaptureFactory):
+ * platform/mock/MockRealtimeMediaSourceCenter.h:
+ * platform/mock/MockRealtimeVideoSource.cpp:
+ (): Deleted.
+ (WebCore::MockRealtimeVideoSourceFactory::setVideoCapturePageState): Deleted.
+ (WebCore::mockVideoCaptureSourceFactory): Deleted.
+ (WebCore::MockRealtimeVideoSource::factory): Deleted.
+ * platform/mock/MockRealtimeVideoSource.h:
+
2018-09-29 Oriol Brufau <obru...@igalia.com>
[css-grid] Properly align items next to collapsed tracks with gutters
Modified: trunk/Source/WebCore/Sources.txt (236644 => 236645)
--- trunk/Source/WebCore/Sources.txt 2018-09-29 17:40:17 UTC (rev 236644)
+++ trunk/Source/WebCore/Sources.txt 2018-09-30 07:02:39 UTC (rev 236645)
@@ -1747,6 +1747,7 @@
platform/mediastream/RealtimeIncomingVideoSource.cpp
platform/mediastream/RealtimeMediaSource.cpp
platform/mediastream/RealtimeMediaSourceCenter.cpp
+platform/mediastream/RealtimeMediaSourceFactory.cpp
platform/mediastream/RealtimeMediaSourceSettings.cpp
platform/mediastream/RealtimeOutgoingAudioSource.cpp
platform/mediastream/RealtimeOutgoingVideoSource.cpp
Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (236644 => 236645)
--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2018-09-29 17:40:17 UTC (rev 236644)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2018-09-30 07:02:39 UTC (rev 236645)
@@ -120,6 +120,7 @@
074E82BB18A69F0E007EF54C /* PlatformTimeRanges.h in Headers */ = {isa = PBXBuildFile; fileRef = 074E82B918A69F0E007EF54C /* PlatformTimeRanges.h */; settings = {ATTRIBUTES = (Private, ); }; };
0753860214489E9800B78452 /* CachedTextTrack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0753860014489E9800B78452 /* CachedTextTrack.cpp */; };
0753860314489E9800B78452 /* CachedTextTrack.h in Headers */ = {isa = PBXBuildFile; fileRef = 0753860114489E9800B78452 /* CachedTextTrack.h */; };
+ 0754A5EA215EA3B8002D3A99 /* RealtimeMediaSourceFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 0754A5E8215EA3B7002D3A99 /* RealtimeMediaSourceFactory.h */; settings = {ATTRIBUTES = (Private, ); }; };
0757B13E214AE79900794B0D /* VideoPreset.h in Headers */ = {isa = PBXBuildFile; fileRef = 0757B13C214AE79700794B0D /* VideoPreset.h */; settings = {ATTRIBUTES = (Private, ); }; };
075BA84920618AA500FCB4AD /* VideoFullscreenLayerManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 075BA84720618AA500FCB4AD /* VideoFullscreenLayerManager.h */; };
07638A991884487200E15A1B /* MediaSessionManagerIOS.h in Headers */ = {isa = PBXBuildFile; fileRef = 07638A971884487200E15A1B /* MediaSessionManagerIOS.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -5353,6 +5354,8 @@
074E82B918A69F0E007EF54C /* PlatformTimeRanges.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlatformTimeRanges.h; sourceTree = "<group>"; };
0753860014489E9800B78452 /* CachedTextTrack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CachedTextTrack.cpp; sourceTree = "<group>"; };
0753860114489E9800B78452 /* CachedTextTrack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CachedTextTrack.h; sourceTree = "<group>"; };
+ 0754A5E8215EA3B7002D3A99 /* RealtimeMediaSourceFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RealtimeMediaSourceFactory.h; sourceTree = "<group>"; };
+ 0754A5EB215EADF3002D3A99 /* RealtimeMediaSourceFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RealtimeMediaSourceFactory.cpp; sourceTree = "<group>"; };
0757B13C214AE79700794B0D /* VideoPreset.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VideoPreset.h; sourceTree = "<group>"; };
075BA84720618AA500FCB4AD /* VideoFullscreenLayerManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VideoFullscreenLayerManager.h; sourceTree = "<group>"; };
07638A971884487200E15A1B /* MediaSessionManagerIOS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaSessionManagerIOS.h; sourceTree = "<group>"; };
@@ -15324,6 +15327,8 @@
4A4F656D1AA997F100E38CDD /* RealtimeMediaSourceCapabilities.h */,
4A0FFA9F1AAF5EA20062803B /* RealtimeMediaSourceCenter.cpp */,
4A0FFAA01AAF5EA20062803B /* RealtimeMediaSourceCenter.h */,
+ 0754A5EB215EADF3002D3A99 /* RealtimeMediaSourceFactory.cpp */,
+ 0754A5E8215EA3B7002D3A99 /* RealtimeMediaSourceFactory.h */,
4A4F656E1AA997F100E38CDD /* RealtimeMediaSourceSettings.cpp */,
4A4F656F1AA997F100E38CDD /* RealtimeMediaSourceSettings.h */,
2EC41DE21C0410A300D294FE /* RealtimeMediaSourceSupportedConstraints.cpp */,
@@ -29969,6 +29974,7 @@
4A4F65721AA997F100E38CDD /* RealtimeMediaSourceCapabilities.h in Headers */,
4A0FFAA21AAF5EA20062803B /* RealtimeMediaSourceCenter.h in Headers */,
4A0FFAA61AAF5EF60062803B /* RealtimeMediaSourceCenterMac.h in Headers */,
+ 0754A5EA215EA3B8002D3A99 /* RealtimeMediaSourceFactory.h in Headers */,
4A4F65741AA997F100E38CDD /* RealtimeMediaSourceSettings.h in Headers */,
07C1C0E51BFB60ED00BD2256 /* RealtimeMediaSourceSupportedConstraints.h in Headers */,
41103AAC1E39791000769F03 /* RealtimeOutgoingAudioSource.h in Headers */,
Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp (236644 => 236645)
--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp 2018-09-29 17:40:17 UTC (rev 236644)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp 2018-09-30 07:02:39 UTC (rev 236645)
@@ -956,14 +956,6 @@
{
}
-RealtimeMediaSource::AudioCaptureFactory::~AudioCaptureFactory()
-{
-}
-
-RealtimeMediaSource::VideoCaptureFactory::~VideoCaptureFactory()
-{
-}
-
} // namespace WebCore
#endif // ENABLE(MEDIA_STREAM)
Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h (236644 => 236645)
--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h 2018-09-29 17:40:17 UTC (rev 236644)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h 2018-09-30 07:02:39 UTC (rev 236645)
@@ -41,6 +41,7 @@
#include "MediaSample.h"
#include "PlatformLayer.h"
#include "RealtimeMediaSourceCapabilities.h"
+#include "RealtimeMediaSourceFactory.h"
#include <wtf/RecursiveLockAdapter.h>
#include <wtf/ThreadSafeRefCounted.h>
#include <wtf/Vector.h>
@@ -85,55 +86,6 @@
virtual void audioSamplesAvailable(const MediaTime&, const PlatformAudioData&, const AudioStreamDescription&, size_t /*numberOfFrames*/) { }
};
- class SingleSourceFactory {
- public:
- void setActiveSource(RealtimeMediaSource& source)
- {
- if (m_activeSource == &source)
- return;
- if (m_activeSource && m_activeSource->isProducingData())
- m_activeSource->setMuted(true);
- m_activeSource = &source;
- }
-
- void unsetActiveSource(RealtimeMediaSource& source)
- {
- if (m_activeSource == &source)
- m_activeSource = nullptr;
- }
-
- RealtimeMediaSource* activeSource() { return m_activeSource; }
- private:
- RealtimeMediaSource* m_activeSource { nullptr };
- };
-
- class AudioCaptureFactory
-#if PLATFORM(IOS)
- : public RealtimeMediaSource::SingleSourceFactory
-#endif
- {
- public:
- virtual ~AudioCaptureFactory();
- virtual CaptureSourceOrError createAudioCaptureSource(const CaptureDevice&, const MediaConstraints*) = 0;
-
- protected:
- AudioCaptureFactory() = default;
- };
-
- class VideoCaptureFactory
-#if PLATFORM(IOS)
- : public RealtimeMediaSource::SingleSourceFactory
-#endif
- {
- public:
- virtual ~VideoCaptureFactory();
- virtual CaptureSourceOrError createVideoCaptureSource(const CaptureDevice&, const MediaConstraints*) = 0;
- virtual void setVideoCapturePageState(bool, bool) { }
-
- protected:
- VideoCaptureFactory() = default;
- };
-
virtual ~RealtimeMediaSource() = default;
const String& id() const { return m_id; }
Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp (236644 => 236645)
--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp 2018-09-29 17:40:17 UTC (rev 236644)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp 2018-09-30 07:02:39 UTC (rev 236645)
@@ -100,7 +100,12 @@
}
if (videoDevice) {
- auto videoSource = videoFactory().createVideoCaptureSource(WTFMove(videoDevice), &request.videoConstraints);
+ CaptureSourceOrError videoSource;
+ if (videoDevice.type() == CaptureDevice::DeviceType::Camera)
+ videoSource = videoFactory().createVideoCaptureSource(WTFMove(videoDevice), &request.videoConstraints);
+ else
+ videoSource = displayCaptureFactory().createDisplayCaptureSource(WTFMove(videoDevice), &request.videoConstraints);
+
if (videoSource)
videoSources.append(videoSource.source());
else {
@@ -217,7 +222,7 @@
if (!device.enabled())
return;
- auto sourceOrError = videoFactory().createVideoCaptureSource(device, { });
+ auto sourceOrError = displayCaptureFactory().createDisplayCaptureSource(device, { });
if (sourceOrError && sourceOrError.captureSource->supportsConstraints(request.videoConstraints, invalidConstraint))
diaplayDeviceInfo.append({sourceOrError.captureSource->fitnessScore(), device});
Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h (236644 => 236645)
--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h 2018-09-29 17:40:17 UTC (rev 236644)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h 2018-09-30 07:02:39 UTC (rev 236645)
@@ -37,6 +37,7 @@
#include "ExceptionOr.h"
#include "MediaStreamRequest.h"
#include "RealtimeMediaSource.h"
+#include "RealtimeMediaSourceFactory.h"
#include "RealtimeMediaSourceSupportedConstraints.h"
#include <wtf/Function.h>
#include <wtf/RefPtr.h>
@@ -71,12 +72,14 @@
const RealtimeMediaSourceSupportedConstraints& supportedConstraints() { return m_supportedConstraints; }
- virtual void setAudioFactory(RealtimeMediaSource::AudioCaptureFactory&) { }
- virtual void unsetAudioFactory(RealtimeMediaSource::AudioCaptureFactory&) { }
- WEBCORE_EXPORT virtual RealtimeMediaSource::AudioCaptureFactory& audioFactory() = 0;
+ virtual void setAudioFactory(AudioCaptureFactory&) { }
+ virtual void unsetAudioFactory(AudioCaptureFactory&) { }
+ WEBCORE_EXPORT virtual AudioCaptureFactory& audioFactory() = 0;
- virtual RealtimeMediaSource::VideoCaptureFactory& videoFactory() = 0;
+ virtual VideoCaptureFactory& videoFactory() = 0;
+ virtual DisplayCaptureFactory& displayCaptureFactory() = 0;
+
virtual CaptureDeviceManager& audioCaptureDeviceManager() = 0;
virtual CaptureDeviceManager& videoCaptureDeviceManager() = 0;
virtual CaptureDeviceManager& displayCaptureDeviceManager() = 0;
Added: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceFactory.cpp (0 => 236645)
--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceFactory.cpp (rev 0)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceFactory.cpp 2018-09-30 07:02:39 UTC (rev 236645)
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2018 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "RealtimeMediaSourceFactory.h"
+
+#include "CaptureDevice.h"
+#include "RealtimeMediaSource.h"
+
+#if ENABLE(MEDIA_STREAM)
+
+#include "CaptureDeviceManager.h"
+#include "Logging.h"
+#include "MediaStreamPrivate.h"
+#include <wtf/SHA1.h>
+
+namespace WebCore {
+
+void SingleSourceFactory::setActiveSource(RealtimeMediaSource& source)
+{
+ if (m_activeSource == &source)
+ return;
+ if (m_activeSource && m_activeSource->isProducingData())
+ m_activeSource->setMuted(true);
+ m_activeSource = &source;
+}
+
+void SingleSourceFactory::unsetActiveSource(RealtimeMediaSource& source)
+{
+ if (m_activeSource == &source)
+ m_activeSource = nullptr;
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(MEDIA_STREAM)
Added: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceFactory.h (0 => 236645)
--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceFactory.h (rev 0)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceFactory.h 2018-09-30 07:02:39 UTC (rev 236645)
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2018 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(MEDIA_STREAM)
+
+namespace WebCore {
+
+class CaptureDevice;
+class RealtimeMediaSource;
+
+struct MediaConstraints;
+
+struct CaptureSourceOrError;
+
+class SingleSourceFactory {
+public:
+ void setActiveSource(RealtimeMediaSource&);
+ void unsetActiveSource(RealtimeMediaSource&);
+ RealtimeMediaSource* activeSource() { return m_activeSource; }
+
+private:
+ RealtimeMediaSource* m_activeSource { nullptr };
+};
+
+class AudioCaptureFactory
+#if PLATFORM(IOS)
+ : public SingleSourceFactory
+#endif
+{
+public:
+ virtual ~AudioCaptureFactory() = default;
+ virtual CaptureSourceOrError createAudioCaptureSource(const CaptureDevice&, const MediaConstraints*) = 0;
+
+protected:
+ AudioCaptureFactory() = default;
+};
+
+class VideoCaptureFactory
+#if PLATFORM(IOS)
+ : public SingleSourceFactory
+#endif
+{
+public:
+ virtual ~VideoCaptureFactory() = default;
+ virtual CaptureSourceOrError createVideoCaptureSource(const CaptureDevice&, const MediaConstraints*) = 0;
+ virtual void setVideoCapturePageState(bool, bool) { }
+
+protected:
+ VideoCaptureFactory() = default;
+};
+
+class DisplayCaptureFactory {
+public:
+ virtual ~DisplayCaptureFactory() = default;
+ virtual CaptureSourceOrError createDisplayCaptureSource(const CaptureDevice&, const MediaConstraints*) = 0;
+ virtual void setDisplayCapturePageState(bool , bool) { }
+
+protected:
+ DisplayCaptureFactory() = default;
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(MEDIA_STREAM)
Modified: trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp (236644 => 236645)
--- trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp 2018-09-29 17:40:17 UTC (rev 236644)
+++ trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp 2018-09-30 07:02:39 UTC (rev 236645)
@@ -51,7 +51,7 @@
});
}
-class GStreamerAudioCaptureSourceFactory : public RealtimeMediaSource::AudioCaptureFactory {
+class GStreamerAudioCaptureSourceFactory : public AudioCaptureFactory {
public:
CaptureSourceOrError createAudioCaptureSource(const CaptureDevice& device, const MediaConstraints* constraints) final
{
@@ -83,7 +83,7 @@
return CaptureSourceOrError(WTFMove(source));
}
-RealtimeMediaSource::AudioCaptureFactory& GStreamerAudioCaptureSource::factory()
+AudioCaptureFactory& GStreamerAudioCaptureSource::factory()
{
return libWebRTCAudioCaptureSourceFactory();
}
Modified: trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.h (236644 => 236645)
--- trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.h 2018-09-29 17:40:17 UTC (rev 236644)
+++ trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.h 2018-09-30 07:02:39 UTC (rev 236645)
@@ -26,6 +26,7 @@
#include "CaptureDeviceManager.h"
#include "GRefPtrGStreamer.h"
#include "GStreamerCaptureDevice.h"
+#include "RealtimeMediaSourceFactory.h"
namespace WebCore {
@@ -59,7 +60,7 @@
friend class NeverDestroyed<GStreamerVideoCaptureDeviceManager>;
public:
static GStreamerVideoCaptureDeviceManager& singleton();
- static RealtimeMediaSource::VideoCaptureFactory& videoFactory();
+ static VideoCaptureFactory& videoFactory();
CaptureDevice::DeviceType deviceType() final { return CaptureDevice::DeviceType::Camera; }
private:
GStreamerVideoCaptureDeviceManager() = default;
Modified: trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp (236644 => 236645)
--- trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp 2018-09-29 17:40:17 UTC (rev 236644)
+++ trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp 2018-09-30 07:02:39 UTC (rev 236645)
@@ -52,7 +52,7 @@
});
}
-class GStreamerVideoCaptureSourceFactory final : public RealtimeMediaSource::VideoCaptureFactory {
+class GStreamerVideoCaptureSourceFactory final : public VideoCaptureFactory {
public:
CaptureSourceOrError createVideoCaptureSource(const CaptureDevice& device, const MediaConstraints* constraints) final
{
@@ -60,12 +60,27 @@
}
};
-RealtimeMediaSource::VideoCaptureFactory& libWebRTCVideoCaptureSourceFactory()
+VideoCaptureFactory& libWebRTCVideoCaptureSourceFactory()
{
static NeverDestroyed<GStreamerVideoCaptureSourceFactory> factory;
return factory.get();
}
+class GStreamerDisplayCaptureSourceFactory final : public DisplayCaptureFactory {
+public:
+ CaptureSourceOrError createDisplayCaptureSource(const CaptureDevice&, const MediaConstraints*) final
+ {
+ // FIXME: Implement this.
+ return { };
+ }
+};
+
+DisplayCaptureFactory& libWebRTCDisplayCaptureSourceFactory()
+{
+ static NeverDestroyed<GStreamerDisplayCaptureSourceFactory> factory;
+ return factory.get();
+}
+
CaptureSourceOrError GStreamerVideoCaptureSource::create(const String& deviceID, const MediaConstraints* constraints)
{
auto device = GStreamerVideoCaptureDeviceManager::singleton().gstreamerDeviceWithUID(deviceID);
@@ -84,11 +99,16 @@
return CaptureSourceOrError(WTFMove(source));
}
-RealtimeMediaSource::VideoCaptureFactory& GStreamerVideoCaptureSource::factory()
+VideoCaptureFactory& GStreamerVideoCaptureSource::factory()
{
return libWebRTCVideoCaptureSourceFactory();
}
+DisplayCaptureFactory& GStreamerVideoCaptureSource::displayFactory()
+{
+ return libWebRTCDisplayCaptureSourceFactory();
+}
+
GStreamerVideoCaptureSource::GStreamerVideoCaptureSource(const String& deviceID, const String& name, const gchar *source_factory)
: RealtimeMediaSource(deviceID, RealtimeMediaSource::Type::Video, name)
, m_capturer(std::make_unique<GStreamerVideoCapturer>(source_factory))
Modified: trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.h (236644 => 236645)
--- trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.h 2018-09-29 17:40:17 UTC (rev 236644)
+++ trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.h 2018-09-30 07:02:39 UTC (rev 236645)
@@ -32,6 +32,9 @@
static CaptureSourceOrError create(const String& deviceID, const MediaConstraints*);
WEBCORE_EXPORT static VideoCaptureFactory& factory();
+ // FIXME: Implement this.
+ WEBCORE_EXPORT static DisplayCaptureFactory& displayFactory();
+
const RealtimeMediaSourceCapabilities& capabilities() override;
const RealtimeMediaSourceSettings& settings() override;
GstElement* pipeline() { return m_capturer->pipeline(); }
Modified: trunk/Source/WebCore/platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.cpp (236644 => 236645)
--- trunk/Source/WebCore/platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.cpp 2018-09-29 17:40:17 UTC (rev 236644)
+++ trunk/Source/WebCore/platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.cpp 2018-09-30 07:02:39 UTC (rev 236645)
@@ -32,7 +32,7 @@
namespace WebCore {
-RealtimeMediaSource::AudioCaptureFactory& RealtimeMediaSourceCenterLibWebRTC::audioCaptureSourceFactory()
+AudioCaptureFactory& RealtimeMediaSourceCenterLibWebRTC::audioCaptureSourceFactory()
{
return RealtimeMediaSourceCenterLibWebRTC::singleton().audioFactory();
}
@@ -57,7 +57,7 @@
{
}
-RealtimeMediaSource::AudioCaptureFactory& RealtimeMediaSourceCenterLibWebRTC::audioFactory()
+AudioCaptureFactory& RealtimeMediaSourceCenterLibWebRTC::audioFactory()
{
if (m_audioFactoryOverride)
return *m_audioFactoryOverride;
@@ -65,11 +65,16 @@
return GStreamerAudioCaptureSource::factory();
}
-RealtimeMediaSource::VideoCaptureFactory& RealtimeMediaSourceCenterLibWebRTC::videoFactory()
+VideoCaptureFactory& RealtimeMediaSourceCenterLibWebRTC::videoFactory()
{
return GStreamerVideoCaptureSource::factory();
}
+DisplayCaptureFactory& RealtimeMediaSourceCenterLibWebRTC::displayCaptureFactory()
+{
+ return GStreamerVideoCaptureSource::displayFactory();
+}
+
CaptureDeviceManager& RealtimeMediaSourceCenterLibWebRTC::audioCaptureDeviceManager()
{
return GStreamerAudioCaptureDeviceManager::singleton();
Modified: trunk/Source/WebCore/platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.h (236644 => 236645)
--- trunk/Source/WebCore/platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.h 2018-09-29 17:40:17 UTC (rev 236644)
+++ trunk/Source/WebCore/platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.h 2018-09-30 07:02:39 UTC (rev 236645)
@@ -38,8 +38,8 @@
public:
WEBCORE_EXPORT static RealtimeMediaSourceCenterLibWebRTC& singleton();
- static RealtimeMediaSource::VideoCaptureFactory& videoCaptureSourceFactory();
- static RealtimeMediaSource::AudioCaptureFactory& audioCaptureSourceFactory();
+ static VideoCaptureFactory& videoCaptureSourceFactory();
+ static AudioCaptureFactory& audioCaptureSourceFactory();
private:
friend class NeverDestroyed<RealtimeMediaSourceCenterLibWebRTC>;
@@ -46,17 +46,18 @@
RealtimeMediaSourceCenterLibWebRTC();
~RealtimeMediaSourceCenterLibWebRTC();
- void setAudioFactory(RealtimeMediaSource::AudioCaptureFactory& factory) final { m_audioFactoryOverride = &factory; }
- void unsetAudioFactory(RealtimeMediaSource::AudioCaptureFactory&) final { m_audioFactoryOverride = nullptr; }
+ void setAudioFactory(AudioCaptureFactory& factory) final { m_audioFactoryOverride = &factory; }
+ void unsetAudioFactory(AudioCaptureFactory&) final { m_audioFactoryOverride = nullptr; }
- RealtimeMediaSource::AudioCaptureFactory& audioFactory() final;
- RealtimeMediaSource::VideoCaptureFactory& videoFactory() final;
+ AudioCaptureFactory& audioFactory() final;
+ VideoCaptureFactory& videoFactory() final;
+ DisplayCaptureFactory& displayCaptureFactory() final;
CaptureDeviceManager& audioCaptureDeviceManager() final;
CaptureDeviceManager& videoCaptureDeviceManager() final;
CaptureDeviceManager& displayCaptureDeviceManager() final;
- RealtimeMediaSource::AudioCaptureFactory* m_audioFactoryOverride { nullptr };
+ AudioCaptureFactory* m_audioFactoryOverride { nullptr };
};
} // namespace WebCore
Modified: trunk/Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm (236644 => 236645)
--- trunk/Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm 2018-09-29 17:40:17 UTC (rev 236644)
+++ trunk/Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm 2018-09-30 07:02:39 UTC (rev 236645)
@@ -184,7 +184,7 @@
AVVideoCaptureSource::~AVVideoCaptureSource()
{
#if PLATFORM(IOS)
- RealtimeMediaSourceCenterMac::videoCaptureSourceFactory().unsetActiveSource(*this);
+ RealtimeMediaSourceCenter::singleton().videoFactory().unsetActiveSource(*this);
#endif
[m_objcObserver disconnect];
@@ -194,7 +194,6 @@
[m_session removeObserver:m_objcObserver.get() forKeyPath:@"rate"];
if ([m_session isRunning])
[m_session stopRunning];
-
}
void AVVideoCaptureSource::startProducingData()
@@ -437,7 +436,7 @@
bool AVVideoCaptureSource::setupCaptureSession()
{
#if PLATFORM(IOS)
- RealtimeMediaSourceCenterMac::videoCaptureSourceFactory().setActiveSource(*this);
+ RealtimeMediaSourceCenter::singleton().videoFactory().setActiveSource(*this);
#endif
NSError *error = nil;
Modified: trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp (236644 => 236645)
--- trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp 2018-09-29 17:40:17 UTC (rev 236644)
+++ trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp 2018-09-30 07:02:39 UTC (rev 236645)
@@ -769,7 +769,7 @@
CoreAudioSharedUnit::singleton().reconfigureAudioUnit();
}
-RealtimeMediaSource::AudioCaptureFactory& CoreAudioCaptureSource::factory()
+AudioCaptureFactory& CoreAudioCaptureSource::factory()
{
return CoreAudioCaptureSourceFactory::singleton();
}
Modified: trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h (236644 => 236645)
--- trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h 2018-09-29 17:40:17 UTC (rev 236644)
+++ trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h 2018-09-30 07:02:39 UTC (rev 236645)
@@ -30,6 +30,7 @@
#include "CAAudioStreamDescription.h"
#include "CaptureDevice.h"
#include "RealtimeMediaSource.h"
+#include "RealtimeMediaSourceFactory.h"
#include <AudioToolbox/AudioToolbox.h>
#include <CoreAudio/CoreAudioTypes.h>
#include <wtf/HashMap.h>
@@ -108,7 +109,7 @@
bool m_resumePending { false };
};
-class CoreAudioCaptureSourceFactory : public RealtimeMediaSource::AudioCaptureFactory {
+class CoreAudioCaptureSourceFactory : public AudioCaptureFactory {
public:
static CoreAudioCaptureSourceFactory& singleton();
Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp (236644 => 236645)
--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp 2018-09-29 17:40:17 UTC (rev 236644)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp 2018-09-30 07:02:39 UTC (rev 236645)
@@ -46,15 +46,33 @@
namespace WebCore {
-class VideoCaptureSourceFactoryMac final : public RealtimeMediaSource::VideoCaptureFactory
-{
+class VideoCaptureSourceFactoryMac final : public VideoCaptureFactory {
public:
CaptureSourceOrError createVideoCaptureSource(const CaptureDevice& device, const MediaConstraints* constraints) final
{
+ ASSERT(device.type() == CaptureDevice::DeviceType::Camera);
+ return AVVideoCaptureSource::create(device.persistentId(), constraints);
+ }
+
+#if PLATFORM(IOS)
+private:
+ void setVideoCapturePageState(bool interrupted, bool pageMuted)
+ {
+ if (activeSource())
+ activeSource()->setInterrupted(interrupted, pageMuted);
+ }
+#endif
+};
+
+class DisplayCaptureSourceFactoryMac final : public DisplayCaptureFactory {
+public:
+ CaptureSourceOrError createDisplayCaptureSource(const CaptureDevice& device, const MediaConstraints* constraints) final
+ {
+#if PLATFORM(IOS)
+ UNUSED_PARAM(device);
+ UNUSED_PARAM(constraints);
+#endif
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);
@@ -66,6 +84,7 @@
case CaptureDevice::DeviceType::Application:
case CaptureDevice::DeviceType::Browser:
case CaptureDevice::DeviceType::Microphone:
+ case CaptureDevice::DeviceType::Camera:
case CaptureDevice::DeviceType::Unknown:
ASSERT_NOT_REACHED();
break;
@@ -73,25 +92,22 @@
return { };
}
-
-#if PLATFORM(IOS)
-private:
- void setVideoCapturePageState(bool interrupted, bool pageMuted)
- {
- if (activeSource())
- activeSource()->setInterrupted(interrupted, pageMuted);
- }
-#endif
};
-RealtimeMediaSource::VideoCaptureFactory& RealtimeMediaSourceCenterMac::videoCaptureSourceFactory()
+VideoCaptureFactory& RealtimeMediaSourceCenterMac::videoCaptureSourceFactory()
{
static NeverDestroyed<VideoCaptureSourceFactoryMac> factory;
return factory.get();
}
-RealtimeMediaSource::AudioCaptureFactory& RealtimeMediaSourceCenterMac::audioCaptureSourceFactory()
+DisplayCaptureFactory& RealtimeMediaSourceCenterMac::displayCaptureSourceFactory()
{
+ static NeverDestroyed<DisplayCaptureSourceFactoryMac> factory;
+ return factory.get();
+}
+
+AudioCaptureFactory& RealtimeMediaSourceCenterMac::audioCaptureSourceFactory()
+{
return RealtimeMediaSourceCenterMac::singleton().audioFactory();
}
@@ -112,7 +128,7 @@
RealtimeMediaSourceCenterMac::~RealtimeMediaSourceCenterMac() = default;
-RealtimeMediaSource::AudioCaptureFactory& RealtimeMediaSourceCenterMac::audioFactory()
+AudioCaptureFactory& RealtimeMediaSourceCenterMac::audioFactory()
{
if (m_audioFactoryOverride)
return *m_audioFactoryOverride;
@@ -120,11 +136,16 @@
return CoreAudioCaptureSource::factory();
}
-RealtimeMediaSource::VideoCaptureFactory& RealtimeMediaSourceCenterMac::videoFactory()
+VideoCaptureFactory& RealtimeMediaSourceCenterMac::videoFactory()
{
return videoCaptureSourceFactory();
}
+DisplayCaptureFactory& RealtimeMediaSourceCenterMac::displayCaptureFactory()
+{
+ return displayCaptureSourceFactory();
+}
+
CaptureDeviceManager& RealtimeMediaSourceCenterMac::audioCaptureDeviceManager()
{
#if PLATFORM(MAC)
Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.h (236644 => 236645)
--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.h 2018-09-29 17:40:17 UTC (rev 236644)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.h 2018-09-30 07:02:39 UTC (rev 236645)
@@ -44,8 +44,9 @@
public:
WEBCORE_EXPORT static RealtimeMediaSourceCenterMac& singleton();
- static RealtimeMediaSource::VideoCaptureFactory& videoCaptureSourceFactory();
- static RealtimeMediaSource::AudioCaptureFactory& audioCaptureSourceFactory();
+ static VideoCaptureFactory& videoCaptureSourceFactory();
+ static AudioCaptureFactory& audioCaptureSourceFactory();
+ static DisplayCaptureFactory& displayCaptureSourceFactory();
private:
friend class NeverDestroyed<RealtimeMediaSourceCenterMac>;
@@ -52,17 +53,18 @@
RealtimeMediaSourceCenterMac();
~RealtimeMediaSourceCenterMac();
- void setAudioFactory(RealtimeMediaSource::AudioCaptureFactory& factory) final { m_audioFactoryOverride = &factory; }
- void unsetAudioFactory(RealtimeMediaSource::AudioCaptureFactory&) final { m_audioFactoryOverride = nullptr; }
+ void setAudioFactory(AudioCaptureFactory& factory) final { m_audioFactoryOverride = &factory; }
+ void unsetAudioFactory(AudioCaptureFactory&) final { m_audioFactoryOverride = nullptr; }
- RealtimeMediaSource::AudioCaptureFactory& audioFactory() final;
- RealtimeMediaSource::VideoCaptureFactory& videoFactory() final;
+ AudioCaptureFactory& audioFactory() final;
+ VideoCaptureFactory& videoFactory() final;
+ DisplayCaptureFactory& displayCaptureFactory() final;
CaptureDeviceManager& audioCaptureDeviceManager() final;
CaptureDeviceManager& videoCaptureDeviceManager() final;
CaptureDeviceManager& displayCaptureDeviceManager() final;
- RealtimeMediaSource::AudioCaptureFactory* m_audioFactoryOverride { nullptr };
+ AudioCaptureFactory* m_audioFactoryOverride { nullptr };
};
} // namespace WebCore
Modified: trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.cpp (236644 => 236645)
--- trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.cpp 2018-09-29 17:40:17 UTC (rev 236644)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.cpp 2018-09-30 07:02:39 UTC (rev 236645)
@@ -42,19 +42,6 @@
namespace WebCore {
-class MockRealtimeAudioSourceFactory : public RealtimeMediaSource::AudioCaptureFactory
-{
-public:
- CaptureSourceOrError createAudioCaptureSource(const CaptureDevice& device, const MediaConstraints* constraints) final
- {
- for (auto& mockDevice : MockRealtimeMediaSourceCenter::audioDevices()) {
- if (mockDevice.persistentId() == device.persistentId())
- return MockRealtimeAudioSource::create(mockDevice.persistentId(), mockDevice.label(), constraints);
- }
- return { };
- }
-};
-
#if !PLATFORM(MAC) && !PLATFORM(IOS) && !(USE(GSTREAMER) && USE(LIBWEBRTC))
CaptureSourceOrError MockRealtimeAudioSource::create(const String& deviceID, const String& name, const MediaConstraints* constraints)
{
@@ -71,17 +58,6 @@
}
#endif
-static MockRealtimeAudioSourceFactory& mockAudioCaptureSourceFactory()
-{
- static NeverDestroyed<MockRealtimeAudioSourceFactory> factory;
- return factory.get();
-}
-
-RealtimeMediaSource::AudioCaptureFactory& MockRealtimeAudioSource::factory()
-{
- return mockAudioCaptureSourceFactory();
-}
-
MockRealtimeAudioSource::MockRealtimeAudioSource(const String& deviceID, const String& name)
: RealtimeMediaSource(deviceID, RealtimeMediaSource::Type::Audio, name)
, m_timer(RunLoop::current(), this, &MockRealtimeAudioSource::tick)
@@ -94,7 +70,7 @@
MockRealtimeAudioSource::~MockRealtimeAudioSource()
{
#if PLATFORM(IOS)
- MockRealtimeMediaSourceCenter::audioCaptureSourceFactory().unsetActiveSource(*this);
+ RealtimeMediaSourceCenter::singleton().audioFactory().unsetActiveSource(*this);
#endif
}
@@ -143,7 +119,7 @@
void MockRealtimeAudioSource::startProducingData()
{
#if PLATFORM(IOS)
- MockRealtimeMediaSourceCenter::audioCaptureSourceFactory().setActiveSource(*this);
+ RealtimeMediaSourceCenter::singleton().audioFactory().setActiveSource(*this);
#endif
if (!sampleRate())
Modified: trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.h (236644 => 236645)
--- trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.h 2018-09-29 17:40:17 UTC (rev 236644)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.h 2018-09-30 07:02:39 UTC (rev 236645)
@@ -34,6 +34,7 @@
#include "ImageBuffer.h"
#include "MockMediaDevice.h"
+#include "RealtimeMediaSourceFactory.h"
#include <wtf/RunLoop.h>
namespace WebCore {
@@ -43,8 +44,6 @@
static CaptureSourceOrError create(const String& deviceID, const String& name, const MediaConstraints*);
- static AudioCaptureFactory& factory();
-
virtual ~MockRealtimeAudioSource();
protected:
Modified: trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp (236644 => 236645)
--- trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp 2018-09-29 17:40:17 UTC (rev 236644)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp 2018-09-30 07:02:39 UTC (rev 236645)
@@ -83,6 +83,62 @@
};
}
+
+class MockRealtimeVideoSourceFactory : public VideoCaptureFactory {
+public:
+ CaptureSourceOrError createVideoCaptureSource(const CaptureDevice& device, const MediaConstraints* constraints) final
+ {
+ ASSERT(device.type() == CaptureDevice::DeviceType::Camera);
+ ASSERT(MockRealtimeMediaSourceCenter::captureDeviceWithPersistentID(CaptureDevice::DeviceType::Camera, device.persistentId()));
+
+ return MockRealtimeVideoSource::create(device.persistentId(), device.label(), constraints);
+ }
+
+#if PLATFORM(IOS)
+private:
+ void setVideoCapturePageState(bool interrupted, bool pageMuted)
+ {
+ if (activeSource())
+ activeSource()->setInterrupted(interrupted, pageMuted);
+ }
+#endif
+};
+
+class MockRealtimeDisplaySourceFactory : public DisplayCaptureFactory {
+public:
+ CaptureSourceOrError createDisplayCaptureSource(const CaptureDevice& device, const MediaConstraints* constraints) final
+ {
+ ASSERT(MockRealtimeMediaSourceCenter::captureDeviceWithPersistentID(device.type(), device.persistentId()));
+
+ switch (device.type()) {
+ case CaptureDevice::DeviceType::Screen:
+ case CaptureDevice::DeviceType::Window:
+ return MockRealtimeVideoSource::create(device.persistentId(), device.label(), constraints);
+ break;
+ case CaptureDevice::DeviceType::Application:
+ case CaptureDevice::DeviceType::Browser:
+ case CaptureDevice::DeviceType::Microphone:
+ case CaptureDevice::DeviceType::Camera:
+ case CaptureDevice::DeviceType::Unknown:
+ ASSERT_NOT_REACHED();
+ break;
+ }
+
+ return { };
+ }
+};
+
+class MockRealtimeAudioSourceFactory : public AudioCaptureFactory {
+public:
+ CaptureSourceOrError createAudioCaptureSource(const CaptureDevice& device, const MediaConstraints* constraints) final
+ {
+ ASSERT(device.type() == CaptureDevice::DeviceType::Microphone);
+ ASSERT(MockRealtimeMediaSourceCenter::captureDeviceWithPersistentID(CaptureDevice::DeviceType::Microphone, device.persistentId()));
+
+ return MockRealtimeAudioSource::create(device.persistentId(), device.label(), constraints);
+ }
+};
+
static Vector<MockMediaDevice>& devices()
{
static auto devices = makeNeverDestroyed([] {
@@ -254,6 +310,24 @@
return displayDevices;
}
+AudioCaptureFactory& MockRealtimeMediaSourceCenter::audioFactory()
+{
+ static NeverDestroyed<MockRealtimeAudioSourceFactory> factory;
+ return factory.get();
+}
+
+VideoCaptureFactory& MockRealtimeMediaSourceCenter::videoFactory()
+{
+ static NeverDestroyed<MockRealtimeVideoSourceFactory> factory;
+ return factory.get();
+}
+
+DisplayCaptureFactory& MockRealtimeMediaSourceCenter::displayCaptureFactory()
+{
+ static NeverDestroyed<MockRealtimeDisplaySourceFactory> factory;
+ return factory.get();
+}
+
} // namespace WebCore
#endif // ENABLE(MEDIA_STREAM)
Modified: trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.h (236644 => 236645)
--- trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.h 2018-09-29 17:40:17 UTC (rev 236644)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.h 2018-09-30 07:02:39 UTC (rev 236645)
@@ -45,9 +45,6 @@
WEBCORE_EXPORT static void removeDevice(const String& persistentId);
WEBCORE_EXPORT static void resetDevices();
- static RealtimeMediaSource::VideoCaptureFactory& videoCaptureSourceFactory() { return MockRealtimeVideoSource::factory(); }
- static RealtimeMediaSource::AudioCaptureFactory& audioCaptureSourceFactory() { return MockRealtimeAudioSource::factory(); }
-
static Vector<CaptureDevice>& audioDevices();
static Vector<CaptureDevice>& videoDevices();
static Vector<CaptureDevice>& displayDevices();
@@ -61,8 +58,9 @@
static MockRealtimeMediaSourceCenter& singleton();
- RealtimeMediaSource::AudioCaptureFactory& audioFactory() final { return MockRealtimeAudioSource::factory(); }
- RealtimeMediaSource::VideoCaptureFactory& videoFactory() final { return MockRealtimeVideoSource::factory(); }
+ AudioCaptureFactory& audioFactory() final;
+ VideoCaptureFactory& videoFactory() final;
+ DisplayCaptureFactory& displayCaptureFactory() final;
CaptureDeviceManager& audioCaptureDeviceManager() final { return m_audioCaptureDeviceManager; }
CaptureDeviceManager& videoCaptureDeviceManager() final { return m_videoCaptureDeviceManager; }
Modified: trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp (236644 => 236645)
--- trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp 2018-09-29 17:40:17 UTC (rev 236644)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp 2018-09-30 07:02:39 UTC (rev 236645)
@@ -48,40 +48,6 @@
namespace WebCore {
-class MockRealtimeVideoSourceFactory : public RealtimeMediaSource::VideoCaptureFactory
-{
-public:
- CaptureSourceOrError createVideoCaptureSource(const CaptureDevice& device, const MediaConstraints* constraints) final
- {
- ASSERT(MockRealtimeMediaSourceCenter::captureDeviceWithPersistentID(device.type(), device.persistentId()));
-
- switch (device.type()) {
- case CaptureDevice::DeviceType::Camera:
- case CaptureDevice::DeviceType::Screen:
- case CaptureDevice::DeviceType::Window:
- return MockRealtimeVideoSource::create(device.persistentId(), device.label(), constraints);
- break;
- case CaptureDevice::DeviceType::Application:
- 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
-};
-
#if !PLATFORM(MAC) && !PLATFORM(IOS) && !(USE(GSTREAMER) && USE(LIBWEBRTC))
CaptureSourceOrError MockRealtimeVideoSource::create(const String& deviceID, const String& name, const MediaConstraints* constraints)
{
@@ -98,17 +64,6 @@
}
#endif
-static MockRealtimeVideoSourceFactory& mockVideoCaptureSourceFactory()
-{
- static NeverDestroyed<MockRealtimeVideoSourceFactory> factory;
- return factory.get();
-}
-
-RealtimeMediaSource::VideoCaptureFactory& MockRealtimeVideoSource::factory()
-{
- return mockVideoCaptureSourceFactory();
-}
-
MockRealtimeVideoSource::MockRealtimeVideoSource(const String& deviceID, const String& name)
: RealtimeVideoSource(deviceID, name)
, m_emitFrameTimer(RunLoop::current(), this, &MockRealtimeVideoSource::generateFrame)
Modified: trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.h (236644 => 236645)
--- trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.h 2018-09-29 17:40:17 UTC (rev 236644)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.h 2018-09-30 07:02:39 UTC (rev 236645)
@@ -36,6 +36,7 @@
#include "FontCascade.h"
#include "ImageBuffer.h"
#include "MockMediaDevice.h"
+#include "RealtimeMediaSourceFactory.h"
#include "RealtimeVideoSource.h"
#include <wtf/RunLoop.h>
@@ -49,8 +50,6 @@
static CaptureSourceOrError create(const String& deviceID, const String& name, const MediaConstraints*);
- static VideoCaptureFactory& factory();
-
protected:
MockRealtimeVideoSource(const String& deviceID, const String& name);
Modified: trunk/Source/WebKit/ChangeLog (236644 => 236645)
--- trunk/Source/WebKit/ChangeLog 2018-09-29 17:40:17 UTC (rev 236644)
+++ trunk/Source/WebKit/ChangeLog 2018-09-30 07:02:39 UTC (rev 236645)
@@ -1,3 +1,13 @@
+2018-09-30 Eric Carlson <eric.carl...@apple.com>
+
+ [MediaStream] Use display-specific capture factories
+ https://bugs.webkit.org/show_bug.cgi?id=190043
+ <rdar://problem/44834412>
+
+ Reviewed by Youenn Fablet.
+
+ * WebProcess/cocoa/UserMediaCaptureManager.h:
+
2018-09-29 Commit Queue <commit-qu...@webkit.org>
Unreviewed, rolling out r236631.
Modified: trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.h (236644 => 236645)
--- trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.h 2018-09-29 17:40:17 UTC (rev 236644)
+++ trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.h 2018-09-30 07:02:39 UTC (rev 236645)
@@ -31,6 +31,7 @@
#include "SharedMemory.h"
#include "WebProcessSupplement.h"
#include <WebCore/RealtimeMediaSource.h>
+#include <WebCore/RealtimeMediaSourceFactory.h>
#include <wtf/HashMap.h>
namespace WebCore {
@@ -42,7 +43,7 @@
class CrossProcessRealtimeAudioSource;
class WebProcess;
-class UserMediaCaptureManager : public WebProcessSupplement, public IPC::MessageReceiver, public WebCore::RealtimeMediaSource::AudioCaptureFactory, public WebCore::RealtimeMediaSource::VideoCaptureFactory {
+class UserMediaCaptureManager : public WebProcessSupplement, public IPC::MessageReceiver, public WebCore::AudioCaptureFactory, public WebCore::VideoCaptureFactory {
public:
explicit UserMediaCaptureManager(WebProcess&);
~UserMediaCaptureManager();