Commit 9d3c20c1 authored by Gyuyoung Kim's avatar Gyuyoung Kim Committed by Commit Bot

Migrate DeviceFactory to new Mojo types

This CL applies new Mojo types to DeviceFactory interface.

 - Convert FooRequest to mojo::PendingReceiver.
 - Convert FooPtr to mojo::PendingRemote or mojo::Remote.

Bug: 955171
Change-Id: I10429fd35a8268e947b5ba8a61b5328665092bec
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1865320Reviewed-by: default avatarKen Rockot <rockot@google.com>
Reviewed-by: default avatarGuido Urdaneta <guidou@chromium.org>
Reviewed-by: default avatarDominick Ng <dominickn@chromium.org>
Commit-Queue: Gyuyoung Kim <gyuyoung@igalia.com>
Cr-Commit-Position: refs/heads/master@{#707643}
parent 9aed1496
...@@ -238,16 +238,16 @@ class SharedMemoryDeviceExerciser : public VirtualDeviceExerciser, ...@@ -238,16 +238,16 @@ class SharedMemoryDeviceExerciser : public VirtualDeviceExerciser,
public: public:
explicit SharedMemoryDeviceExerciser( explicit SharedMemoryDeviceExerciser(
media::mojom::PlaneStridesPtr strides = nullptr) media::mojom::PlaneStridesPtr strides = nullptr)
: strides_(std::move(strides)), producer_binding_(this) {} : strides_(std::move(strides)) {}
// VirtualDeviceExerciser implementation. // VirtualDeviceExerciser implementation.
void Initialize() override {} void Initialize() override {}
void RegisterVirtualDeviceAtFactory( void RegisterVirtualDeviceAtFactory(
video_capture::mojom::DeviceFactoryPtr* factory, video_capture::mojom::DeviceFactoryPtr* factory,
const media::VideoCaptureDeviceInfo& info) override { const media::VideoCaptureDeviceInfo& info) override {
video_capture::mojom::ProducerPtr producer; mojo::PendingRemote<video_capture::mojom::Producer> producer;
static const bool kSendBufferHandlesToProducerAsRawFileDescriptors = false; static const bool kSendBufferHandlesToProducerAsRawFileDescriptors = false;
producer_binding_.Bind(mojo::MakeRequest(&producer)); producer_receiver_.Bind(producer.InitWithNewPipeAndPassReceiver());
(*factory)->AddSharedMemoryVirtualDevice( (*factory)->AddSharedMemoryVirtualDevice(
info, std::move(producer), info, std::move(producer),
kSendBufferHandlesToProducerAsRawFileDescriptors, kSendBufferHandlesToProducerAsRawFileDescriptors,
...@@ -266,7 +266,7 @@ class SharedMemoryDeviceExerciser : public VirtualDeviceExerciser, ...@@ -266,7 +266,7 @@ class SharedMemoryDeviceExerciser : public VirtualDeviceExerciser,
} }
void ShutDown() override { void ShutDown() override {
virtual_device_ = nullptr; virtual_device_ = nullptr;
producer_binding_.Close(); producer_receiver_.reset();
weak_factory_.InvalidateWeakPtrs(); weak_factory_.InvalidateWeakPtrs();
} }
...@@ -387,7 +387,7 @@ class SharedMemoryDeviceExerciser : public VirtualDeviceExerciser, ...@@ -387,7 +387,7 @@ class SharedMemoryDeviceExerciser : public VirtualDeviceExerciser,
} }
media::mojom::PlaneStridesPtr strides_; media::mojom::PlaneStridesPtr strides_;
mojo::Binding<video_capture::mojom::Producer> producer_binding_; mojo::Receiver<video_capture::mojom::Producer> producer_receiver_{this};
video_capture::mojom::SharedMemoryVirtualDevicePtr virtual_device_; video_capture::mojom::SharedMemoryVirtualDevicePtr virtual_device_;
std::map<int32_t /*buffer_id*/, base::WritableSharedMemoryMapping> std::map<int32_t /*buffer_id*/, base::WritableSharedMemoryMapping>
outgoing_buffer_id_to_buffer_map_; outgoing_buffer_id_to_buffer_map_;
......
...@@ -102,20 +102,21 @@ class WebRtcVideoCaptureServiceEnumerationBrowserTest ...@@ -102,20 +102,21 @@ class WebRtcVideoCaptureServiceEnumerationBrowserTest
closure_to_be_called_on_devices_changed_ = wait_loop.QuitClosure(); closure_to_be_called_on_devices_changed_ = wait_loop.QuitClosure();
switch (GetParam().device_type) { switch (GetParam().device_type) {
case VirtualDeviceType::kSharedMemory: { case VirtualDeviceType::kSharedMemory: {
video_capture::mojom::SharedMemoryVirtualDevicePtr virtual_device; mojo::PendingRemote<video_capture::mojom::SharedMemoryVirtualDevice>
video_capture::mojom::ProducerPtr producer; virtual_device;
mojo::PendingRemote<video_capture::mojom::Producer> producer;
auto mock_producer = std::make_unique<video_capture::MockProducer>( auto mock_producer = std::make_unique<video_capture::MockProducer>(
mojo::MakeRequest(&producer)); producer.InitWithNewPipeAndPassReceiver());
switch (GetParam().api_to_use) { switch (GetParam().api_to_use) {
case ServiceApi::kSingleClient: case ServiceApi::kSingleClient:
factory_->AddSharedMemoryVirtualDevice( factory_->AddSharedMemoryVirtualDevice(
info, std::move(producer), false, info, std::move(producer), false,
mojo::MakeRequest(&virtual_device)); virtual_device.InitWithNewPipeAndPassReceiver());
break; break;
case ServiceApi::kMultiClient: case ServiceApi::kMultiClient:
video_source_provider_->AddSharedMemoryVirtualDevice( video_source_provider_->AddSharedMemoryVirtualDevice(
info, std::move(producer), false, info, std::move(producer), false,
mojo::MakeRequest(&virtual_device)); virtual_device.InitWithNewPipeAndPassReceiver());
break; break;
} }
shared_memory_devices_by_id_.insert(std::make_pair( shared_memory_devices_by_id_.insert(std::make_pair(
......
...@@ -142,15 +142,17 @@ void DeviceFactoryMediaToMojoAdapter::CreateDevice( ...@@ -142,15 +142,17 @@ void DeviceFactoryMediaToMojoAdapter::CreateDevice(
void DeviceFactoryMediaToMojoAdapter::AddSharedMemoryVirtualDevice( void DeviceFactoryMediaToMojoAdapter::AddSharedMemoryVirtualDevice(
const media::VideoCaptureDeviceInfo& device_info, const media::VideoCaptureDeviceInfo& device_info,
mojom::ProducerPtr producer, mojo::PendingRemote<mojom::Producer> producer,
bool send_buffer_handles_to_producer_as_raw_file_descriptors, bool send_buffer_handles_to_producer_as_raw_file_descriptors,
mojom::SharedMemoryVirtualDeviceRequest virtual_device_request) { mojo::PendingReceiver<mojom::SharedMemoryVirtualDevice>
virtual_device_receiver) {
NOTIMPLEMENTED(); NOTIMPLEMENTED();
} }
void DeviceFactoryMediaToMojoAdapter::AddTextureVirtualDevice( void DeviceFactoryMediaToMojoAdapter::AddTextureVirtualDevice(
const media::VideoCaptureDeviceInfo& device_info, const media::VideoCaptureDeviceInfo& device_info,
mojom::TextureVirtualDeviceRequest virtual_device_request) { mojo::PendingReceiver<mojom::TextureVirtualDevice>
virtual_device_receiver) {
NOTIMPLEMENTED(); NOTIMPLEMENTED();
} }
......
...@@ -10,6 +10,8 @@ ...@@ -10,6 +10,8 @@
#include "media/capture/video/video_capture_device_client.h" #include "media/capture/video/video_capture_device_client.h"
#include "media/capture/video/video_capture_system.h" #include "media/capture/video/video_capture_system.h"
#include "mojo/public/cpp/bindings/binding.h" #include "mojo/public/cpp/bindings/binding.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "services/video_capture/device_factory.h" #include "services/video_capture/device_factory.h"
#include "services/video_capture/public/mojom/devices_changed_observer.mojom.h" #include "services/video_capture/public/mojom/devices_changed_observer.mojom.h"
...@@ -45,12 +47,14 @@ class DeviceFactoryMediaToMojoAdapter : public DeviceFactory { ...@@ -45,12 +47,14 @@ class DeviceFactoryMediaToMojoAdapter : public DeviceFactory {
CreateDeviceCallback callback) override; CreateDeviceCallback callback) override;
void AddSharedMemoryVirtualDevice( void AddSharedMemoryVirtualDevice(
const media::VideoCaptureDeviceInfo& device_info, const media::VideoCaptureDeviceInfo& device_info,
mojom::ProducerPtr producer, mojo::PendingRemote<mojom::Producer> producer,
bool send_buffer_handles_to_producer_as_raw_file_descriptors, bool send_buffer_handles_to_producer_as_raw_file_descriptors,
mojom::SharedMemoryVirtualDeviceRequest virtual_device) override; mojo::PendingReceiver<mojom::SharedMemoryVirtualDevice>
virtual_device_receiver) override;
void AddTextureVirtualDevice( void AddTextureVirtualDevice(
const media::VideoCaptureDeviceInfo& device_info, const media::VideoCaptureDeviceInfo& device_info,
mojom::TextureVirtualDeviceRequest virtual_device) override; mojo::PendingReceiver<mojom::TextureVirtualDevice>
virtual_device_receiver) override;
void RegisterVirtualDevicesChangedObserver( void RegisterVirtualDevicesChangedObserver(
mojom::DevicesChangedObserverPtr observer, mojom::DevicesChangedObserverPtr observer,
bool raise_event_if_virtual_devices_already_present) override; bool raise_event_if_virtual_devices_already_present) override;
......
...@@ -23,16 +23,19 @@ void MockDeviceFactory::CreateDevice( ...@@ -23,16 +23,19 @@ void MockDeviceFactory::CreateDevice(
void MockDeviceFactory::AddSharedMemoryVirtualDevice( void MockDeviceFactory::AddSharedMemoryVirtualDevice(
const media::VideoCaptureDeviceInfo& device_info, const media::VideoCaptureDeviceInfo& device_info,
video_capture::mojom::ProducerPtr producer, mojo::PendingRemote<video_capture::mojom::Producer> producer,
bool send_buffer_handles_to_producer_as_raw_file_descriptors, bool send_buffer_handles_to_producer_as_raw_file_descriptors,
video_capture::mojom::SharedMemoryVirtualDeviceRequest virtual_device) { mojo::PendingReceiver<video_capture::mojom::SharedMemoryVirtualDevice>
DoAddVirtualDevice(device_info, producer.get(), &virtual_device); virtual_device_receiver) {
DoAddVirtualDevice(device_info, std::move(producer),
std::move(virtual_device_receiver));
} }
void MockDeviceFactory::AddTextureVirtualDevice( void MockDeviceFactory::AddTextureVirtualDevice(
const media::VideoCaptureDeviceInfo& device_info, const media::VideoCaptureDeviceInfo& device_info,
video_capture::mojom::TextureVirtualDeviceRequest virtual_device) { mojo::PendingReceiver<video_capture::mojom::TextureVirtualDevice>
DoAddTextureVirtualDevice(device_info, &virtual_device); virtual_device_receiver) {
DoAddTextureVirtualDevice(device_info, std::move(virtual_device_receiver));
} }
} // namespace video_capture } // namespace video_capture
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
#ifndef SERVICES_VIDEO_CAPTURE_PUBLIC_CPP_MOCK_DEVICE_FACTORY_H_ #ifndef SERVICES_VIDEO_CAPTURE_PUBLIC_CPP_MOCK_DEVICE_FACTORY_H_
#define SERVICES_VIDEO_CAPTURE_PUBLIC_CPP_MOCK_DEVICE_FACTORY_H_ #define SERVICES_VIDEO_CAPTURE_PUBLIC_CPP_MOCK_DEVICE_FACTORY_H_
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "services/video_capture/public/mojom/device_factory.mojom.h" #include "services/video_capture/public/mojom/device_factory.mojom.h"
#include "services/video_capture/public/mojom/devices_changed_observer.mojom.h" #include "services/video_capture/public/mojom/devices_changed_observer.mojom.h"
#include "services/video_capture/public/mojom/producer.mojom.h" #include "services/video_capture/public/mojom/producer.mojom.h"
...@@ -23,13 +25,14 @@ class MockDeviceFactory : public video_capture::mojom::DeviceFactory { ...@@ -23,13 +25,14 @@ class MockDeviceFactory : public video_capture::mojom::DeviceFactory {
CreateDeviceCallback callback) override; CreateDeviceCallback callback) override;
void AddSharedMemoryVirtualDevice( void AddSharedMemoryVirtualDevice(
const media::VideoCaptureDeviceInfo& device_info, const media::VideoCaptureDeviceInfo& device_info,
video_capture::mojom::ProducerPtr producer, mojo::PendingRemote<video_capture::mojom::Producer> producer,
bool send_buffer_handles_to_producer_as_raw_file_descriptors, bool send_buffer_handles_to_producer_as_raw_file_descriptors,
video_capture::mojom::SharedMemoryVirtualDeviceRequest virtual_device) mojo::PendingReceiver<video_capture::mojom::SharedMemoryVirtualDevice>
override; virtual_device_receiver) override;
void AddTextureVirtualDevice(const media::VideoCaptureDeviceInfo& device_info, void AddTextureVirtualDevice(
video_capture::mojom::TextureVirtualDeviceRequest const media::VideoCaptureDeviceInfo& device_info,
virtual_device) override; mojo::PendingReceiver<video_capture::mojom::TextureVirtualDevice>
virtual_device_receiver) override;
void RegisterVirtualDevicesChangedObserver( void RegisterVirtualDevicesChangedObserver(
video_capture::mojom::DevicesChangedObserverPtr observer, video_capture::mojom::DevicesChangedObserverPtr observer,
bool raise_event_if_virtual_devices_already_present) override { bool raise_event_if_virtual_devices_already_present) override {
...@@ -41,15 +44,18 @@ class MockDeviceFactory : public video_capture::mojom::DeviceFactory { ...@@ -41,15 +44,18 @@ class MockDeviceFactory : public video_capture::mojom::DeviceFactory {
void(const std::string& device_id, void(const std::string& device_id,
video_capture::mojom::DeviceRequest* device_request, video_capture::mojom::DeviceRequest* device_request,
CreateDeviceCallback& callback)); CreateDeviceCallback& callback));
MOCK_METHOD3(DoAddVirtualDevice, MOCK_METHOD3(
void(const media::VideoCaptureDeviceInfo& device_info, DoAddVirtualDevice,
video_capture::mojom::ProducerProxy* producer, void(
video_capture::mojom::SharedMemoryVirtualDeviceRequest* const media::VideoCaptureDeviceInfo& device_info,
virtual_device_request)); mojo::PendingRemote<video_capture::mojom::Producer> producer,
mojo::PendingReceiver<video_capture::mojom::SharedMemoryVirtualDevice>
virtual_device_receiver));
MOCK_METHOD2( MOCK_METHOD2(
DoAddTextureVirtualDevice, DoAddTextureVirtualDevice,
void(const media::VideoCaptureDeviceInfo& device_info, void(const media::VideoCaptureDeviceInfo& device_info,
video_capture::mojom::TextureVirtualDeviceRequest* virtual_device)); mojo::PendingReceiver<video_capture::mojom::TextureVirtualDevice>
virtual_device_receiver));
}; };
} // namespace video_capture } // namespace video_capture
......
...@@ -22,16 +22,19 @@ void MockVideoSourceProvider::GetSourceInfos(GetSourceInfosCallback callback) { ...@@ -22,16 +22,19 @@ void MockVideoSourceProvider::GetSourceInfos(GetSourceInfosCallback callback) {
void MockVideoSourceProvider::AddSharedMemoryVirtualDevice( void MockVideoSourceProvider::AddSharedMemoryVirtualDevice(
const media::VideoCaptureDeviceInfo& device_info, const media::VideoCaptureDeviceInfo& device_info,
video_capture::mojom::ProducerPtr producer, mojo::PendingRemote<video_capture::mojom::Producer> producer,
bool send_buffer_handles_to_producer_as_raw_file_descriptors, bool send_buffer_handles_to_producer_as_raw_file_descriptors,
video_capture::mojom::SharedMemoryVirtualDeviceRequest virtual_device) { mojo::PendingReceiver<video_capture::mojom::SharedMemoryVirtualDevice>
DoAddVirtualDevice(device_info, producer.get(), &virtual_device); virtual_device_receiver) {
DoAddVirtualDevice(device_info, std::move(producer),
std::move(virtual_device_receiver));
} }
void MockVideoSourceProvider::AddTextureVirtualDevice( void MockVideoSourceProvider::AddTextureVirtualDevice(
const media::VideoCaptureDeviceInfo& device_info, const media::VideoCaptureDeviceInfo& device_info,
video_capture::mojom::TextureVirtualDeviceRequest virtual_device) { mojo::PendingReceiver<video_capture::mojom::TextureVirtualDevice>
DoAddTextureVirtualDevice(device_info, &virtual_device); virtual_device_receiver) {
DoAddTextureVirtualDevice(device_info, std::move(virtual_device_receiver));
} }
void MockVideoSourceProvider::Close(CloseCallback callback) { void MockVideoSourceProvider::Close(CloseCallback callback) {
......
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
#ifndef SERVICES_VIDEO_CAPTURE_PUBLIC_CPP_MOCK_VIDEO_SOURCE_PROVIDER_H_ #ifndef SERVICES_VIDEO_CAPTURE_PUBLIC_CPP_MOCK_VIDEO_SOURCE_PROVIDER_H_
#define SERVICES_VIDEO_CAPTURE_PUBLIC_CPP_MOCK_VIDEO_SOURCE_PROVIDER_H_ #define SERVICES_VIDEO_CAPTURE_PUBLIC_CPP_MOCK_VIDEO_SOURCE_PROVIDER_H_
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "services/video_capture/public/mojom/devices_changed_observer.mojom.h" #include "services/video_capture/public/mojom/devices_changed_observer.mojom.h"
#include "services/video_capture/public/mojom/producer.mojom.h" #include "services/video_capture/public/mojom/producer.mojom.h"
#include "services/video_capture/public/mojom/video_source_provider.mojom.h" #include "services/video_capture/public/mojom/video_source_provider.mojom.h"
...@@ -26,14 +28,15 @@ class MockVideoSourceProvider ...@@ -26,14 +28,15 @@ class MockVideoSourceProvider
void AddSharedMemoryVirtualDevice( void AddSharedMemoryVirtualDevice(
const media::VideoCaptureDeviceInfo& device_info, const media::VideoCaptureDeviceInfo& device_info,
video_capture::mojom::ProducerPtr producer, mojo::PendingRemote<video_capture::mojom::Producer> producer,
bool send_buffer_handles_to_producer_as_raw_file_descriptors, bool send_buffer_handles_to_producer_as_raw_file_descriptors,
video_capture::mojom::SharedMemoryVirtualDeviceRequest virtual_device) mojo::PendingReceiver<video_capture::mojom::SharedMemoryVirtualDevice>
override; virtual_device_receiver) override;
void AddTextureVirtualDevice(const media::VideoCaptureDeviceInfo& device_info, void AddTextureVirtualDevice(
video_capture::mojom::TextureVirtualDeviceRequest const media::VideoCaptureDeviceInfo& device_info,
virtual_device) override; mojo::PendingReceiver<video_capture::mojom::TextureVirtualDevice>
virtual_device_receiver) override;
void RegisterVirtualDevicesChangedObserver( void RegisterVirtualDevicesChangedObserver(
video_capture::mojom::DevicesChangedObserverPtr observer, video_capture::mojom::DevicesChangedObserverPtr observer,
bool raise_event_if_virtual_devices_already_present) override { bool raise_event_if_virtual_devices_already_present) override {
...@@ -46,15 +49,18 @@ class MockVideoSourceProvider ...@@ -46,15 +49,18 @@ class MockVideoSourceProvider
MOCK_METHOD2(DoGetVideoSource, MOCK_METHOD2(DoGetVideoSource,
void(const std::string& device_id, void(const std::string& device_id,
video_capture::mojom::VideoSourceRequest* request)); video_capture::mojom::VideoSourceRequest* request));
MOCK_METHOD3(DoAddVirtualDevice, MOCK_METHOD3(
void(const media::VideoCaptureDeviceInfo& device_info, DoAddVirtualDevice,
video_capture::mojom::ProducerProxy* producer, void(
video_capture::mojom::SharedMemoryVirtualDeviceRequest* const media::VideoCaptureDeviceInfo& device_info,
virtual_device_request)); mojo::PendingRemote<video_capture::mojom::Producer> producer,
mojo::PendingReceiver<video_capture::mojom::SharedMemoryVirtualDevice>
virtual_device_receiver));
MOCK_METHOD2( MOCK_METHOD2(
DoAddTextureVirtualDevice, DoAddTextureVirtualDevice,
void(const media::VideoCaptureDeviceInfo& device_info, void(const media::VideoCaptureDeviceInfo& device_info,
video_capture::mojom::TextureVirtualDeviceRequest* virtual_device)); mojo::PendingReceiver<video_capture::mojom::TextureVirtualDevice>
virtual_device_receiver));
MOCK_METHOD1(DoClose, void(CloseCallback& callback)); MOCK_METHOD1(DoClose, void(CloseCallback& callback));
}; };
......
...@@ -54,16 +54,16 @@ interface DeviceFactory { ...@@ -54,16 +54,16 @@ interface DeviceFactory {
// |virtual_device| or the given |producer| is closed. // |virtual_device| or the given |producer| is closed.
AddSharedMemoryVirtualDevice( AddSharedMemoryVirtualDevice(
media.mojom.VideoCaptureDeviceInfo device_info, media.mojom.VideoCaptureDeviceInfo device_info,
Producer producer, pending_remote<Producer> producer,
bool send_buffer_handles_to_producer_as_raw_file_descriptors, bool send_buffer_handles_to_producer_as_raw_file_descriptors,
SharedMemoryVirtualDevice& virtual_device); pending_receiver<SharedMemoryVirtualDevice> virtual_device_receiver);
// Similar to AddSharedMemoryVirtualDevice() but for virtual devices that // Similar to AddSharedMemoryVirtualDevice() but for virtual devices that
// are fed with textures (via MailboxHolders) allocated by the caller instead // are fed with textures (via MailboxHolders) allocated by the caller instead
// of shared memory buffers provided by the service on demand. // of shared memory buffers provided by the service on demand.
AddTextureVirtualDevice( AddTextureVirtualDevice(
media.mojom.VideoCaptureDeviceInfo device_info, media.mojom.VideoCaptureDeviceInfo device_info,
TextureVirtualDevice& virtual_device); pending_receiver<TextureVirtualDevice> virtual_device_receiver);
// Registered observers will get notified whenever a virtual device is added // Registered observers will get notified whenever a virtual device is added
// or removed. Note: Changes to non-virtual devices are currently being // or removed. Note: Changes to non-virtual devices are currently being
......
...@@ -32,16 +32,16 @@ interface VideoSourceProvider { ...@@ -32,16 +32,16 @@ interface VideoSourceProvider {
// |virtual_device| or the given |producer| is closed. // |virtual_device| or the given |producer| is closed.
AddSharedMemoryVirtualDevice( AddSharedMemoryVirtualDevice(
media.mojom.VideoCaptureDeviceInfo device_info, media.mojom.VideoCaptureDeviceInfo device_info,
Producer producer, pending_remote<Producer> producer,
bool send_buffer_handles_to_producer_as_raw_file_descriptors, bool send_buffer_handles_to_producer_as_raw_file_descriptors,
SharedMemoryVirtualDevice& virtual_device); pending_receiver<SharedMemoryVirtualDevice> virtual_device_receiver);
// Similar to AddSharedMemoryVirtualDevice() but for virtual devices that // Similar to AddSharedMemoryVirtualDevice() but for virtual devices that
// are fed with textures (via MailboxHolders) allocated by the caller instead // are fed with textures (via MailboxHolders) allocated by the caller instead
// of shared memory buffers provided by the service on demand. // of shared memory buffers provided by the service on demand.
AddTextureVirtualDevice( AddTextureVirtualDevice(
media.mojom.VideoCaptureDeviceInfo device_info, media.mojom.VideoCaptureDeviceInfo device_info,
TextureVirtualDevice& virtual_device); pending_receiver<TextureVirtualDevice> virtual_device_receiver);
// Registered observers will get notified whenever a virtual device is added // Registered observers will get notified whenever a virtual device is added
// or removed. Note: Changes to non-virtual devices are currently being // or removed. Note: Changes to non-virtual devices are currently being
......
...@@ -29,7 +29,7 @@ void OnNewBufferAcknowleged( ...@@ -29,7 +29,7 @@ void OnNewBufferAcknowleged(
namespace video_capture { namespace video_capture {
SharedMemoryVirtualDeviceMojoAdapter::SharedMemoryVirtualDeviceMojoAdapter( SharedMemoryVirtualDeviceMojoAdapter::SharedMemoryVirtualDeviceMojoAdapter(
mojom::ProducerPtr producer, mojo::Remote<mojom::Producer> producer,
bool send_buffer_handles_to_producer_as_raw_file_descriptors) bool send_buffer_handles_to_producer_as_raw_file_descriptors)
: producer_(std::move(producer)), : producer_(std::move(producer)),
send_buffer_handles_to_producer_as_raw_file_descriptors_( send_buffer_handles_to_producer_as_raw_file_descriptors_(
...@@ -71,7 +71,8 @@ void SharedMemoryVirtualDeviceMojoAdapter::RequestFrameBuffer( ...@@ -71,7 +71,8 @@ void SharedMemoryVirtualDeviceMojoAdapter::RequestFrameBuffer(
known_buffer_ids_.end(), buffer_id_to_drop); known_buffer_ids_.end(), buffer_id_to_drop);
if (entry_iter != known_buffer_ids_.end()) { if (entry_iter != known_buffer_ids_.end()) {
known_buffer_ids_.erase(entry_iter); known_buffer_ids_.erase(entry_iter);
producer_->OnBufferRetired(buffer_id_to_drop); if (producer_.is_bound())
producer_->OnBufferRetired(buffer_id_to_drop);
if (receiver_.is_bound()) { if (receiver_.is_bound()) {
receiver_->OnBufferRetired(buffer_id_to_drop); receiver_->OnBufferRetired(buffer_id_to_drop);
} }
...@@ -110,9 +111,11 @@ void SharedMemoryVirtualDeviceMojoAdapter::RequestFrameBuffer( ...@@ -110,9 +111,11 @@ void SharedMemoryVirtualDeviceMojoAdapter::RequestFrameBuffer(
// because the |producer_| and the |callback| are bound to different // because the |producer_| and the |callback| are bound to different
// message pipes, so the order for calls to |producer_| and |callback| // message pipes, so the order for calls to |producer_| and |callback|
// is not guaranteed. // is not guaranteed.
producer_->OnNewBuffer(buffer_id, std::move(buffer_handle), if (producer_.is_bound())
base::BindOnce(&OnNewBufferAcknowleged, producer_->OnNewBuffer(
base::Passed(&callback), buffer_id)); buffer_id, std::move(buffer_handle),
base::BindOnce(&OnNewBufferAcknowleged, base::Passed(&callback),
buffer_id));
return; return;
} }
std::move(callback).Run(buffer_id); std::move(callback).Run(buffer_id);
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "base/sequence_checker.h" #include "base/sequence_checker.h"
#include "media/capture/video/video_capture_buffer_pool.h" #include "media/capture/video/video_capture_buffer_pool.h"
#include "media/capture/video_capture_types.h" #include "media/capture/video_capture_types.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h" #include "mojo/public/cpp/bindings/remote.h"
#include "services/video_capture/public/mojom/device.mojom.h" #include "services/video_capture/public/mojom/device.mojom.h"
#include "services/video_capture/public/mojom/producer.mojom.h" #include "services/video_capture/public/mojom/producer.mojom.h"
...@@ -21,7 +22,7 @@ class SharedMemoryVirtualDeviceMojoAdapter ...@@ -21,7 +22,7 @@ class SharedMemoryVirtualDeviceMojoAdapter
public mojom::Device { public mojom::Device {
public: public:
SharedMemoryVirtualDeviceMojoAdapter( SharedMemoryVirtualDeviceMojoAdapter(
mojom::ProducerPtr producer, mojo::Remote<mojom::Producer> producer,
bool send_buffer_handles_to_producer_as_raw_file_descriptors = false); bool send_buffer_handles_to_producer_as_raw_file_descriptors = false);
~SharedMemoryVirtualDeviceMojoAdapter() override; ~SharedMemoryVirtualDeviceMojoAdapter() override;
...@@ -54,7 +55,7 @@ class SharedMemoryVirtualDeviceMojoAdapter ...@@ -54,7 +55,7 @@ class SharedMemoryVirtualDeviceMojoAdapter
void OnReceiverConnectionErrorOrClose(); void OnReceiverConnectionErrorOrClose();
mojo::Remote<mojom::Receiver> receiver_; mojo::Remote<mojom::Receiver> receiver_;
mojom::ProducerPtr producer_; mojo::Remote<mojom::Producer> producer_;
const bool send_buffer_handles_to_producer_as_raw_file_descriptors_; const bool send_buffer_handles_to_producer_as_raw_file_descriptors_;
scoped_refptr<media::VideoCaptureBufferPool> buffer_pool_; scoped_refptr<media::VideoCaptureBufferPool> buffer_pool_;
std::vector<int> known_buffer_ids_; std::vector<int> known_buffer_ids_;
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "base/command_line.h" #include "base/command_line.h"
#include "base/threading/thread_task_runner_handle.h" #include "base/threading/thread_task_runner_handle.h"
#include "media/base/media_switches.h" #include "media/base/media_switches.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "services/video_capture/public/cpp/mock_producer.h" #include "services/video_capture/public/cpp/mock_producer.h"
#include "services/video_capture/public/mojom/constants.mojom.h" #include "services/video_capture/public/mojom/constants.mojom.h"
...@@ -46,9 +47,9 @@ VideoCaptureServiceTest::AddSharedMemoryVirtualDevice( ...@@ -46,9 +47,9 @@ VideoCaptureServiceTest::AddSharedMemoryVirtualDevice(
const std::string& device_id) { const std::string& device_id) {
media::VideoCaptureDeviceInfo device_info; media::VideoCaptureDeviceInfo device_info;
device_info.descriptor.device_id = device_id; device_info.descriptor.device_id = device_id;
mojom::ProducerPtr producer; mojo::PendingRemote<mojom::Producer> producer;
auto result = std::make_unique<SharedMemoryVirtualDeviceContext>( auto result = std::make_unique<SharedMemoryVirtualDeviceContext>(
mojo::MakeRequest(&producer)); producer.InitWithNewPipeAndPassReceiver());
factory_->AddSharedMemoryVirtualDevice( factory_->AddSharedMemoryVirtualDevice(
device_info, std::move(producer), device_info, std::move(producer),
false /* send_buffer_handles_to_producer_as_raw_file_descriptors */, false /* send_buffer_handles_to_producer_as_raw_file_descriptors */,
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "base/test/mock_callback.h" #include "base/test/mock_callback.h"
#include "base/test/task_environment.h" #include "base/test/task_environment.h"
#include "media/capture/video/video_capture_device_info.h" #include "media/capture/video/video_capture_device_info.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "services/video_capture/public/cpp/mock_producer.h" #include "services/video_capture/public/cpp/mock_producer.h"
#include "services/video_capture/public/cpp/mock_receiver.h" #include "services/video_capture/public/cpp/mock_receiver.h"
#include "services/video_capture/shared_memory_virtual_device_mojo_adapter.h" #include "services/video_capture/shared_memory_virtual_device_mojo_adapter.h"
...@@ -37,11 +38,11 @@ class VirtualDeviceTest : public ::testing::Test { ...@@ -37,11 +38,11 @@ class VirtualDeviceTest : public ::testing::Test {
void SetUp() override { void SetUp() override {
device_info_.descriptor.device_id = kTestDeviceId; device_info_.descriptor.device_id = kTestDeviceId;
device_info_.descriptor.set_display_name(kTestDeviceName); device_info_.descriptor.set_display_name(kTestDeviceName);
mojom::ProducerPtr producer_proxy; mojo::Remote<mojom::Producer> producer;
producer_ = producer_ =
std::make_unique<MockProducer>(mojo::MakeRequest(&producer_proxy)); std::make_unique<MockProducer>(producer.BindNewPipeAndPassReceiver());
device_adapter_ = std::make_unique<SharedMemoryVirtualDeviceMojoAdapter>( device_adapter_ = std::make_unique<SharedMemoryVirtualDeviceMojoAdapter>(
std::move(producer_proxy)); std::move(producer));
} }
void OnFrameBufferReceived(bool valid_buffer_expected, int32_t buffer_id) { void OnFrameBufferReceived(bool valid_buffer_expected, int32_t buffer_id) {
......
...@@ -53,20 +53,22 @@ void VideoSourceProviderImpl::GetVideoSource( ...@@ -53,20 +53,22 @@ void VideoSourceProviderImpl::GetVideoSource(
void VideoSourceProviderImpl::AddSharedMemoryVirtualDevice( void VideoSourceProviderImpl::AddSharedMemoryVirtualDevice(
const media::VideoCaptureDeviceInfo& device_info, const media::VideoCaptureDeviceInfo& device_info,
mojom::ProducerPtr producer, mojo::PendingRemote<mojom::Producer> producer,
bool send_buffer_handles_to_producer_as_raw_file_descriptors, bool send_buffer_handles_to_producer_as_raw_file_descriptors,
mojom::SharedMemoryVirtualDeviceRequest virtual_device) { mojo::PendingReceiver<mojom::SharedMemoryVirtualDevice>
virtual_device_receiver) {
device_factory_->AddSharedMemoryVirtualDevice( device_factory_->AddSharedMemoryVirtualDevice(
device_info, std::move(producer), device_info, std::move(producer),
send_buffer_handles_to_producer_as_raw_file_descriptors, send_buffer_handles_to_producer_as_raw_file_descriptors,
std::move(virtual_device)); std::move(virtual_device_receiver));
} }
void VideoSourceProviderImpl::AddTextureVirtualDevice( void VideoSourceProviderImpl::AddTextureVirtualDevice(
const media::VideoCaptureDeviceInfo& device_info, const media::VideoCaptureDeviceInfo& device_info,
mojom::TextureVirtualDeviceRequest virtual_device) { mojo::PendingReceiver<mojom::TextureVirtualDevice>
virtual_device_receiver) {
device_factory_->AddTextureVirtualDevice(device_info, device_factory_->AddTextureVirtualDevice(device_info,
std::move(virtual_device)); std::move(virtual_device_receiver));
} }
void VideoSourceProviderImpl::RegisterVirtualDevicesChangedObserver( void VideoSourceProviderImpl::RegisterVirtualDevicesChangedObserver(
......
...@@ -8,6 +8,8 @@ ...@@ -8,6 +8,8 @@
#include <map> #include <map>
#include "mojo/public/cpp/bindings/binding_set.h" #include "mojo/public/cpp/bindings/binding_set.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "services/video_capture/device_factory.h" #include "services/video_capture/device_factory.h"
#include "services/video_capture/public/mojom/video_source_provider.mojom.h" #include "services/video_capture/public/mojom/video_source_provider.mojom.h"
...@@ -30,12 +32,14 @@ class VideoSourceProviderImpl : public mojom::VideoSourceProvider { ...@@ -30,12 +32,14 @@ class VideoSourceProviderImpl : public mojom::VideoSourceProvider {
mojom::VideoSourceRequest source_request) override; mojom::VideoSourceRequest source_request) override;
void AddSharedMemoryVirtualDevice( void AddSharedMemoryVirtualDevice(
const media::VideoCaptureDeviceInfo& device_info, const media::VideoCaptureDeviceInfo& device_info,
mojom::ProducerPtr producer, mojo::PendingRemote<mojom::Producer> producer,
bool send_buffer_handles_to_producer_as_raw_file_descriptors, bool send_buffer_handles_to_producer_as_raw_file_descriptors,
mojom::SharedMemoryVirtualDeviceRequest virtual_device) override; mojo::PendingReceiver<mojom::SharedMemoryVirtualDevice>
virtual_device_receiver) override;
void AddTextureVirtualDevice( void AddTextureVirtualDevice(
const media::VideoCaptureDeviceInfo& device_info, const media::VideoCaptureDeviceInfo& device_info,
mojom::TextureVirtualDeviceRequest virtual_device) override; mojo::PendingReceiver<mojom::TextureVirtualDevice>
virtual_device_receiver) override;
void RegisterVirtualDevicesChangedObserver( void RegisterVirtualDevicesChangedObserver(
mojom::DevicesChangedObserverPtr observer, mojom::DevicesChangedObserverPtr observer,
bool raise_event_if_virtual_devices_already_present) override; bool raise_event_if_virtual_devices_already_present) override;
......
...@@ -127,9 +127,10 @@ void VirtualDeviceEnabledDeviceFactory::CreateDevice( ...@@ -127,9 +127,10 @@ void VirtualDeviceEnabledDeviceFactory::CreateDevice(
void VirtualDeviceEnabledDeviceFactory::AddSharedMemoryVirtualDevice( void VirtualDeviceEnabledDeviceFactory::AddSharedMemoryVirtualDevice(
const media::VideoCaptureDeviceInfo& device_info, const media::VideoCaptureDeviceInfo& device_info,
mojom::ProducerPtr producer, mojo::PendingRemote<mojom::Producer> producer_pending_remote,
bool send_buffer_handles_to_producer_as_raw_file_descriptors, bool send_buffer_handles_to_producer_as_raw_file_descriptors,
mojom::SharedMemoryVirtualDeviceRequest virtual_device_request) { mojo::PendingReceiver<mojom::SharedMemoryVirtualDevice>
virtual_device_receiver) {
auto device_id = device_info.descriptor.device_id; auto device_id = device_info.descriptor.device_id;
auto virtual_device_iter = virtual_devices_by_id_.find(device_id); auto virtual_device_iter = virtual_devices_by_id_.find(device_id);
if (virtual_device_iter != virtual_devices_by_id_.end()) { if (virtual_device_iter != virtual_devices_by_id_.end()) {
...@@ -138,7 +139,8 @@ void VirtualDeviceEnabledDeviceFactory::AddSharedMemoryVirtualDevice( ...@@ -138,7 +139,8 @@ void VirtualDeviceEnabledDeviceFactory::AddSharedMemoryVirtualDevice(
virtual_devices_by_id_.erase(virtual_device_iter); virtual_devices_by_id_.erase(virtual_device_iter);
} }
producer.set_connection_error_handler( mojo::Remote<mojom::Producer> producer(std::move(producer_pending_remote));
producer.set_disconnect_handler(
base::BindOnce(&VirtualDeviceEnabledDeviceFactory:: base::BindOnce(&VirtualDeviceEnabledDeviceFactory::
OnVirtualDeviceProducerConnectionErrorOrClose, OnVirtualDeviceProducerConnectionErrorOrClose,
base::Unretained(this), device_id)); base::Unretained(this), device_id));
...@@ -147,7 +149,7 @@ void VirtualDeviceEnabledDeviceFactory::AddSharedMemoryVirtualDevice( ...@@ -147,7 +149,7 @@ void VirtualDeviceEnabledDeviceFactory::AddSharedMemoryVirtualDevice(
send_buffer_handles_to_producer_as_raw_file_descriptors); send_buffer_handles_to_producer_as_raw_file_descriptors);
auto producer_binding = auto producer_binding =
std::make_unique<mojo::Binding<mojom::SharedMemoryVirtualDevice>>( std::make_unique<mojo::Binding<mojom::SharedMemoryVirtualDevice>>(
device.get(), std::move(virtual_device_request)); device.get(), std::move(virtual_device_receiver));
producer_binding->set_connection_error_handler( producer_binding->set_connection_error_handler(
base::BindOnce(&VirtualDeviceEnabledDeviceFactory:: base::BindOnce(&VirtualDeviceEnabledDeviceFactory::
OnVirtualDeviceProducerConnectionErrorOrClose, OnVirtualDeviceProducerConnectionErrorOrClose,
...@@ -161,7 +163,8 @@ void VirtualDeviceEnabledDeviceFactory::AddSharedMemoryVirtualDevice( ...@@ -161,7 +163,8 @@ void VirtualDeviceEnabledDeviceFactory::AddSharedMemoryVirtualDevice(
void VirtualDeviceEnabledDeviceFactory::AddTextureVirtualDevice( void VirtualDeviceEnabledDeviceFactory::AddTextureVirtualDevice(
const media::VideoCaptureDeviceInfo& device_info, const media::VideoCaptureDeviceInfo& device_info,
mojom::TextureVirtualDeviceRequest virtual_device_request) { mojo::PendingReceiver<mojom::TextureVirtualDevice>
virtual_device_receiver) {
auto device_id = device_info.descriptor.device_id; auto device_id = device_info.descriptor.device_id;
auto virtual_device_iter = virtual_devices_by_id_.find(device_id); auto virtual_device_iter = virtual_devices_by_id_.find(device_id);
if (virtual_device_iter != virtual_devices_by_id_.end()) { if (virtual_device_iter != virtual_devices_by_id_.end()) {
...@@ -173,7 +176,7 @@ void VirtualDeviceEnabledDeviceFactory::AddTextureVirtualDevice( ...@@ -173,7 +176,7 @@ void VirtualDeviceEnabledDeviceFactory::AddTextureVirtualDevice(
auto device = std::make_unique<TextureVirtualDeviceMojoAdapter>(); auto device = std::make_unique<TextureVirtualDeviceMojoAdapter>();
auto producer_binding = auto producer_binding =
std::make_unique<mojo::Binding<mojom::TextureVirtualDevice>>( std::make_unique<mojo::Binding<mojom::TextureVirtualDevice>>(
device.get(), std::move(virtual_device_request)); device.get(), std::move(virtual_device_receiver));
producer_binding->set_connection_error_handler( producer_binding->set_connection_error_handler(
base::BindOnce(&VirtualDeviceEnabledDeviceFactory:: base::BindOnce(&VirtualDeviceEnabledDeviceFactory::
OnVirtualDeviceProducerConnectionErrorOrClose, OnVirtualDeviceProducerConnectionErrorOrClose,
......
...@@ -9,6 +9,8 @@ ...@@ -9,6 +9,8 @@
#include <utility> #include <utility>
#include "mojo/public/cpp/bindings/binding.h" #include "mojo/public/cpp/bindings/binding.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "services/video_capture/device_factory.h" #include "services/video_capture/device_factory.h"
#include "services/video_capture/public/mojom/device.mojom.h" #include "services/video_capture/public/mojom/device.mojom.h"
#include "services/video_capture/public/mojom/devices_changed_observer.mojom.h" #include "services/video_capture/public/mojom/devices_changed_observer.mojom.h"
...@@ -30,12 +32,14 @@ class VirtualDeviceEnabledDeviceFactory : public DeviceFactory { ...@@ -30,12 +32,14 @@ class VirtualDeviceEnabledDeviceFactory : public DeviceFactory {
CreateDeviceCallback callback) override; CreateDeviceCallback callback) override;
void AddSharedMemoryVirtualDevice( void AddSharedMemoryVirtualDevice(
const media::VideoCaptureDeviceInfo& device_info, const media::VideoCaptureDeviceInfo& device_info,
mojom::ProducerPtr producer, mojo::PendingRemote<mojom::Producer> producer,
bool send_buffer_handles_to_producer_as_raw_file_descriptors, bool send_buffer_handles_to_producer_as_raw_file_descriptors,
mojom::SharedMemoryVirtualDeviceRequest virtual_device) override; mojo::PendingReceiver<mojom::SharedMemoryVirtualDevice>
virtual_device_receiver) override;
void AddTextureVirtualDevice( void AddTextureVirtualDevice(
const media::VideoCaptureDeviceInfo& device_info, const media::VideoCaptureDeviceInfo& device_info,
mojom::TextureVirtualDeviceRequest virtual_device) override; mojo::PendingReceiver<mojom::TextureVirtualDevice>
virtual_device_receiver) override;
void RegisterVirtualDevicesChangedObserver( void RegisterVirtualDevicesChangedObserver(
mojom::DevicesChangedObserverPtr observer, mojom::DevicesChangedObserverPtr observer,
bool raise_event_if_virtual_devices_already_present) override; bool raise_event_if_virtual_devices_already_present) override;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment