osr_video_consumer.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. // Copyright (c) 2019 GitHub, Inc.
  2. // Use of this source code is governed by the MIT license that can be
  3. // found in the LICENSE file.
  4. #ifndef ELECTRON_SHELL_BROWSER_OSR_OSR_VIDEO_CONSUMER_H_
  5. #define ELECTRON_SHELL_BROWSER_OSR_OSR_VIDEO_CONSUMER_H_
  6. #include <memory>
  7. #include <string>
  8. #include "base/functional/callback.h"
  9. #include "base/memory/raw_ptr.h"
  10. #include "base/memory/weak_ptr.h"
  11. #include "components/viz/host/client_frame_sink_video_capturer.h"
  12. #include "media/capture/mojom/video_capture_buffer.mojom-forward.h"
  13. #include "media/capture/mojom/video_capture_types.mojom.h"
  14. namespace electron {
  15. class OffScreenRenderWidgetHostView;
  16. typedef base::RepeatingCallback<void(const gfx::Rect&, const SkBitmap&)>
  17. OnPaintCallback;
  18. class OffScreenVideoConsumer : public viz::mojom::FrameSinkVideoConsumer {
  19. public:
  20. OffScreenVideoConsumer(OffScreenRenderWidgetHostView* view,
  21. OnPaintCallback callback);
  22. ~OffScreenVideoConsumer() override;
  23. // disable copy
  24. OffScreenVideoConsumer(const OffScreenVideoConsumer&) = delete;
  25. OffScreenVideoConsumer& operator=(const OffScreenVideoConsumer&) = delete;
  26. void SetActive(bool active);
  27. void SetFrameRate(int frame_rate);
  28. void SizeChanged(const gfx::Size& size_in_pixels);
  29. private:
  30. // viz::mojom::FrameSinkVideoConsumer implementation.
  31. void OnFrameCaptured(
  32. ::media::mojom::VideoBufferHandlePtr data,
  33. ::media::mojom::VideoFrameInfoPtr info,
  34. const gfx::Rect& content_rect,
  35. mojo::PendingRemote<viz::mojom::FrameSinkVideoConsumerFrameCallbacks>
  36. callbacks) override;
  37. void OnNewSubCaptureTargetVersion(uint32_t crop_version) override;
  38. void OnFrameWithEmptyRegionCapture() override;
  39. void OnStopped() override;
  40. void OnLog(const std::string& message) override;
  41. bool CheckContentRect(const gfx::Rect& content_rect);
  42. OnPaintCallback callback_;
  43. raw_ptr<OffScreenRenderWidgetHostView> view_;
  44. std::unique_ptr<viz::ClientFrameSinkVideoCapturer> video_capturer_;
  45. base::WeakPtrFactory<OffScreenVideoConsumer> weak_ptr_factory_{this};
  46. };
  47. } // namespace electron
  48. #endif // ELECTRON_SHELL_BROWSER_OSR_OSR_VIDEO_CONSUMER_H_