Title: [236645] trunk/Source
Revision
236645
Author
eric.carl...@apple.com
Date
2018-09-30 00:02:39 -0700 (Sun, 30 Sep 2018)

Log Message

[MediaStream] Use display-specific capture factories
https://bugs.webkit.org/show_bug.cgi?id=190043
<rdar://problem/44834412>

Reviewed by Youenn Fablet.

Source/WebCore:

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:

Source/WebKit:

* WebProcess/cocoa/UserMediaCaptureManager.h:

Modified Paths

Added Paths

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();
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to