video_source_provider_impl.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // Copyright 2019 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_VIDEO_SOURCE_PROVIDER_IMPL_H_
  5. #define SERVICES_VIDEO_CAPTURE_VIDEO_SOURCE_PROVIDER_IMPL_H_
  6. #include <map>
  7. #include "base/memory/raw_ptr.h"
  8. #include "mojo/public/cpp/bindings/pending_receiver.h"
  9. #include "mojo/public/cpp/bindings/pending_remote.h"
  10. #include "mojo/public/cpp/bindings/receiver_set.h"
  11. #include "services/video_capture/device_factory.h"
  12. #include "services/video_capture/public/mojom/video_source_provider.mojom.h"
  13. namespace video_capture {
  14. class VideoSourceImpl;
  15. class VideoSourceProviderImpl : public mojom::VideoSourceProvider {
  16. public:
  17. VideoSourceProviderImpl(
  18. DeviceFactory* device_factory,
  19. base::RepeatingClosure on_last_client_disconnected_cb);
  20. VideoSourceProviderImpl(const VideoSourceProviderImpl&) = delete;
  21. VideoSourceProviderImpl& operator=(const VideoSourceProviderImpl&) = delete;
  22. ~VideoSourceProviderImpl() override;
  23. void AddClient(mojo::PendingReceiver<mojom::VideoSourceProvider> receiver);
  24. // mojom::VideoSourceProvider implementation.
  25. void GetSourceInfos(GetSourceInfosCallback callback) override;
  26. void GetVideoSource(
  27. const std::string& device_id,
  28. mojo::PendingReceiver<mojom::VideoSource> source_receiver) override;
  29. void AddSharedMemoryVirtualDevice(
  30. const media::VideoCaptureDeviceInfo& device_info,
  31. mojo::PendingRemote<mojom::Producer> producer,
  32. bool send_buffer_handles_to_producer_as_raw_file_descriptors,
  33. mojo::PendingReceiver<mojom::SharedMemoryVirtualDevice>
  34. virtual_device_receiver) override;
  35. void AddTextureVirtualDevice(
  36. const media::VideoCaptureDeviceInfo& device_info,
  37. mojo::PendingReceiver<mojom::TextureVirtualDevice>
  38. virtual_device_receiver) override;
  39. void RegisterVirtualDevicesChangedObserver(
  40. mojo::PendingRemote<mojom::DevicesChangedObserver> observer,
  41. bool raise_event_if_virtual_devices_already_present) override;
  42. void Close(CloseCallback callback) override;
  43. private:
  44. void OnClientDisconnected();
  45. void OnClientDisconnectedOrClosed();
  46. void OnVideoSourceLastClientDisconnected(const std::string& device_id);
  47. const raw_ptr<DeviceFactory> device_factory_;
  48. base::RepeatingClosure on_last_client_disconnected_cb_;
  49. int client_count_ = 0;
  50. int closed_but_not_yet_disconnected_client_count_ = 0;
  51. mojo::ReceiverSet<mojom::VideoSourceProvider> receivers_;
  52. std::map<std::string, std::unique_ptr<VideoSourceImpl>> sources_;
  53. };
  54. } // namespace video_capture
  55. #endif // SERVICES_VIDEO_CAPTURE_VIDEO_SOURCE_PROVIDER_IMPL_H_