// 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. #include "services/video_capture/service_impl.h" #include "base/memory/ptr_util.h" #include "base/message_loop/message_loop.h" #include "media/capture/video/fake_video_capture_device_factory.h" #include "media/capture/video/video_capture_buffer_pool.h" #include "media/capture/video/video_capture_buffer_tracker.h" #include "media/capture/video/video_capture_jpeg_decoder.h" #include "services/service_manager/public/cpp/interface_registry.h" #include "services/video_capture/device_factory_media_to_mojo_adapter.h" namespace { // TODO(chfremer): Replace with an actual decoder factory. // https://crbug.com/584797 std::unique_ptr CreateJpegDecoder() { return nullptr; } } // anonymous namespace namespace video_capture { ServiceImpl::ServiceImpl() = default; ServiceImpl::~ServiceImpl() = default; bool ServiceImpl::OnConnect(const service_manager::ServiceInfo& remote_info, service_manager::InterfaceRegistry* registry) { registry->AddInterface(this); return true; } void ServiceImpl::Create(const service_manager::Identity& remote_identity, mojom::ServiceRequest request) { service_bindings_.AddBinding(this, std::move(request)); } void ServiceImpl::ConnectToDeviceFactory(mojom::DeviceFactoryRequest request) { LazyInitializeDeviceFactory(); factory_bindings_.AddBinding(device_factory_.get(), std::move(request)); } void ServiceImpl::ConnectToFakeDeviceFactory( mojom::DeviceFactoryRequest request) { LazyInitializeFakeDeviceFactory(); fake_factory_bindings_.AddBinding(fake_device_factory_.get(), std::move(request)); } void ServiceImpl::LazyInitializeDeviceFactory() { if (device_factory_) return; // Create the platform-specific device factory. // Task runner does not seem to actually be used. std::unique_ptr media_device_factory = media::VideoCaptureDeviceFactory::CreateFactory( base::MessageLoop::current()->task_runner()); device_factory_ = base::MakeUnique( std::move(media_device_factory), base::Bind(CreateJpegDecoder)); } void ServiceImpl::LazyInitializeFakeDeviceFactory() { if (fake_device_factory_) return; fake_device_factory_ = base::MakeUnique( base::MakeUnique(), base::Bind(&CreateJpegDecoder)); } } // namespace video_capture