Title: [238904] trunk/Source/WebCore
Revision
238904
Author
[email protected]
Date
2018-12-05 12:21:54 -0800 (Wed, 05 Dec 2018)

Log Message

[MediaStream] Cleanup up Mac screen capture class
https://bugs.webkit.org/show_bug.cgi?id=192379
<rdar://problem/46465458>

Reviewed by Youenn Fablet.

No new tests, tested manually.

* platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp:
(WebCore::DisplayCaptureManagerCocoa::captureDevices): Initialize Screen devices first so
they are first in the list of devices.

* platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h:
* platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:
(WebCore::ScreenDisplayCaptureSourceMac::createDisplayStream): Cleanup. Always capture at the
native screen size to work around a bug.
(WebCore::ScreenDisplayCaptureSourceMac::settingsDidChange): Deleted.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (238903 => 238904)


--- trunk/Source/WebCore/ChangeLog	2018-12-05 19:30:47 UTC (rev 238903)
+++ trunk/Source/WebCore/ChangeLog	2018-12-05 20:21:54 UTC (rev 238904)
@@ -1,3 +1,23 @@
+2018-12-05  Eric Carlson  <[email protected]>
+
+        [MediaStream] Cleanup up Mac screen capture class
+        https://bugs.webkit.org/show_bug.cgi?id=192379
+        <rdar://problem/46465458>
+
+        Reviewed by Youenn Fablet.
+
+        No new tests, tested manually.
+
+        * platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp:
+        (WebCore::DisplayCaptureManagerCocoa::captureDevices): Initialize Screen devices first so
+        they are first in the list of devices.
+
+        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h:
+        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm:
+        (WebCore::ScreenDisplayCaptureSourceMac::createDisplayStream): Cleanup. Always capture at the
+        native screen size to work around a bug.
+        (WebCore::ScreenDisplayCaptureSourceMac::settingsDidChange): Deleted.
+
 2018-12-05  Commit Queue  <[email protected]>
 
         Unreviewed, rolling out r238844, r238846, and r238874.

Modified: trunk/Source/WebCore/platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp (238903 => 238904)


--- trunk/Source/WebCore/platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp	2018-12-05 19:30:47 UTC (rev 238903)
+++ trunk/Source/WebCore/platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp	2018-12-05 20:21:54 UTC (rev 238904)
@@ -52,8 +52,8 @@
 {
     m_devices.clear();
 
+    updateDisplayCaptureDevices();
     updateWindowCaptureDevices();
-    updateDisplayCaptureDevices();
 
     return m_devices;
 }

Modified: trunk/Source/WebCore/platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h (238903 => 238904)


--- trunk/Source/WebCore/platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h	2018-12-05 19:30:47 UTC (rev 238903)
+++ trunk/Source/WebCore/platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h	2018-12-05 20:21:54 UTC (rev 238904)
@@ -61,7 +61,6 @@
 
     void startProducingData() final;
     void stopProducingData() final;
-    void settingsDidChange(OptionSet<RealtimeMediaSourceSettings::Flag>) final;
     void commitConfiguration() final;
 
     bool createDisplayStream();
@@ -95,8 +94,6 @@
     mutable Lock m_currentFrameMutex;
     DisplaySurface m_currentFrame;
     RetainPtr<CGDisplayStreamRef> m_displayStream;
-    CGDisplayStreamFrameAvailableHandler m_frameAvailableBlock;
-
     OSObjectPtr<dispatch_queue_t> m_captureQueue;
 
     uint32_t m_displayID { 0 };

Modified: trunk/Source/WebCore/platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm (238903 => 238904)


--- trunk/Source/WebCore/platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm	2018-12-05 19:30:47 UTC (rev 238903)
+++ trunk/Source/WebCore/platform/mediastream/mac/ScreenDisplayCaptureSourceMac.mm	2018-12-05 20:21:54 UTC (rev 238904)
@@ -124,6 +124,7 @@
     if (m_displayID != actualDisplayID.value()) {
         m_displayID = actualDisplayID.value();
         RELEASE_LOG(Media, "ScreenDisplayCaptureSourceMac::createDisplayStream: display ID changed to %d", static_cast<int>(m_displayID));
+        m_displayStream = nullptr;
     }
 
     if (!m_displayStream) {
@@ -140,34 +141,22 @@
         if (!m_captureQueue)
             m_captureQueue = adoptOSObject(dispatch_queue_create("ScreenDisplayCaptureSourceMac Capture Queue", DISPATCH_QUEUE_SERIAL));
 
-        double frameTime = 1 / frameRate();
-        auto frameTimeCF = adoptCF(CFNumberCreate(nullptr,  kCFNumberDoubleType,  &frameTime));
-        int depth = screenQueueMaximumLength;
-        auto depthCF = adoptCF(CFNumberCreate(nullptr,  kCFNumberIntType,  &depth));
-        CFTypeRef keys[] = {
-            kCGDisplayStreamMinimumFrameTime,
-            kCGDisplayStreamQueueDepth,
-            kCGDisplayStreamColorSpace,
-            kCGDisplayStreamShowCursor,
+        CFDictionaryRef streamOptions = (__bridge CFDictionaryRef) @{
+            (__bridge NSString *)kCGDisplayStreamMinimumFrameTime :@(1 / frameRate()),
+            (__bridge NSString *)kCGDisplayStreamQueueDepth:@(screenQueueMaximumLength),
+            (__bridge NSString *)kCGDisplayStreamColorSpace:(__bridge id)sRGBColorSpaceRef(),
+            (__bridge NSString *)kCGDisplayStreamShowCursor : @(YES),
         };
-        CFTypeRef values[] = {
-            frameTimeCF.get(),
-            depthCF.get(),
-            sRGBColorSpaceRef(),
-            kCFBooleanTrue,
-        };
-        auto streamOptions = adoptCF(CFDictionaryCreate(kCFAllocatorDefault, keys, values, WTF_ARRAY_LENGTH(keys), &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks));
 
         auto weakThis = makeWeakPtr(*this);
-        m_frameAvailableBlock = Block_copy(^(CGDisplayStreamFrameStatus status, uint64_t displayTime, IOSurfaceRef frameSurface, CGDisplayStreamUpdateRef updateRef) {
+        auto frameAvailableBlock = ^(CGDisplayStreamFrameStatus status, uint64_t displayTime, IOSurfaceRef frameSurface, CGDisplayStreamUpdateRef updateRef) {
             if (!weakThis)
                 return;
 
             weakThis->frameAvailable(status, displayTime, frameSurface, updateRef);
-        });
+        };
 
-        auto size = frameSize();
-        m_displayStream = adoptCF(CGDisplayStreamCreateWithDispatchQueue(m_displayID, size.width(), size.height(), preferedPixelBufferFormat(), streamOptions.get(), m_captureQueue.get(), m_frameAvailableBlock));
+        m_displayStream = adoptCF(CGDisplayStreamCreateWithDispatchQueue(m_displayID, screenWidth, screenHeight, preferedPixelBufferFormat(), streamOptions, m_captureQueue.get(), frameAvailableBlock));
         if (!m_displayStream) {
             RELEASE_LOG(Media, "ScreenDisplayCaptureSourceMac::createDisplayStream: CGDisplayStreamCreate failed");
             captureFailed();
@@ -241,14 +230,6 @@
     m_isRunning = true;
 }
 
-void ScreenDisplayCaptureSourceMac::settingsDidChange(OptionSet<RealtimeMediaSourceSettings::Flag> settings)
-{
-    if (settings.containsAny({ RealtimeMediaSourceSettings::Flag::Width, RealtimeMediaSourceSettings::Flag::Height, RealtimeMediaSourceSettings::Flag::FrameRate }))
-        m_displayStream = nullptr;
-
-    return DisplayCaptureSourceCocoa::settingsDidChange(settings);
-}
-
 void ScreenDisplayCaptureSourceMac::commitConfiguration()
 {
     if (m_isRunning && !m_displayStream)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to