| /* |
| * 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 MODULES_DESKTOP_CAPTURE_CAPTURE_RESULT_DESKTOP_CAPTURER_WRAPPER_H_ |
| #define MODULES_DESKTOP_CAPTURE_CAPTURE_RESULT_DESKTOP_CAPTURER_WRAPPER_H_ |
| |
| #include <memory> |
| |
| #include "modules/desktop_capture/desktop_capturer.h" |
| #include "modules/desktop_capture/desktop_capturer_wrapper.h" |
| |
| namespace webrtc { |
| |
| // A DesktopCapturerWrapper implementation to capture the result of |
| // |base_capturer|. Derived classes are expected to provide a ResultObserver |
| // implementation to observe the DesktopFrame returned by |base_capturer_|. |
| class CaptureResultDesktopCapturerWrapper : public DesktopCapturerWrapper, |
| public DesktopCapturer::Callback { |
| public: |
| using Callback = DesktopCapturer::Callback; |
| |
| // Provides a way to let derived classes or clients to modify the result |
| // returned by |base_capturer_|. |
| class ResultObserver { |
| public: |
| ResultObserver(); |
| virtual ~ResultObserver(); |
| |
| virtual void Observe(Result* result, |
| std::unique_ptr<DesktopFrame>* frame) = 0; |
| }; |
| |
| // |observer| must outlive this instance and can be |this|. |observer| is |
| // guaranteed to be executed only after the constructor and before the |
| // destructor. |
| CaptureResultDesktopCapturerWrapper( |
| std::unique_ptr<DesktopCapturer> base_capturer, |
| ResultObserver* observer); |
| |
| ~CaptureResultDesktopCapturerWrapper() override; |
| |
| // DesktopCapturer implementations. |
| void Start(Callback* callback) final; |
| |
| private: |
| // DesktopCapturer::Callback implementation. |
| void OnCaptureResult(Result result, |
| std::unique_ptr<DesktopFrame> frame) final; |
| |
| ResultObserver* const observer_; |
| Callback* callback_ = nullptr; |
| }; |
| |
| } // namespace webrtc |
| |
| #endif // MODULES_DESKTOP_CAPTURE_CAPTURE_RESULT_DESKTOP_CAPTURER_WRAPPER_H_ |