Implement IsOccluded() in each DesktopCapturer implementation
This change implements IsOccluded() function in each DesktopCapturer implementation. This change was reviewed at https://chromium-review.googlesource.com/c/external/webrtc/+/660817. Bug: webrtc:7950 Change-Id: Ie4d49b2bfcf5f0da1576f47b752a51ec494442ad TBR: jamiewalch@chromium.org Reviewed-on: https://webrtc-review.googlesource.com/1400 Reviewed-by: Zijie He <zijiehe@google.com> Commit-Queue: Zijie He <zijiehe@google.com> Cr-Commit-Position: refs/heads/master@{#19840}
This commit is contained in:
@ -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.
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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<DesktopFrame> input_frame) {
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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<DesktopFrame> frame) {
|
||||
|
||||
@ -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.
|
||||
|
||||
Reference in New Issue
Block a user