Disable the use of CGDisplayStreamCreate() for desktop capture on Sonoma

CGDisplayStreamCreate is an deprecated API. It was believed that the use
of it was disabled on Sonoma through the setting allow_iosurface = false
[1], which causes the thumbnails to be created by the API CGDisplayCreateImage.
This API is not marked as deprecated at the moment.

However, although the thumbnails are created through CGDisplayCreateImage,
CGDisplayStreamCreate() is still called and runs in the background.
This makes the capture chip appear.

No capture chip appears if this CL is landed and the ScreenCaptureKit
thumbnail capturer is enabled,
--enable-features="ScreenCaptureKitMac,ScreenCaptureKitStreamPickerSonoma,ThumbnailCapturerMac:capture_mode/sc_screenshot_manager"

[1] https://chromium-review.googlesource.com/c/chromium/src/+/4892397

Bug: chromium:1486851
Change-Id: I3422efffc57dcb3e8965f19a5eca7f2a95d62da1
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/334721
Reviewed-by: Mark Foltz <mfoltz@chromium.org>
Commit-Queue: Johannes Kron <kron@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#41563}
This commit is contained in:
Johannes Kron 2024-01-18 14:00:19 +01:00 committed by WebRTC LUCI CQ
parent 7d637a9788
commit fb99c6ebb5
2 changed files with 6 additions and 0 deletions

View File

@ -46,6 +46,8 @@ class DesktopFrameProvider {
// Expected to be called before stopping the CGDisplayStreamRef streams.
void Release();
bool allow_iosurface() const { return allow_iosurface_; }
private:
SequenceChecker thread_checker_;
const bool allow_iosurface_;

View File

@ -439,6 +439,10 @@ void ScreenCapturerMac::ScreenConfigurationChanged() {
bool ScreenCapturerMac::RegisterRefreshAndMoveHandlers() {
RTC_DCHECK(thread_checker_.IsCurrent());
if (!desktop_frame_provider_.allow_iosurface()) {
return true;
}
desktop_config_ = desktop_config_monitor_->desktop_configuration();
for (const auto& config : desktop_config_.displays) {
size_t pixel_width = config.pixel_bounds.width();