Source code

Revision control

Copy as Markdown

Other Tools

From: Andreas Pehrson <apehrson@mozilla.com>
Date: Tue, 27 Aug 2024 10:01:00 +0000
Subject: Bug 1914835 - With ScreenCaptureKit embed the mouse cursor directly.
r=webrtc-reviewers,ng
The MouseCursorMonitor on macOS is rather expensive, as for every pulled frame
it compares all pixels of the cursors used for the current and last frames.
Getting to the pixels may also incur a conversion.
Note that this comparison happens even if the backend reports it had embedded
the cursor already, as the embedding only affects composing the monitored cursor
into a captured frame.
---
.../desktop_capture/mac/screen_capturer_sck.h | 3 +++
.../desktop_capture/mac/screen_capturer_sck.mm | 17 ++++++++++++++---
2 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/modules/desktop_capture/mac/screen_capturer_sck.h b/modules/desktop_capture/mac/screen_capturer_sck.h
index 2c5241d33e..105cbf0783 100644
--- a/modules/desktop_capture/mac/screen_capturer_sck.h
+++ b/modules/desktop_capture/mac/screen_capturer_sck.h
@@ -18,6 +18,9 @@
namespace webrtc {
+// Returns true if the ScreenCaptureKit capturer is available.
+bool ScreenCapturerSckAvailable();
+
// A DesktopCapturer implementation that uses ScreenCaptureKit.
std::unique_ptr<DesktopCapturer> CreateScreenCapturerSck(
const DesktopCaptureOptions& options);
diff --git a/modules/desktop_capture/mac/screen_capturer_sck.mm b/modules/desktop_capture/mac/screen_capturer_sck.mm
index fe44694d3a..ab4d9137a0 100644
--- a/modules/desktop_capture/mac/screen_capturer_sck.mm
+++ b/modules/desktop_capture/mac/screen_capturer_sck.mm
@@ -24,6 +24,8 @@
using webrtc::DesktopFrameIOSurface;
+#define SCK_AVAILABLE @available(macOS 14.0, *)
+
namespace webrtc {
class ScreenCapturerSck;
} // namespace webrtc
@@ -48,6 +50,14 @@ API_AVAILABLE(macos(14.0))
namespace webrtc {
+bool ScreenCapturerSckAvailable() {
+ bool sonomaOrHigher = false;
+ if (SCK_AVAILABLE) {
+ sonomaOrHigher = true;
+ }
+ return sonomaOrHigher;
+}
+
class API_AVAILABLE(macos(14.0)) ScreenCapturerSck final : public DesktopCapturer {
public:
explicit ScreenCapturerSck(const DesktopCaptureOptions& options);
@@ -353,11 +363,10 @@ void ScreenCapturerSck::StartOrReconfigureCapturer() {
}
std::unique_ptr<DesktopCapturer> CreateScreenCapturerSck(const DesktopCaptureOptions& options) {
- if (@available(macOS 14.0, *)) {
+ if (SCK_AVAILABLE) {
return std::make_unique<ScreenCapturerSck>(options);
- } else {
- return nullptr;
}
+ return nullptr;
}
} // namespace webrtc
@@ -419,3 +428,5 @@ std::unique_ptr<DesktopCapturer> CreateScreenCapturerSck(const DesktopCaptureOpt
}
@end
+
+#undef SCK_AVAILABLE