Chromium Code Reviews| Index: services/video_capture/device_factory_media_to_mojo_adapter.h |
| diff --git a/services/video_capture/device_factory_media_to_mojo_adapter.h b/services/video_capture/device_factory_media_to_mojo_adapter.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..81c483f1142792f2480c26aa622112e4c3c43bf1 |
| --- /dev/null |
| +++ b/services/video_capture/device_factory_media_to_mojo_adapter.h |
| @@ -0,0 +1,69 @@ |
| +// Copyright 2016 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef SERVICES_VIDEO_CAPTURE_DEVICE_FACTORY_MEDIA_TO_MOJO_ADAPTER_H_ |
| +#define SERVICES_VIDEO_CAPTURE_DEVICE_FACTORY_MEDIA_TO_MOJO_ADAPTER_H_ |
| + |
| +#include <map> |
| + |
| +#include "media/capture/video/video_capture_device_client.h" |
| +#include "media/capture/video/video_capture_device_factory.h" |
| +#include "mojo/public/cpp/bindings/binding.h" |
| +#include "services/video_capture/public/interfaces/video_capture_device_factory.mojom.h" |
| + |
| +namespace video_capture { |
| + |
| +class VideoCaptureDeviceProxyImpl; |
| + |
| +// Wraps a media::VideoCaptureDeviceFactory and exposes its functionality |
| +// through the mojom::VideoCaptureDeviceFactory interface. |
| +// Keeps track of device instances that have been created to ensure that |
| +// it does not create more than one instance of the same |
| +// media::VideoCaptureDevice at the same time. |
| +class DeviceFactoryMediaToMojoAdapter |
| + : public mojom::VideoCaptureDeviceFactory { |
| + public: |
| + DeviceFactoryMediaToMojoAdapter( |
| + std::unique_ptr<media::VideoCaptureDeviceFactory> device_factory, |
| + const media::VideoCaptureJpegDecoderFactoryCB& |
| + jpeg_decoder_factory_callback); |
| + ~DeviceFactoryMediaToMojoAdapter() override; |
| + |
| + // mojom::VideoCaptureDeviceFactory: |
| + void EnumerateDeviceDescriptors( |
| + const EnumerateDeviceDescriptorsCallback& callback) override; |
| + void GetSupportedFormats( |
| + const media::VideoCaptureDeviceDescriptor& device_descriptor, |
| + const GetSupportedFormatsCallback& callback) override; |
| + void CreateDeviceProxy( |
| + const media::VideoCaptureDeviceDescriptor& device_descriptor, |
| + mojom::VideoCaptureDeviceProxyRequest proxy_request, |
| + const CreateDeviceProxyCallback& callback) override; |
| + |
| + private: |
| + struct ActiveDeviceEntry { |
| + ActiveDeviceEntry(); |
| + ~ActiveDeviceEntry(); |
| + ActiveDeviceEntry(ActiveDeviceEntry&& other); |
| + ActiveDeviceEntry& operator=(ActiveDeviceEntry&& other); |
| + |
| + std::unique_ptr<VideoCaptureDeviceProxyImpl> device_proxy; |
| + // TODO(chfremer) Use mojo::Binding<> directly instead of unique_ptr<> when |
| + // mojo::Binding<> supports move operators. |
| + // https://crbug.com/644314 |
| + std::unique_ptr<mojo::Binding<mojom::VideoCaptureDeviceProxy>> binding; |
| + }; |
| + |
| + void OnClientConnectionErrorOrClose( |
| + media::VideoCaptureDeviceDescriptor descriptor); |
|
mcasas
2016/11/04 23:24:29
const & ?
chfremer
2016/11/07 18:42:36
Done.
|
| + |
| + std::unique_ptr<media::VideoCaptureDeviceFactory> device_factory_; |
| + std::map<media::VideoCaptureDeviceDescriptor, ActiveDeviceEntry> |
| + active_devices_; |
| + media::VideoCaptureJpegDecoderFactoryCB jpeg_decoder_factory_callback_; |
|
mcasas
2016/11/04 23:24:29
can |jpeg_decoder_factory_callback_| and |device_f
chfremer
2016/11/07 18:42:36
Done.
|
| +}; |
| + |
| +} // namespace video_capture |
| + |
| +#endif // SERVICES_VIDEO_CAPTURE_DEVICE_FACTORY_MEDIA_TO_MOJO_ADAPTER_H_ |