diff --git a/dom/media/systemservices/video_engine/desktop_capture_impl.cc b/dom/media/systemservices/video_engine/desktop_capture_impl.cc index 4bb392bfc994..72a38c1336a2 100644 --- a/dom/media/systemservices/video_engine/desktop_capture_impl.cc +++ b/dom/media/systemservices/video_engine/desktop_capture_impl.cc @@ -112,8 +112,15 @@ std::shared_ptr DesktopCaptureImpl::CreateDeviceInfo(const int32_t aId, const CaptureDeviceType aType) { if (aType == CaptureDeviceType::Screen) { - return CreateDesktopDeviceInfo( - aId, CreateScreenCaptureInfo(CreateDesktopCaptureOptions())); + auto options = CreateDesktopCaptureOptions(); +#ifdef XP_MACOSX + options.set_allow_sck_capturer( + mozilla::StaticPrefs:: + media_getdisplaymedia_screencapturekit_enabled_AtStartup() && + mozilla::StaticPrefs:: + media_getdisplaymedia_screencapturekit_enumeration_enabled_AtStartup()); +#endif + return CreateDesktopDeviceInfo(aId, CreateScreenCaptureInfo(options)); } if (aType == CaptureDeviceType::Window) { return CreateDesktopDeviceInfo( diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml index 76f231139a14..48c176a078ac 100644 --- a/modules/libpref/init/StaticPrefList.yaml +++ b/modules/libpref/init/StaticPrefList.yaml @@ -11389,6 +11389,16 @@ type: bool value: false mirror: once + +# Use the libwebrtc ScreenCaptureKit desktop capture backend on Mac for screen +# enumeration when enabled. +# When this is false and the backend is used (see above), the older CoreGraphics +# backend is used to enumerate CGDirectDisplayIDs, which the ScreenCaptureKit +# backend understand as well. +- name: media.getdisplaymedia.screencapturekit.enumeration.enabled + type: bool + value: false + mirror: once #endif # Turn off any cameras (but not mics) while in the background. This is desirable