| Index: webrtc/modules/desktop_capture/blank_detector_desktop_capturer_wrapper.h
 | 
| diff --git a/webrtc/modules/desktop_capture/blank_detector_desktop_capturer_wrapper.h b/webrtc/modules/desktop_capture/blank_detector_desktop_capturer_wrapper.h
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..9d980d09ba6bed013c0a3446aea324253f59d027
 | 
| --- /dev/null
 | 
| +++ b/webrtc/modules/desktop_capture/blank_detector_desktop_capturer_wrapper.h
 | 
| @@ -0,0 +1,68 @@
 | 
| +/*
 | 
| + *  Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
 | 
| + *
 | 
| + *  Use of this source code is governed by a BSD-style license
 | 
| + *  that can be found in the LICENSE file in the root of the source
 | 
| + *  tree. An additional intellectual property rights grant can be found
 | 
| + *  in the file PATENTS.  All contributing project authors may
 | 
| + *  be found in the AUTHORS file in the root of the source tree.
 | 
| + */
 | 
| +
 | 
| +#ifndef WEBRTC_MODULES_DESKTOP_CAPTURE_BLANK_DETECTOR_DESKTOP_CAPTURER_WRAPPER_H_
 | 
| +#define WEBRTC_MODULES_DESKTOP_CAPTURE_BLANK_DETECTOR_DESKTOP_CAPTURER_WRAPPER_H_
 | 
| +
 | 
| +#include <memory>
 | 
| +
 | 
| +#include "webrtc/modules/desktop_capture/desktop_capturer.h"
 | 
| +#include "webrtc/modules/desktop_capture/rgba_color.h"
 | 
| +
 | 
| +namespace webrtc {
 | 
| +
 | 
| +// A DesktopCapturer wrapper detects the return value of its owned
 | 
| +// DesktopCapturer implementation. If sampled pixels returned by the
 | 
| +// DesktopCapturer implementation all equal to the blank pixel, this wrapper
 | 
| +// returns ERROR_TEMPORARY. If the DesktopCapturer implementation fails for too
 | 
| +// many times, this wrapper returns ERROR_PERMANENT.
 | 
| +class BlankDetectorDesktopCapturerWrapper final
 | 
| +    : public DesktopCapturer,
 | 
| +      public DesktopCapturer::Callback {
 | 
| + public:
 | 
| +  BlankDetectorDesktopCapturerWrapper(std::unique_ptr<DesktopCapturer> capturer,
 | 
| +                                      RgbaColor blank_pixel,
 | 
| +                                      int permenant_failure_threshold);
 | 
| +  ~BlankDetectorDesktopCapturerWrapper() override;
 | 
| +
 | 
| +  // DesktopCapturer interface.
 | 
| +  void Start(DesktopCapturer::Callback* callback) override;
 | 
| +  void SetSharedMemoryFactory(
 | 
| +      std::unique_ptr<SharedMemoryFactory> shared_memory_factory) override;
 | 
| +  void CaptureFrame() override;
 | 
| +  void SetExcludedWindow(WindowId window) override;
 | 
| +  bool GetSourceList(SourceList* sources) override;
 | 
| +  bool SelectSource(SourceId id) override;
 | 
| +  bool FocusOnSelectedSource() override;
 | 
| +
 | 
| + private:
 | 
| +  // DesktopCapturer::Callback interface.
 | 
| +  void OnCaptureResult(Result result,
 | 
| +                       std::unique_ptr<DesktopFrame> frame) override;
 | 
| +
 | 
| +  bool IsBlankFrame(const DesktopFrame& frame) const;
 | 
| +
 | 
| +  // Detects whether pixel at (x, y) equals to |blank_pixel_|.
 | 
| +  bool IsBlankPixel(const DesktopFrame& frame, int x, int y) const;
 | 
| +
 | 
| +  const std::unique_ptr<DesktopCapturer> capturer_;
 | 
| +  const RgbaColor blank_pixel_;
 | 
| +  // The count of failures before this wrapper returns an ERROR_PERMANENT. Set
 | 
| +  // this value to negative to always return ERROR_TEMPORARY.
 | 
| +  const int permenant_failure_threshold_;
 | 
| +  // The count of blank frames received in sequence. Any frames passing the
 | 
| +  // blank detection resets this counter.
 | 
| +  int failure_count_ = 0;
 | 
| +  DesktopCapturer::Callback* callback_ = nullptr;
 | 
| +};
 | 
| +
 | 
| +}  // namespace webrtc
 | 
| +
 | 
| +#endif  // WEBRTC_MODULES_DESKTOP_CAPTURE_BLANK_DETECTOR_DESKTOP_CAPTURER_WRAPPER_H_
 | 
| 
 |