// Copyright 2018 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_VIZ_SERVICE_FRAME_SINKS_VIDEO_CAPTURE_VIDEO_CAPTURE_OVERLAY_H_ #define COMPONENTS_VIZ_SERVICE_FRAME_SINKS_VIDEO_CAPTURE_VIDEO_CAPTURE_OVERLAY_H_ #include <stdint.h> #include <memory> #include <optional> #include <string> #include <vector> #include "base/functional/callback.h" #include "base/memory/raw_ref.h" #include "base/memory/ref_counted.h" #include "base/sequence_checker.h" #include "components/viz/service/frame_sinks/video_capture/capturable_frame_sink.h" #include "components/viz/service/viz_service_export.h" #include "media/base/video_types.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/receiver.h" #include "services/viz/privileged/mojom/compositing/frame_sink_video_capture.mojom.h" #include "third_party/skia/include/core/SkBitmap.h" #include "ui/gfx/color_space.h" #include "ui/gfx/color_transform.h" #include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/rect_f.h" #include "ui/gfx/geometry/size.h" namespace media { class VideoFrame; } namespace viz { // An overlay image to be blitted onto video frames. A mojo client sets the // image, position, and size of the overlay in the video frame; and then this // VideoCaptureOverlay scales the image and maps its color space to match that // of the video frame before the blitting. // // As an optimization, the client's bitmap image is transformed (scaled, color // space converted, and pre-multiplied by alpha), and then this cached Sprite is // re-used for blitting to all successive video frames until some change // requires a different transformation. MakeRenderer() produces a Renderer // callback that holds a reference to an existing Sprite, or will create a new // one if necessary. The Renderer callback can then be run at any point in the // future, unaffected by later image, size, or color space settings changes. // // The blit algorithm uses naive linear blending. Thus, the use of non-linear // color spaces will cause losses in color accuracy. class VIZ_SERVICE_EXPORT VideoCaptureOverlay : public mojom::FrameSinkVideoCaptureOverlay { … }; } // namespace viz #endif // COMPONENTS_VIZ_SERVICE_FRAME_SINKS_VIDEO_CAPTURE_VIDEO_CAPTURE_OVERLAY_H_