123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- /*
- * Copyright (c) 2016 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_DESKTOP_FRAME_GENERATOR_H_
- #define MODULES_DESKTOP_CAPTURE_DESKTOP_FRAME_GENERATOR_H_
- #include <memory>
- #include "modules/desktop_capture/desktop_frame.h"
- #include "modules/desktop_capture/desktop_geometry.h"
- #include "modules/desktop_capture/desktop_region.h"
- #include "modules/desktop_capture/shared_memory.h"
- namespace webrtc {
- // An interface to generate a DesktopFrame.
- class DesktopFrameGenerator {
- public:
- DesktopFrameGenerator();
- virtual ~DesktopFrameGenerator();
- virtual std::unique_ptr<DesktopFrame> GetNextFrame(
- SharedMemoryFactory* factory) = 0;
- };
- // An interface to paint a DesktopFrame. This interface is used by
- // PainterDesktopFrameGenerator.
- class DesktopFramePainter {
- public:
- DesktopFramePainter();
- virtual ~DesktopFramePainter();
- virtual bool Paint(DesktopFrame* frame, DesktopRegion* updated_region) = 0;
- };
- // An implementation of DesktopFrameGenerator to take care about the
- // DesktopFrame size, filling updated_region(), etc, but leaves the real
- // painting work to a DesktopFramePainter implementation.
- class PainterDesktopFrameGenerator final : public DesktopFrameGenerator {
- public:
- PainterDesktopFrameGenerator();
- ~PainterDesktopFrameGenerator() override;
- std::unique_ptr<DesktopFrame> GetNextFrame(
- SharedMemoryFactory* factory) override;
- // Sets the size of the frame which will be returned in next GetNextFrame()
- // call.
- DesktopSize* size();
- // Decides whether BaseDesktopFrameGenerator returns a frame in next Capture()
- // callback. If return_frame_ is true, BaseDesktopFrameGenerator will create a
- // frame according to both size_ and SharedMemoryFactory input, and uses
- // Paint() function to paint it.
- void set_return_frame(bool return_frame);
- // Decides whether MockScreenCapturer returns a frame with updated regions.
- // MockScreenCapturer will keep DesktopFrame::updated_region() empty if this
- // field is false.
- void set_provide_updated_region_hints(bool provide_updated_region_hints);
- // Decides whether MockScreenCapturer randomly enlarges updated regions in the
- // DesktopFrame. Set this field to true to simulate an inaccurate updated
- // regions' return from OS APIs.
- void set_enlarge_updated_region(bool enlarge_updated_region);
- // The range to enlarge a updated region if |enlarge_updated_region_| is true.
- // If this field is less than zero, it will be treated as zero, and
- // |enlarge_updated_region_| will be ignored.
- void set_enlarge_range(int enlarge_range);
- // Decides whether BaseDesktopFrameGenerator randomly add some updated regions
- // in the DesktopFrame. Set this field to true to simulate an inaccurate
- // updated regions' return from OS APIs.
- void set_add_random_updated_region(bool add_random_updated_region);
- // Sets the painter object to do the real painting work, if no |painter_| has
- // been set to this instance, the DesktopFrame returned by GetNextFrame()
- // function will keep in an undefined but valid state.
- // PainterDesktopFrameGenerator does not take ownership of the |painter|.
- void set_desktop_frame_painter(DesktopFramePainter* painter);
- private:
- DesktopSize size_;
- bool return_frame_;
- bool provide_updated_region_hints_;
- bool enlarge_updated_region_;
- int enlarge_range_;
- bool add_random_updated_region_;
- DesktopFramePainter* painter_;
- };
- // An implementation of DesktopFramePainter to paint black on
- // mutable_updated_region(), and white elsewhere.
- class BlackWhiteDesktopFramePainter final : public DesktopFramePainter {
- public:
- BlackWhiteDesktopFramePainter();
- ~BlackWhiteDesktopFramePainter() override;
- // The black regions of the frame which will be returned in next Paint()
- // call. BlackWhiteDesktopFramePainter will draw a white frame, with black
- // in the updated_region_. Each Paint() call will consume updated_region_.
- DesktopRegion* updated_region();
- // DesktopFramePainter interface.
- bool Paint(DesktopFrame* frame, DesktopRegion* updated_region) override;
- private:
- DesktopRegion updated_region_;
- };
- } // namespace webrtc
- #endif // MODULES_DESKTOP_CAPTURE_DESKTOP_FRAME_GENERATOR_H_
|