mirror of
https://github.com/electron/electron.git
synced 2026-04-10 03:01:51 -04:00
* chore: bump chromium in DEPS to 136.0.7103.17 * chore: update patches * chore: update filenames.libcxx.gni --------- Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com> Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
55 lines
2.9 KiB
Diff
55 lines
2.9 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Athul Iddya <athul@iddya.com>
|
|
Date: Fri, 14 Jul 2023 08:03:37 -0700
|
|
Subject: fix: use delegated generic capturer when available
|
|
|
|
When the generic capturer is used to fetch capture sources, the returned
|
|
ID will be arbitrarily prefixed with "screen" or "window" regardless of
|
|
the source type. If the window capturer is used to stream video when the
|
|
source was a screen or vice-versa, the stream fails to restart in
|
|
delegated capturers like PipeWire.
|
|
|
|
To fix this, use the generic capturer to fetch the media stream if it's
|
|
delegated and available. This does not cause any issues if the original
|
|
capturer was window or screen-specific, as the IDs remain valid for
|
|
generic capturer as well.
|
|
|
|
diff --git a/content/browser/media/capture/desktop_capture_device.cc b/content/browser/media/capture/desktop_capture_device.cc
|
|
index 93823d191f63f81f79d370f85991f51747c39b46..715a761e3bea87381ccf43b86dddba9bc03bbe9e 100644
|
|
--- a/content/browser/media/capture/desktop_capture_device.cc
|
|
+++ b/content/browser/media/capture/desktop_capture_device.cc
|
|
@@ -908,8 +908,14 @@ std::unique_ptr<media::VideoCaptureDevice> DesktopCaptureDevice::Create(
|
|
|
|
switch (source.type) {
|
|
case DesktopMediaID::TYPE_SCREEN: {
|
|
- std::unique_ptr<webrtc::DesktopCapturer> screen_capturer(
|
|
- webrtc::DesktopCapturer::CreateScreenCapturer(options));
|
|
+ std::unique_ptr<webrtc::DesktopCapturer> screen_capturer;
|
|
+ if (auto generic_capturer =
|
|
+ webrtc::DesktopCapturer::CreateGenericCapturer(options);
|
|
+ generic_capturer && generic_capturer->GetDelegatedSourceListController()) {
|
|
+ screen_capturer = std::move(generic_capturer);
|
|
+ } else {
|
|
+ screen_capturer = webrtc::DesktopCapturer::CreateScreenCapturer(options);
|
|
+ }
|
|
if (screen_capturer && screen_capturer->SelectSource(source.id)) {
|
|
capturer = std::make_unique<webrtc::DesktopAndCursorComposer>(
|
|
std::move(screen_capturer), options);
|
|
@@ -922,8 +928,14 @@ std::unique_ptr<media::VideoCaptureDevice> DesktopCaptureDevice::Create(
|
|
}
|
|
|
|
case DesktopMediaID::TYPE_WINDOW: {
|
|
- std::unique_ptr<webrtc::DesktopCapturer> window_capturer =
|
|
- webrtc::DesktopCapturer::CreateWindowCapturer(options);
|
|
+ std::unique_ptr<webrtc::DesktopCapturer> window_capturer;
|
|
+ if (auto generic_capturer =
|
|
+ webrtc::DesktopCapturer::CreateGenericCapturer(options);
|
|
+ generic_capturer && generic_capturer->GetDelegatedSourceListController()) {
|
|
+ window_capturer = std::move(generic_capturer);
|
|
+ } else {
|
|
+ window_capturer = webrtc::DesktopCapturer::CreateWindowCapturer(options);
|
|
+ }
|
|
if (window_capturer && window_capturer->SelectSource(source.id)) {
|
|
capturer = std::make_unique<webrtc::DesktopAndCursorComposer>(
|
|
std::move(window_capturer), options);
|