diff --git a/webrtc/modules/desktop_capture/cropping_window_capturer.cc b/webrtc/modules/desktop_capture/cropping_window_capturer.cc index a0f89f66fc..494047dd03 100644 --- a/webrtc/modules/desktop_capture/cropping_window_capturer.cc +++ b/webrtc/modules/desktop_capture/cropping_window_capturer.cc @@ -100,6 +100,17 @@ void CroppingWindowCapturer::OnCaptureResult( CreateCroppedDesktopFrame(std::move(screen_frame), window_rect)); } +bool CroppingWindowCapturer::IsOccluded(const DesktopVector& pos) { + // Returns true if either capturer returns true. + if (window_capturer_->IsOccluded(pos)) { + return true; + } + if (screen_capturer_ != nullptr && screen_capturer_->IsOccluded(pos)) { + return true; + } + return false; +} + #if !defined(WEBRTC_WIN) // CroppingWindowCapturer is implemented only for windows. On other platforms // the regular window capturer is used. diff --git a/webrtc/modules/desktop_capture/cropping_window_capturer.h b/webrtc/modules/desktop_capture/cropping_window_capturer.h index b8b2751d02..3542fbdb5f 100644 --- a/webrtc/modules/desktop_capture/cropping_window_capturer.h +++ b/webrtc/modules/desktop_capture/cropping_window_capturer.h @@ -38,6 +38,7 @@ class CroppingWindowCapturer : public DesktopCapturer, bool GetSourceList(SourceList* sources) override; bool SelectSource(SourceId id) override; bool FocusOnSelectedSource() override; + bool IsOccluded(const DesktopVector& pos) override; // DesktopCapturer::Callback implementation, passed to |screen_capturer_| to // intercept the capture result. diff --git a/webrtc/modules/desktop_capture/desktop_capturer_differ_wrapper.cc b/webrtc/modules/desktop_capture/desktop_capturer_differ_wrapper.cc index 8a93bc15b8..3bf4c5343a 100644 --- a/webrtc/modules/desktop_capture/desktop_capturer_differ_wrapper.cc +++ b/webrtc/modules/desktop_capture/desktop_capturer_differ_wrapper.cc @@ -181,6 +181,10 @@ bool DesktopCapturerDifferWrapper::FocusOnSelectedSource() { return base_capturer_->FocusOnSelectedSource(); } +bool DesktopCapturerDifferWrapper::IsOccluded(const DesktopVector& pos) { + return base_capturer_->IsOccluded(pos); +} + void DesktopCapturerDifferWrapper::OnCaptureResult( Result result, std::unique_ptr input_frame) { diff --git a/webrtc/modules/desktop_capture/desktop_capturer_differ_wrapper.h b/webrtc/modules/desktop_capture/desktop_capturer_differ_wrapper.h index 0747a4ea1f..1d037a125b 100644 --- a/webrtc/modules/desktop_capture/desktop_capturer_differ_wrapper.h +++ b/webrtc/modules/desktop_capture/desktop_capturer_differ_wrapper.h @@ -45,6 +45,7 @@ class DesktopCapturerDifferWrapper : public DesktopCapturer, bool GetSourceList(SourceList* screens) override; bool SelectSource(SourceId id) override; bool FocusOnSelectedSource() override; + bool IsOccluded(const DesktopVector& pos) override; private: // DesktopCapturer::Callback interface. diff --git a/webrtc/modules/desktop_capture/fallback_desktop_capturer_wrapper.cc b/webrtc/modules/desktop_capture/fallback_desktop_capturer_wrapper.cc index e6fa9d5f32..6ae046e824 100644 --- a/webrtc/modules/desktop_capture/fallback_desktop_capturer_wrapper.cc +++ b/webrtc/modules/desktop_capture/fallback_desktop_capturer_wrapper.cc @@ -149,6 +149,15 @@ bool FallbackDesktopCapturerWrapper::FocusOnSelectedSource() { secondary_capturer_->FocusOnSelectedSource(); } +bool FallbackDesktopCapturerWrapper::IsOccluded(const DesktopVector& pos) { + // Returns true if either capturer returns true. + if (main_capturer_permanent_error_) { + return secondary_capturer_->IsOccluded(pos); + } + return main_capturer_->IsOccluded(pos) || + secondary_capturer_->IsOccluded(pos); +} + void FallbackDesktopCapturerWrapper::OnCaptureResult( Result result, std::unique_ptr frame) { diff --git a/webrtc/modules/desktop_capture/fallback_desktop_capturer_wrapper.h b/webrtc/modules/desktop_capture/fallback_desktop_capturer_wrapper.h index b6436ce715..8e79026f3e 100644 --- a/webrtc/modules/desktop_capture/fallback_desktop_capturer_wrapper.h +++ b/webrtc/modules/desktop_capture/fallback_desktop_capturer_wrapper.h @@ -44,6 +44,7 @@ class FallbackDesktopCapturerWrapper final : public DesktopCapturer, bool GetSourceList(SourceList* sources) override; bool SelectSource(SourceId id) override; bool FocusOnSelectedSource() override; + bool IsOccluded(const DesktopVector& pos) override; private: // DesktopCapturer::Callback interface.