diff --git a/webrtc/modules/desktop_capture/screen_capturer_mac.mm b/webrtc/modules/desktop_capture/screen_capturer_mac.mm index 78d977b473..66b04f75b4 100644 --- a/webrtc/modules/desktop_capture/screen_capturer_mac.mm +++ b/webrtc/modules/desktop_capture/screen_capturer_mac.mm @@ -276,7 +276,8 @@ CGImageRef CreateExcludedWindowRegionImage(const DesktopRect& pixel_bounds, class ScreenCapturerMac : public DesktopCapturer { public: explicit ScreenCapturerMac( - rtc::scoped_refptr desktop_config_monitor); + rtc::scoped_refptr desktop_config_monitor, + bool detect_updated_region); ~ScreenCapturerMac() override; bool Init(); @@ -311,6 +312,8 @@ class ScreenCapturerMac : public DesktopCapturer { std::unique_ptr CreateFrame(); + const bool detect_updated_region_; + Callback* callback_ = nullptr; CGLContextObj cgl_context_ = nullptr; @@ -383,8 +386,10 @@ class InvertedDesktopFrame : public DesktopFrame { }; ScreenCapturerMac::ScreenCapturerMac( - rtc::scoped_refptr desktop_config_monitor) - : desktop_config_monitor_(desktop_config_monitor) { + rtc::scoped_refptr desktop_config_monitor, + bool detect_updated_region) + : detect_updated_region_(detect_updated_region), + desktop_config_monitor_(desktop_config_monitor) { display_stream_manager_ = new DisplayStreamManager; } @@ -479,7 +484,12 @@ void ScreenCapturerMac::CaptureFrame() { } std::unique_ptr new_frame = queue_.current_frame()->Share(); - *new_frame->mutable_updated_region() = region; + if (detect_updated_region_) { + *new_frame->mutable_updated_region() = region; + } else { + new_frame->mutable_updated_region()->AddRect( + DesktopRect::MakeSize(new_frame->size())); + } if (flip) new_frame.reset(new InvertedDesktopFrame(std::move(new_frame))); @@ -1033,8 +1043,8 @@ std::unique_ptr DesktopCapturer::CreateRawScreenCapturer( if (!options.configuration_monitor()) return nullptr; - std::unique_ptr capturer( - new ScreenCapturerMac(options.configuration_monitor())); + std::unique_ptr capturer(new ScreenCapturerMac( + options.configuration_monitor(), options.detect_updated_region())); if (!capturer.get()->Init()) { return nullptr; }