blob: 4fec380f403a0fe042d6fb63e8423bf1c00ca9f8 [file] [log] [blame]
// Copyright 2019 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 "media/capture/video/chromeos/camera_app_device_bridge_impl.h"
#include <string>
#include "base/command_line.h"
#include "media/base/media_switches.h"
#include "media/capture/video/chromeos/public/cros_features.h"
#include "media/capture/video/chromeos/video_capture_device_chromeos_halv3.h"
namespace media {
CameraAppDeviceBridgeImpl::CameraAppDeviceBridgeImpl() {}
CameraAppDeviceBridgeImpl::~CameraAppDeviceBridgeImpl() = default;
void CameraAppDeviceBridgeImpl::SetIsSupported(bool is_supported) {
is_supported_ = is_supported;
}
void CameraAppDeviceBridgeImpl::BindReceiver(
mojo::PendingReceiver<cros::mojom::CameraAppDeviceBridge> receiver) {
receivers_.Add(this, std::move(receiver));
}
void CameraAppDeviceBridgeImpl::OnDeviceClosed(const std::string& device_id) {
auto it = camera_app_devices_.find(device_id);
if (it != camera_app_devices_.end()) {
camera_app_devices_.erase(it);
}
}
void CameraAppDeviceBridgeImpl::SetCameraInfoGetter(
CameraInfoGetter camera_info_getter) {
camera_info_getter_ = std::move(camera_info_getter);
}
void CameraAppDeviceBridgeImpl::UnsetCameraInfoGetter() {
camera_info_getter_ = {};
}
CameraAppDeviceImpl* CameraAppDeviceBridgeImpl::GetCameraAppDevice(
const std::string& device_id) {
auto it = camera_app_devices_.find(device_id);
if (it != camera_app_devices_.end()) {
return it->second.get();
}
return CreateCameraAppDevice(device_id);
}
void CameraAppDeviceBridgeImpl::GetCameraAppDevice(
const std::string& device_id,
GetCameraAppDeviceCallback callback) {
DCHECK(is_supported_);
mojo::PendingRemote<cros::mojom::CameraAppDevice> device;
GetCameraAppDevice(device_id)->BindReceiver(
device.InitWithNewPipeAndPassReceiver());
std::move(callback).Run(cros::mojom::GetCameraAppDeviceStatus::SUCCESS,
std::move(device));
}
media::CameraAppDeviceImpl* CameraAppDeviceBridgeImpl::CreateCameraAppDevice(
const std::string& device_id) {
DCHECK(camera_info_getter_);
auto device_info = camera_info_getter_.Run(device_id);
auto device_impl = std::make_unique<media::CameraAppDeviceImpl>(
device_id, std::move(device_info),
base::BindOnce(&CameraAppDeviceBridgeImpl::OnDeviceClosed,
base::Unretained(this), device_id));
auto result = camera_app_devices_.emplace(device_id, std::move(device_impl));
return result.first->second.get();
}
void CameraAppDeviceBridgeImpl::IsSupported(IsSupportedCallback callback) {
std::move(callback).Run(is_supported_);
}
} // namespace media