/* * 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 #include "modules/desktop_capture/desktop_capturer.h" #include "modules/desktop_capture/desktop_capturer_wrapper.h" #include "modules/desktop_capture/desktop_frame.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* 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 base_capturer, ResultObserver* observer); ~CaptureResultDesktopCapturerWrapper() override; // DesktopCapturer implementations. void Start(Callback* callback) final; private: // DesktopCapturer::Callback implementation. void OnCaptureResult(Result result, std::unique_ptr frame) final; ResultObserver* const observer_; Callback* callback_ = nullptr; }; } // namespace webrtc #endif // MODULES_DESKTOP_CAPTURE_CAPTURE_RESULT_DESKTOP_CAPTURER_WRAPPER_H_