shared_memory_virtual_device_mojo_adapter.h 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. // Copyright 2017 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_SHARED_MEMORY_VIRTUAL_DEVICE_MOJO_ADAPTER_H_
  5. #define SERVICES_VIDEO_CAPTURE_SHARED_MEMORY_VIRTUAL_DEVICE_MOJO_ADAPTER_H_
  6. #include "base/sequence_checker.h"
  7. #include "media/capture/video/video_capture_buffer_pool.h"
  8. #include "media/capture/video_capture_types.h"
  9. #include "mojo/public/cpp/bindings/pending_remote.h"
  10. #include "mojo/public/cpp/bindings/remote.h"
  11. #include "services/video_capture/public/cpp/video_frame_access_handler.h"
  12. #include "services/video_capture/public/mojom/device.mojom.h"
  13. #include "services/video_capture/public/mojom/producer.mojom.h"
  14. #include "services/video_capture/public/mojom/video_frame_handler.mojom.h"
  15. #include "services/video_capture/public/mojom/virtual_device.mojom.h"
  16. namespace video_capture {
  17. class SharedMemoryVirtualDeviceMojoAdapter
  18. : public mojom::SharedMemoryVirtualDevice,
  19. public mojom::Device {
  20. public:
  21. SharedMemoryVirtualDeviceMojoAdapter(
  22. mojo::Remote<mojom::Producer> producer,
  23. bool send_buffer_handles_to_producer_as_raw_file_descriptors = false);
  24. SharedMemoryVirtualDeviceMojoAdapter(
  25. const SharedMemoryVirtualDeviceMojoAdapter&) = delete;
  26. SharedMemoryVirtualDeviceMojoAdapter& operator=(
  27. const SharedMemoryVirtualDeviceMojoAdapter&) = delete;
  28. ~SharedMemoryVirtualDeviceMojoAdapter() override;
  29. // mojom::SharedMemoryVirtualDevice implementation.
  30. void RequestFrameBuffer(const gfx::Size& dimension,
  31. media::VideoPixelFormat pixel_format,
  32. media::mojom::PlaneStridesPtr strides,
  33. RequestFrameBufferCallback callback) override;
  34. void OnFrameReadyInBuffer(
  35. int32_t buffer_id,
  36. ::media::mojom::VideoFrameInfoPtr frame_info) override;
  37. // mojom::Device implementation.
  38. void Start(const media::VideoCaptureParams& requested_settings,
  39. mojo::PendingRemote<mojom::VideoFrameHandler> receiver) override;
  40. void MaybeSuspend() override;
  41. void Resume() override;
  42. void GetPhotoState(GetPhotoStateCallback callback) override;
  43. void SetPhotoOptions(media::mojom::PhotoSettingsPtr settings,
  44. SetPhotoOptionsCallback callback) override;
  45. void TakePhoto(TakePhotoCallback callback) override;
  46. void ProcessFeedback(const media::VideoCaptureFeedback& feedback) override;
  47. void RequestRefreshFrame() override;
  48. void Stop();
  49. // Returns the fixed maximum number of buffers passed to the constructor
  50. // of VideoCaptureBufferPoolImpl.
  51. static int max_buffer_pool_buffer_count();
  52. private:
  53. void OnReceiverConnectionErrorOrClose();
  54. mojo::Remote<mojom::VideoFrameHandler> video_frame_handler_;
  55. mojo::Remote<mojom::Producer> producer_;
  56. const bool send_buffer_handles_to_producer_as_raw_file_descriptors_;
  57. scoped_refptr<media::VideoCaptureBufferPool> buffer_pool_;
  58. std::vector<int> known_buffer_ids_;
  59. scoped_refptr<ScopedAccessPermissionMap> scoped_access_permission_map_;
  60. SEQUENCE_CHECKER(sequence_checker_);
  61. };
  62. } // namespace video_capture
  63. #endif // SERVICES_VIDEO_CAPTURE_SHARED_MEMORY_VIRTUAL_DEVICE_MOJO_ADAPTER_H_