gpu_memory_buffer_virtual_device_mojo_adapter.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. // Copyright 2020 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef SERVICES_VIDEO_CAPTURE_GPU_MEMORY_BUFFER_VIRTUAL_DEVICE_MOJO_ADAPTER_H_
  5. #define SERVICES_VIDEO_CAPTURE_GPU_MEMORY_BUFFER_VIRTUAL_DEVICE_MOJO_ADAPTER_H_
  6. #include <map>
  7. #include "base/callback.h"
  8. #include "base/sequence_checker.h"
  9. #include "media/capture/video/video_capture_buffer_pool.h"
  10. #include "media/capture/video_capture_types.h"
  11. #include "mojo/public/cpp/bindings/pending_remote.h"
  12. #include "mojo/public/cpp/bindings/remote.h"
  13. #include "services/video_capture/public/cpp/video_frame_access_handler.h"
  14. #include "services/video_capture/public/mojom/device.mojom.h"
  15. #include "services/video_capture/public/mojom/producer.mojom.h"
  16. #include "services/video_capture/public/mojom/video_frame_handler.mojom.h"
  17. #include "services/video_capture/public/mojom/virtual_device.mojom.h"
  18. namespace video_capture {
  19. class GpuMemoryBufferVirtualDeviceMojoAdapter
  20. : public mojom::GpuMemoryBufferVirtualDevice,
  21. public mojom::Device {
  22. public:
  23. GpuMemoryBufferVirtualDeviceMojoAdapter();
  24. GpuMemoryBufferVirtualDeviceMojoAdapter(
  25. GpuMemoryBufferVirtualDeviceMojoAdapter&) = delete;
  26. GpuMemoryBufferVirtualDeviceMojoAdapter& operator=(
  27. GpuMemoryBufferVirtualDeviceMojoAdapter&) = delete;
  28. GpuMemoryBufferVirtualDeviceMojoAdapter(
  29. const GpuMemoryBufferVirtualDeviceMojoAdapter&) = delete;
  30. GpuMemoryBufferVirtualDeviceMojoAdapter& operator=(
  31. const GpuMemoryBufferVirtualDeviceMojoAdapter&) = delete;
  32. ~GpuMemoryBufferVirtualDeviceMojoAdapter() override;
  33. void SetReceiverDisconnectedCallback(base::OnceClosure callback);
  34. // mojom::GpuMemoryBufferVirtualDevice implementation.
  35. void OnNewGpuMemoryBufferHandle(
  36. int32_t buffer_id,
  37. gfx::GpuMemoryBufferHandle gmb_handle) override;
  38. void OnFrameAccessHandlerReady(
  39. mojo::PendingRemote<video_capture::mojom::VideoFrameAccessHandler>
  40. pending_frame_access_handler) override;
  41. void OnFrameReadyInBuffer(
  42. int32_t buffer_id,
  43. media::mojom::VideoFrameInfoPtr frame_info) override;
  44. void OnBufferRetired(int buffer_id) override;
  45. // mojom::Device implementation.
  46. void Start(const media::VideoCaptureParams& requested_settings,
  47. mojo::PendingRemote<mojom::VideoFrameHandler> handler) override;
  48. void MaybeSuspend() override;
  49. void Resume() override;
  50. void GetPhotoState(GetPhotoStateCallback callback) override;
  51. void SetPhotoOptions(media::mojom::PhotoSettingsPtr settings,
  52. SetPhotoOptionsCallback callback) override;
  53. void TakePhoto(TakePhotoCallback callback) override;
  54. void ProcessFeedback(const media::VideoCaptureFeedback& feedback) override;
  55. void RequestRefreshFrame() override;
  56. void Stop();
  57. private:
  58. void OnReceiverConnectionErrorOrClose();
  59. base::OnceClosure optional_receiver_disconnected_callback_;
  60. // The |video_frame_handler_| can be bound and unbound during the lifetime of
  61. // this adapter (e.g. due to Start(), Stop() and Start() again).
  62. mojo::Remote<mojom::VideoFrameHandler> video_frame_handler_;
  63. std::map<int32_t, gfx::GpuMemoryBufferHandle> known_buffer_handles_;
  64. // Because the adapter's lifetime can be greater than |video_frame_handler_|,
  65. // each handler that is bound gets forwarded its own instance of
  66. // VideoFrameAccessHandlerForwarder.
  67. scoped_refptr<VideoFrameAccessHandlerRemote> frame_access_handler_remote_;
  68. bool video_frame_handler_has_forwarder_ = false;
  69. SEQUENCE_CHECKER(sequence_checker_);
  70. };
  71. } // namespace video_capture
  72. #endif // SERVICES_VIDEO_CAPTURE_GPU_MEMORY_BUFFER_VIRTUAL_DEVICE_MOJO_ADAPTER_H_