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:
Zijie He
2017-09-14 08:32:46 -07:00
committed by Commit Bot
parent 6564ea3b46
commit 9cad5016a3
6 changed files with 27 additions and 0 deletions

View File

@ -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.

View File

@ -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.

View File

@ -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) {

View File

@ -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.

View File

@ -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) {

View File

@ -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.