virtual_device_enabled_device_factory.h 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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_VIRTUAL_DEVICE_ENABLED_DEVICE_FACTORY_H_
  5. #define SERVICES_VIDEO_CAPTURE_VIRTUAL_DEVICE_ENABLED_DEVICE_FACTORY_H_
  6. #include <map>
  7. #include <utility>
  8. #include "build/build_config.h"
  9. #include "mojo/public/cpp/bindings/pending_receiver.h"
  10. #include "mojo/public/cpp/bindings/pending_remote.h"
  11. #include "mojo/public/cpp/bindings/remote.h"
  12. #include "services/video_capture/device_factory.h"
  13. #include "services/video_capture/public/mojom/device.mojom.h"
  14. #include "services/video_capture/public/mojom/devices_changed_observer.mojom.h"
  15. #include "services/video_capture/public/mojom/virtual_device.mojom.h"
  16. namespace video_capture {
  17. // Decorator that adds support for virtual devices to a given DeviceFactory.
  18. class VirtualDeviceEnabledDeviceFactory : public DeviceFactory {
  19. public:
  20. explicit VirtualDeviceEnabledDeviceFactory(
  21. std::unique_ptr<DeviceFactory> factory);
  22. VirtualDeviceEnabledDeviceFactory(const VirtualDeviceEnabledDeviceFactory&) =
  23. delete;
  24. VirtualDeviceEnabledDeviceFactory& operator=(
  25. const VirtualDeviceEnabledDeviceFactory&) = delete;
  26. ~VirtualDeviceEnabledDeviceFactory() override;
  27. // DeviceFactory implementation.
  28. void GetDeviceInfos(GetDeviceInfosCallback callback) override;
  29. void CreateDevice(const std::string& device_id,
  30. mojo::PendingReceiver<mojom::Device> device_receiver,
  31. CreateDeviceCallback callback) override;
  32. void AddSharedMemoryVirtualDevice(
  33. const media::VideoCaptureDeviceInfo& device_info,
  34. mojo::PendingRemote<mojom::Producer> producer,
  35. bool send_buffer_handles_to_producer_as_raw_file_descriptors,
  36. mojo::PendingReceiver<mojom::SharedMemoryVirtualDevice>
  37. virtual_device_receiver) override;
  38. void AddTextureVirtualDevice(
  39. const media::VideoCaptureDeviceInfo& device_info,
  40. mojo::PendingReceiver<mojom::TextureVirtualDevice>
  41. virtual_device_receiver) override;
  42. void AddGpuMemoryBufferVirtualDevice(
  43. const media::VideoCaptureDeviceInfo& device_info,
  44. mojo::PendingReceiver<mojom::GpuMemoryBufferVirtualDevice>
  45. virtual_device_receiver) override;
  46. void RegisterVirtualDevicesChangedObserver(
  47. mojo::PendingRemote<mojom::DevicesChangedObserver> observer,
  48. bool raise_event_if_virtual_devices_already_present) override;
  49. #if BUILDFLAG(IS_WIN)
  50. void OnGpuInfoUpdate(const CHROME_LUID& luid) override;
  51. #endif
  52. private:
  53. class VirtualDeviceEntry;
  54. void OnGetDeviceInfos(
  55. GetDeviceInfosCallback callback,
  56. const std::vector<media::VideoCaptureDeviceInfo>& device_infos);
  57. void OnVirtualDeviceProducerConnectionErrorOrClose(
  58. const std::string& device_id);
  59. void OnVirtualDeviceConsumerConnectionErrorOrClose(
  60. const std::string& device_id);
  61. void EmitDevicesChangedEvent();
  62. void OnDevicesChangedObserverDisconnected(
  63. mojom::DevicesChangedObserver* observer);
  64. std::map<std::string, VirtualDeviceEntry> virtual_devices_by_id_;
  65. const std::unique_ptr<DeviceFactory> device_factory_;
  66. std::vector<mojo::Remote<mojom::DevicesChangedObserver>>
  67. devices_changed_observers_;
  68. base::WeakPtrFactory<VirtualDeviceEnabledDeviceFactory> weak_factory_{this};
  69. };
  70. } // namespace video_capture
  71. #endif // SERVICES_VIDEO_CAPTURE_VIRTUAL_DEVICE_ENABLED_DEVICE_FACTORY_H_