[webkit-changes] [WebKit/WebKit] 0a9bdf: getDisplayMedia video track getSettings() is not r...
youennf
noreply at github.com
Mon Sep 23 08:28:02 PDT 2024
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 0a9bdfd79fa76af5dc4cc4689a34ea2db2fe086f
https://github.com/WebKit/WebKit/commit/0a9bdfd79fa76af5dc4cc4689a34ea2db2fe086f
Author: Youenn Fablet <youenn at apple.com>
Date: 2024-09-23 (Mon, 23 Sep 2024)
Changed paths:
M LayoutTests/fast/mediastream/resources/getDisplayMedia-utils.js
M Source/WebCore/platform/mediastream/cocoa/DisplayCaptureSourceCocoa.cpp
M Source/WebCore/platform/mediastream/cocoa/DisplayCaptureSourceCocoa.h
M Source/WebCore/platform/mediastream/mac/ScreenCaptureKitCaptureSource.h
M Source/WebCore/platform/mediastream/mac/ScreenCaptureKitCaptureSource.mm
M Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp
M Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp
Log Message:
-----------
getDisplayMedia video track getSettings() is not returning correct results until getting the first video frame
rdar://136359711
https://bugs.webkit.org/show_bug.cgi?id=280058
Reviewed by Eric Carlson.
Our display capturer is only able to compute the right width/height settings when receiving the first video frame.
Before the patch, we would return the display stream and wait for starting to capture to get the video frame and compute the right settings.
We are now capturing one frame to be able to compute the size settings.
We then stop capture and resolve the getDisplayMedia promise with the track having the correct settings.
We then start capture for real this time.
We implement this by having UserMediaCaptureManagerProxy wait on the track to be ready via RealtimeMediaSource::whenReady.
RealtimeMediaSource::whenReady is only implemented by DisplayCaptureSourceCocoa which will ask its capturer to be ready.
When capturer is ready, UserMediaCaptureManagerProxy can then signal to the WebProcess that it can proceed with getDisplayMedia promise resolution.
Tested by removing the workaround added in callGetDisplayMedia test routine.
* LayoutTests/fast/mediastream/resources/getDisplayMedia-utils.js:
(async callGetDisplayMedia):
* Source/WebCore/platform/mediastream/cocoa/DisplayCaptureSourceCocoa.cpp:
(WebCore::DisplayCaptureSourceCocoa::whenReady):
* Source/WebCore/platform/mediastream/cocoa/DisplayCaptureSourceCocoa.h:
* Source/WebCore/platform/mediastream/mac/ScreenCaptureKitCaptureSource.h:
* Source/WebCore/platform/mediastream/mac/ScreenCaptureKitCaptureSource.mm:
(WebCore::ScreenCaptureKitCaptureSource::~ScreenCaptureKitCaptureSource):
(WebCore::ScreenCaptureKitCaptureSource::whenReady):
(WebCore::ScreenCaptureKitCaptureSource::start):
(WebCore::ScreenCaptureKitCaptureSource::streamDidOutputVideoSampleBuffer):
* Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp:
(WebCore::m_readyTimer):
(WebCore::MockDisplayCapturer::start):
(WebCore::MockDisplayCapturer::stop):
(WebCore::MockDisplayCapturer::whenReady):
(WebCore::MockDisplayCapturer::readyTimerFired):
* Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
(WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints):
Canonical link: https://commits.webkit.org/284080@main
To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications
More information about the webkit-changes
mailing list