Chromium Code Reviews| Index: services/video_capture/video_capture_device_factory_impl.h |
| diff --git a/services/video_capture/video_capture_device_factory_impl.h b/services/video_capture/video_capture_device_factory_impl.h |
| index 9775a57f92886087b2e2763e10d417fc0f45cb0c..6d25473e2f1e593f30db06d536e973ce12743ac0 100644 |
| --- a/services/video_capture/video_capture_device_factory_impl.h |
| +++ b/services/video_capture/video_capture_device_factory_impl.h |
| @@ -5,13 +5,21 @@ |
| #ifndef SERVICES_VIDEO_CAPTURE_VIDEO_CAPTURE_DEVICE_FACTORY_IMPL_H_ |
| #define SERVICES_VIDEO_CAPTURE_VIDEO_CAPTURE_DEVICE_FACTORY_IMPL_H_ |
| +#include <vector> |
| + |
| #include "services/video_capture/public/interfaces/video_capture_device_factory.mojom.h" |
| +#include "services/video_capture/video_capture_device_impl.h" |
| namespace video_capture { |
| -// Implementation of the VideoCaptureDeviceFactory Mojo interface. |
| class VideoCaptureDeviceFactoryImpl : public mojom::VideoCaptureDeviceFactory { |
| public: |
| + VideoCaptureDeviceFactoryImpl(); |
| + ~VideoCaptureDeviceFactoryImpl() override; |
| + |
| + void AddDevice(mojom::VideoCaptureDeviceDescriptorPtr descriptor, |
| + std::unique_ptr<VideoCaptureDeviceImpl> device); |
| + |
| // mojom::VideoCaptureDeviceFactory: |
| void EnumerateDeviceDescriptors( |
| const EnumerateDeviceDescriptorsCallback& callback) override; |
| @@ -19,7 +27,32 @@ class VideoCaptureDeviceFactoryImpl : public mojom::VideoCaptureDeviceFactory { |
| mojom::VideoCaptureDeviceDescriptorPtr device_descriptor, |
| const GetSupportedFormatsCallback& callback) override; |
| void CreateDevice(mojom::VideoCaptureDeviceDescriptorPtr device_descriptor, |
| - mojom::VideoCaptureDeviceRequest device_request) override; |
| + mojom::VideoCaptureDeviceRequest device_request, |
| + const CreateDeviceCallback& callback) override; |
| + |
| + private: |
| + // We use a std::vector of structs with the |descriptor| field as a unique |
| + // keys. We do it this way instead of using a std::map because Mojo-generated |
| + // structs (here VideoCaptureDeviceDescriptor) do not (yet) generate a |
| + // comparison operator, and we do not want to provide a custom one. The |
| + // performance penalty of linear-time lookup should be minimal assuming that |
| + // the number of capture devices is typically small. |
| + class DeviceEntry { |
| + public: |
| + DeviceEntry(mojom::VideoCaptureDeviceDescriptorPtr descriptor, |
| + std::unique_ptr<VideoCaptureDeviceImpl> bindable_target); |
| + ~DeviceEntry(); |
| + DeviceEntry(DeviceEntry&& other); |
| + DeviceEntry& operator=(DeviceEntry&& other); |
| + |
| + mojom::VideoCaptureDeviceDescriptorPtr MakeDescriptorCopy() const; |
| + |
| + private: |
| + mojom::VideoCaptureDeviceDescriptorPtr descriptor_; |
| + std::unique_ptr<VideoCaptureDeviceImpl> device_; |
| + }; |
|
mcasas
2016/08/18 21:11:21
DeviceEntry should not be copyable, so add here
DI
chfremer
2016/08/19 16:10:19
Done.
|
| + |
| + std::vector<DeviceEntry> devices_; |
| }; |
| } // namespace video_capture |