camera: Use token to replace mojo channel manager instance
We want to hide the detail of the camera mojo channel manager and camera
hal also doesn't need it. Use a token to decouple it.
BUG=b:173033342
TEST=emerge
cros-camera
cros-camera-hal-usb
cros-camera-libcab
cros-camera-libcab_test
cros-camera-libcamera_common
cros-camera-libcamera_ipc
cros-camera-libjda
cros-camera-libjea_test
cros-camera-test
Check preview/take picture/recording on CCA on kukui.
Pass "*Camera3FrameTest/Camera3SingleFrameTest*" on kukui.
Cq-Depend: chromium:2546353
Cq-Depend: chromium:2550966
Cq-Depend: chromium:2550967
Cq-Depend: chromium:2550968
Cq-Depend: chromium:2550969
Change-Id: I3ea2d1af5aeeee498eff10a179be3f09e09f1e7b
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform2/+/2546676
Tested-by: Hsu Wei-Cheng <mojahsu@chromium.org>
Commit-Queue: Hsu Wei-Cheng <mojahsu@chromium.org>
Reviewed-by: Wei Lee <wtlee@chromium.org>
diff --git a/camera/camera3_test/camera3_module_test.cc b/camera/camera3_test/camera3_module_test.cc
index bd3441c..31da918 100644
--- a/camera/camera3_test/camera3_module_test.cc
+++ b/camera/camera3_test/camera3_module_test.cc
@@ -26,7 +26,7 @@
#include "camera3_test/camera3_perf_log.h"
#include "camera3_test/camera3_test_data_forwarder.h"
#include "common/utils/camera_hal_enumerator.h"
-#include "cros-camera/camera_mojo_channel_manager.h"
+#include "cros-camera/camera_mojo_channel_manager_token.h"
#include "cros-camera/cros_camera_hal.h"
namespace camera3_test {
@@ -294,7 +294,7 @@
// On successfully Initialized, |cam_module_| will pointed to valid
// camera_module_t.
static void InitCameraModule(const base::FilePath& camera_hal_path,
- cros::CameraMojoChannelManager* mojo_manager,
+ cros::CameraMojoChannelManagerToken* token,
void** cam_hal_handle,
camera_module_t** cam_module,
cros::cros_camera_hal_t** cros_camera_hal) {
@@ -307,7 +307,7 @@
// TODO(b/151270948): We should report error here if it fails to find the
// symbol once all camera HALs have implemented the interface.
if (*cros_camera_hal != nullptr) {
- (*cros_camera_hal)->set_up(mojo_manager);
+ (*cros_camera_hal)->set_up(token);
}
camera_module_t* module = static_cast<camera_module_t*>(
@@ -329,19 +329,18 @@
static void InitCameraModuleByHalPath(
const base::FilePath& camera_hal_path,
- cros::CameraMojoChannelManager* mojo_manager,
+ cros::CameraMojoChannelManagerToken* token,
void** cam_hal_handle,
cros::cros_camera_hal_t** cros_camera_hal) {
- InitCameraModule(camera_hal_path, mojo_manager, cam_hal_handle, &g_cam_module,
+ InitCameraModule(camera_hal_path, token, cam_hal_handle, &g_cam_module,
cros_camera_hal);
}
-static void InitCameraModuleByFacing(
- int facing,
- cros::CameraMojoChannelManager* mojo_manager,
- void** cam_hal_handle,
- cros::cros_camera_hal_t** cros_camera_hal,
- base::FilePath* camera_hal_path) {
+static void InitCameraModuleByFacing(int facing,
+ cros::CameraMojoChannelManagerToken* token,
+ void** cam_hal_handle,
+ cros::cros_camera_hal_t** cros_camera_hal,
+ base::FilePath* camera_hal_path) {
// Do cleanup when exit from ASSERT_XX
struct CleanupModule {
void operator()(void** cam_hal_handle) {
@@ -355,7 +354,7 @@
}
};
for (const auto& hal_path : cros::GetCameraHalPaths()) {
- InitCameraModule(hal_path, mojo_manager, cam_hal_handle, &g_cam_module,
+ InitCameraModule(hal_path, token, cam_hal_handle, &g_cam_module,
cros_camera_hal);
std::unique_ptr<void*, CleanupModule> cleanup_ptr(cam_hal_handle);
if (g_cam_module != NULL) {
@@ -1330,7 +1329,7 @@
bool InitializeTest(int* argc,
char*** argv,
- cros::CameraMojoChannelManager* mojo_manager,
+ cros::CameraMojoChannelManagerToken* token,
void** cam_hal_handle,
cros::cros_camera_hal_t** cros_camera_hal) {
// Set up logging so we can enable VLOGs with -v / --vmodule.
@@ -1375,11 +1374,11 @@
// Open camera HAL and get module
if (facing != -ENOENT) {
camera3_test::GetModuleThread().Start();
- camera3_test::InitCameraModuleByFacing(facing, mojo_manager, cam_hal_handle,
+ camera3_test::InitCameraModuleByFacing(facing, token, cam_hal_handle,
cros_camera_hal, &camera_hal_path);
} else if (!camera_hal_path.empty()) {
camera3_test::GetModuleThread().Start();
- camera3_test::InitCameraModuleByHalPath(camera_hal_path, mojo_manager,
+ camera3_test::InitCameraModuleByHalPath(camera_hal_path, token,
cam_hal_handle, cros_camera_hal);
} else {
if (camera3_test::CameraHalClient::GetInstance()->Start(
@@ -1418,10 +1417,10 @@
extern "C" int LLVMFuzzerInitialize(int* argc, char*** argv) {
void* cam_hal_handle = NULL;
- std::unique_ptr<cros::CameraMojoChannelManager> mojo_manager =
- cros::CameraMojoChannelManager::CreateInstance();
+ std::unique_ptr<cros::CameraMojoChannelManagerToken> mojo_manager_token(
+ cros::CameraMojoChannelManagerToken::CreateInstance());
cros::cros_camera_hal_t* cros_camera_hal;
- if (!InitializeTest(argc, argv, mojo_manager.get(), &cam_hal_handle,
+ if (!InitializeTest(argc, argv, mojo_manager_token.get(), &cam_hal_handle,
&cros_camera_hal)) {
exit(EXIT_FAILURE);
}
@@ -1450,9 +1449,9 @@
message_loop.SetAsCurrent();
cros::cros_camera_hal_t* cros_camera_hal = nullptr;
- std::unique_ptr<cros::CameraMojoChannelManager> mojo_manager =
- cros::CameraMojoChannelManager::CreateInstance();
- if (InitializeTest(&argc, &argv, mojo_manager.get(), &cam_hal_handle,
+ std::unique_ptr<cros::CameraMojoChannelManagerToken> mojo_manager_token(
+ cros::CameraMojoChannelManagerToken::CreateInstance());
+ if (InitializeTest(&argc, &argv, mojo_manager_token.get(), &cam_hal_handle,
&cros_camera_hal)) {
result = RUN_ALL_TESTS();
}
@@ -1464,7 +1463,7 @@
if (cros_camera_hal != nullptr) {
cros_camera_hal->tear_down();
}
- mojo_manager.reset();
+ mojo_manager_token.reset();
// Close Camera HAL
if (cam_hal_handle && dlclose(cam_hal_handle) != 0) {
diff --git a/camera/common/camera_algorithm_bridge_impl.cc b/camera/common/camera_algorithm_bridge_impl.cc
index 8668520..95f215b 100644
--- a/camera/common/camera_algorithm_bridge_impl.cc
+++ b/camera/common/camera_algorithm_bridge_impl.cc
@@ -37,9 +37,10 @@
// static
std::unique_ptr<CameraAlgorithmBridge> CameraAlgorithmBridge::CreateInstance(
- CameraAlgorithmBackend backend, CameraMojoChannelManager* mojo_manager) {
+ CameraAlgorithmBackend backend, CameraMojoChannelManagerToken* token) {
VLOGF_ENTER();
- return std::make_unique<CameraAlgorithmBridgeImpl>(backend, mojo_manager);
+ return std::make_unique<CameraAlgorithmBridgeImpl>(
+ backend, CameraMojoChannelManager::FromToken(token));
}
CameraAlgorithmBridgeImpl::CameraAlgorithmBridgeImpl(
diff --git a/camera/common/camera_mojo_channel_manager_impl.cc b/camera/common/camera_mojo_channel_manager_impl.cc
index 42c9839..04f0fc8 100644
--- a/camera/common/camera_mojo_channel_manager_impl.cc
+++ b/camera/common/camera_mojo_channel_manager_impl.cc
@@ -106,10 +106,8 @@
}
// static
-std::unique_ptr<CameraMojoChannelManager>
-CameraMojoChannelManager::CreateInstance() {
- return base::WrapUnique<CameraMojoChannelManager>(
- new CameraMojoChannelManagerImpl());
+CameraMojoChannelManagerToken* CameraMojoChannelManagerToken::CreateInstance() {
+ return new CameraMojoChannelManagerImpl();
}
// static
diff --git a/camera/common/jpeg/jpeg_decode_accelerator_impl.cc b/camera/common/jpeg/jpeg_decode_accelerator_impl.cc
index c636f74..727ee6e 100644
--- a/camera/common/jpeg/jpeg_decode_accelerator_impl.cc
+++ b/camera/common/jpeg/jpeg_decode_accelerator_impl.cc
@@ -69,9 +69,9 @@
// static
std::unique_ptr<JpegDecodeAccelerator> JpegDecodeAccelerator::CreateInstance(
- CameraMojoChannelManager* mojo_manager) {
- return base::WrapUnique<JpegDecodeAccelerator>(
- new JpegDecodeAcceleratorImpl(mojo_manager));
+ CameraMojoChannelManagerToken* token) {
+ return base::WrapUnique<JpegDecodeAccelerator>(new JpegDecodeAcceleratorImpl(
+ CameraMojoChannelManager::FromToken(token)));
}
JpegDecodeAcceleratorImpl::JpegDecodeAcceleratorImpl(
diff --git a/camera/common/jpeg/jpeg_decode_accelerator_test.cc b/camera/common/jpeg/jpeg_decode_accelerator_test.cc
index ab768af..f77851c 100644
--- a/camera/common/jpeg/jpeg_decode_accelerator_test.cc
+++ b/camera/common/jpeg/jpeg_decode_accelerator_test.cc
@@ -106,21 +106,21 @@
class JpegDecodeTestEnvironment : public ::testing::Environment {
public:
JpegDecodeTestEnvironment(const char* jpeg_filename1,
- const char* jpeg_filename2) {
+ const char* jpeg_filename2)
+ : mojo_manager_token_(CameraMojoChannelManagerToken::CreateInstance()) {
jpeg_filename1_ = jpeg_filename1 ? jpeg_filename1 : kDefaultJpegFilename1;
jpeg_filename2_ = jpeg_filename2 ? jpeg_filename2 : kDefaultJpegFilename2;
- mojo_manager_ = CameraMojoChannelManager::CreateInstance();
}
const char* jpeg_filename1_;
const char* jpeg_filename2_;
- std::unique_ptr<CameraMojoChannelManager> mojo_manager_;
+ std::unique_ptr<CameraMojoChannelManagerToken> mojo_manager_token_;
};
void JpegDecodeAcceleratorTest::SetUp() {
for (size_t i = 0; i < kMaxDecoderNumber; i++) {
- jpeg_decoder_[i] =
- std::make_unique<JpegDecodeAcceleratorImpl>(g_env->mojo_manager_.get());
+ jpeg_decoder_[i] = std::make_unique<JpegDecodeAcceleratorImpl>(
+ g_env->mojo_manager_token_.get());
}
}
@@ -188,8 +188,8 @@
output_size > frame->sw_out_shm_mapping.mapped_size()) {
frame->sw_out_shm_region =
base::WritableSharedMemoryRegion::Create(output_size);
- frame->sw_out_shm_mapping = frame->ww_out_shm_region.Map();
- LOG_ASSERT(frame->ww_out_shm_mapping.IsValid());
+ frame->sw_out_shm_mapping = frame->sw_out_shm_region.Map();
+ LOG_ASSERT(frame->sw_out_shm_mapping.IsValid());
}
memset(frame->sw_out_shm_mapping.memory(), 0, output_size);
}
@@ -230,8 +230,8 @@
memset(frame->hw_out_shm_mapping.memory(), 0,
frame->hw_out_shm_mapping.mapped_size());
- input_fd = in_platform_shm.GetPlatformHandle().fd;
- output_fd = hw_out_platform_shm.GetPlatformHandle().fd;
+ input_fd = frame->in_shm_region.GetPlatformHandle().fd;
+ output_fd = frame->hw_out_shm_region.GetPlatformHandle().fd;
VLOG(1) << "input fd " << input_fd << " output fd " << output_fd;
// Pretend the shared memory as DMA buffer.
diff --git a/camera/common/jpeg/jpeg_encode_accelerator_impl.cc b/camera/common/jpeg/jpeg_encode_accelerator_impl.cc
index 1cb3c01..780378a 100644
--- a/camera/common/jpeg/jpeg_encode_accelerator_impl.cc
+++ b/camera/common/jpeg/jpeg_encode_accelerator_impl.cc
@@ -43,9 +43,9 @@
// static
std::unique_ptr<JpegEncodeAccelerator> JpegEncodeAccelerator::CreateInstance(
- CameraMojoChannelManager* mojo_manager) {
- return base::WrapUnique<JpegEncodeAccelerator>(
- new JpegEncodeAcceleratorImpl(mojo_manager));
+ CameraMojoChannelManagerToken* token) {
+ return base::WrapUnique<JpegEncodeAccelerator>(new JpegEncodeAcceleratorImpl(
+ CameraMojoChannelManager::FromToken(token)));
}
JpegEncodeAcceleratorImpl::JpegEncodeAcceleratorImpl(
diff --git a/camera/common/jpeg/jpeg_encode_accelerator_test.cc b/camera/common/jpeg/jpeg_encode_accelerator_test.cc
index 7b233c3..8c3ddcb 100644
--- a/camera/common/jpeg/jpeg_encode_accelerator_test.cc
+++ b/camera/common/jpeg/jpeg_encode_accelerator_test.cc
@@ -19,6 +19,7 @@
#include <libyuv.h>
#include "cros-camera/camera_buffer_manager.h"
+#include "cros-camera/camera_mojo_channel_manager_token.h"
#include "cros-camera/exif_utils.h"
#include "cros-camera/future.h"
#include "cros-camera/jpeg_compressor.h"
@@ -119,22 +120,22 @@
public:
JpegEncodeTestEnvironment(const char* yuv_filename1,
const char* yuv_filename2,
- bool save_to_file) {
+ bool save_to_file)
+ : mojo_manager_token_(CameraMojoChannelManagerToken::CreateInstance()) {
yuv_filename1_ = yuv_filename1 ? yuv_filename1 : kDefaultJpegFilename1;
yuv_filename2_ = yuv_filename2 ? yuv_filename2 : kDefaultJpegFilename2;
save_to_file_ = save_to_file;
- mojo_manager_ = CameraMojoChannelManager::CreateInstance();
}
const char* yuv_filename1_;
const char* yuv_filename2_;
bool save_to_file_;
- std::unique_ptr<CameraMojoChannelManager> mojo_manager_;
+ std::unique_ptr<CameraMojoChannelManagerToken> mojo_manager_token_;
};
void JpegEncodeAcceleratorTest::SetUp() {
jpeg_encoder_ =
- JpegEncodeAccelerator::CreateInstance(g_env->mojo_manager_.get());
+ JpegEncodeAccelerator::CreateInstance(g_env->mojo_manager_token_.get());
buffer_manager_ = CameraBufferManager::GetInstance();
}
@@ -251,7 +252,7 @@
bool JpegEncodeAcceleratorTest::GetSoftwareEncodeResult(Frame* frame) {
std::unique_ptr<JpegCompressor> compressor(
- JpegCompressor::GetInstance(g_env->mojo_manager_.get()));
+ JpegCompressor::GetInstance(g_env->mojo_manager_token_.get()));
if (!compressor->CompressImage(frame->data_str.data(), frame->width,
frame->height, kJpegDefaultQuality, nullptr, 0,
frame->sw_out_shm_mapping.mapped_size(),
diff --git a/camera/common/jpeg_compressor_impl.cc b/camera/common/jpeg_compressor_impl.cc
index 96c70af..1fb5aa9 100644
--- a/camera/common/jpeg_compressor_impl.cc
+++ b/camera/common/jpeg_compressor_impl.cc
@@ -18,6 +18,7 @@
#include <base/memory/writable_shared_memory_region.h>
#include <base/timer/elapsed_timer.h>
#include "cros-camera/camera_buffer_manager.h"
+#include "cros-camera/camera_mojo_channel_manager.h"
#include "cros-camera/common.h"
#include "cros-camera/jpeg_encode_accelerator.h"
@@ -42,11 +43,11 @@
// static
std::unique_ptr<JpegCompressor> JpegCompressor::GetInstance(
- CameraMojoChannelManager* mojo_manager) {
- return std::make_unique<JpegCompressorImpl>(mojo_manager);
+ CameraMojoChannelManagerToken* token) {
+ return std::make_unique<JpegCompressorImpl>(token);
}
-JpegCompressorImpl::JpegCompressorImpl(CameraMojoChannelManager* mojo_manager)
+JpegCompressorImpl::JpegCompressorImpl(CameraMojoChannelManagerToken* token)
: camera_metrics_(CameraMetrics::New()),
hw_encoder_(nullptr),
hw_encoder_started_(false),
@@ -54,7 +55,7 @@
out_buffer_size_(0),
out_data_size_(0),
is_encode_success_(false),
- mojo_manager_(mojo_manager) {}
+ mojo_manager_token_(token) {}
JpegCompressorImpl::~JpegCompressorImpl() {}
@@ -349,7 +350,8 @@
uint32_t* out_data_size) {
base::ElapsedTimer timer;
if (!hw_encoder_) {
- hw_encoder_ = cros::JpegEncodeAccelerator::CreateInstance(mojo_manager_);
+ hw_encoder_ =
+ cros::JpegEncodeAccelerator::CreateInstance(mojo_manager_token_);
hw_encoder_started_ = hw_encoder_->Start();
}
@@ -523,7 +525,8 @@
}
if (!hw_encoder_) {
- hw_encoder_ = cros::JpegEncodeAccelerator::CreateInstance(mojo_manager_);
+ hw_encoder_ =
+ cros::JpegEncodeAccelerator::CreateInstance(mojo_manager_token_);
hw_encoder_started_ = hw_encoder_->Start();
}
diff --git a/camera/common/jpeg_compressor_impl.h b/camera/common/jpeg_compressor_impl.h
index a9e3fb0..c16da85 100644
--- a/camera/common/jpeg_compressor_impl.h
+++ b/camera/common/jpeg_compressor_impl.h
@@ -31,7 +31,7 @@
// Implementation of JpegCompressor. This class is not thread-safe.
class JpegCompressorImpl : public JpegCompressor {
public:
- explicit JpegCompressorImpl(CameraMojoChannelManager* mojo_manager);
+ explicit JpegCompressorImpl(CameraMojoChannelManagerToken* token);
~JpegCompressorImpl() override;
// To be deprecated.
@@ -160,8 +160,8 @@
// buffer is enough to encode or not.
bool is_encode_success_;
- // Mojo manager which is used for Mojo communication.
- CameraMojoChannelManager* mojo_manager_;
+ // Mojo manager token which is used for Mojo communication.
+ CameraMojoChannelManagerToken* mojo_manager_token_;
};
} // namespace cros
diff --git a/camera/common/libcab_test_main.cc b/camera/common/libcab_test_main.cc
index 7c31a57..674d028 100644
--- a/camera/common/libcab_test_main.cc
+++ b/camera/common/libcab_test_main.cc
@@ -26,12 +26,14 @@
public:
const size_t kShmBufferSize = 2048;
- CameraAlgorithmBridgeFixture() : req_id_(0) {
- mojo_manager_ = cros::CameraMojoChannelManager::CreateInstance();
+ CameraAlgorithmBridgeFixture()
+ : mojo_manager_token_(
+ cros::CameraMojoChannelManagerToken::CreateInstance()),
+ req_id_(0) {
CameraAlgorithmBridgeFixture::return_callback =
CameraAlgorithmBridgeFixture::ReturnCallbackForwarder;
bridge_ = cros::CameraAlgorithmBridge::CreateInstance(
- cros::CameraAlgorithmBackend::kTest, mojo_manager_.get());
+ cros::CameraAlgorithmBackend::kTest, mojo_manager_token_.get());
if (!bridge_ || bridge_->Initialize(this) != 0) {
ADD_FAILURE() << "Failed to initialize camera algorithm bridge";
return;
@@ -53,8 +55,8 @@
bridge_->Request(req_id_++, req_header, buffer_handle);
}
- cros::CameraMojoChannelManager* GetMojoManagerInstance() {
- return mojo_manager_.get();
+ cros::CameraMojoChannelManagerToken* GetMojoManagerTokenInstance() {
+ return mojo_manager_token_.get();
}
protected:
@@ -87,7 +89,7 @@
// |mojo_manager_| should only be destroyed after any usage of it. So it
// should be declared first.
- std::unique_ptr<cros::CameraMojoChannelManager> mojo_manager_;
+ std::unique_ptr<cros::CameraMojoChannelManagerToken> mojo_manager_token_;
std::unique_ptr<cros::CameraAlgorithmBridge> bridge_;
@@ -210,7 +212,7 @@
ASSERT_NE(0, sem_timedwait(&return_sem_, &timeout));
// Reconnect the bridge.
bridge_ = cros::CameraAlgorithmBridge::CreateInstance(
- cros::CameraAlgorithmBackend::kTest, GetMojoManagerInstance());
+ cros::CameraAlgorithmBackend::kTest, GetMojoManagerTokenInstance());
ASSERT_NE(nullptr, bridge_);
ASSERT_EQ(0, bridge_->Initialize(this));
base::WritableSharedMemoryRegion shm_region =
diff --git a/camera/hal/usb/cached_frame.cc b/camera/hal/usb/cached_frame.cc
index 29c3b19..6e85b56 100644
--- a/camera/hal/usb/cached_frame.cc
+++ b/camera/hal/usb/cached_frame.cc
@@ -83,13 +83,13 @@
jda_available_(false),
force_jpeg_hw_encode_(false),
force_jpeg_hw_decode_(false) {
- auto* mojo_manager = CameraHal::GetInstance().GetMojoManagerInstance();
+ auto* mojo_manager_token = CameraHal::GetInstance().GetMojoManagerToken();
- jda_ = JpegDecodeAccelerator::CreateInstance(mojo_manager);
+ jda_ = JpegDecodeAccelerator::CreateInstance(mojo_manager_token);
jda_available_ = jda_->Start();
LOGF(INFO) << "JDA available: " << jda_available_;
- jpeg_compressor_ = JpegCompressor::GetInstance(mojo_manager);
+ jpeg_compressor_ = JpegCompressor::GetInstance(mojo_manager_token);
// Read force_jpeg_hw_(enc|dec) configs
std::unique_ptr<CameraConfig> camera_config =
diff --git a/camera/hal/usb/camera_hal.cc b/camera/hal/usb/camera_hal.cc
index df0116b..5357ed4 100644
--- a/camera/hal/usb/camera_hal.cc
+++ b/camera/hal/usb/camera_hal.cc
@@ -128,8 +128,8 @@
return camera_hal;
}
-CameraMojoChannelManager* CameraHal::GetMojoManagerInstance() {
- return mojo_manager_;
+CameraMojoChannelManagerToken* CameraHal::GetMojoManagerToken() {
+ return mojo_manager_token_;
}
int CameraHal::OpenDevice(int id,
@@ -303,12 +303,12 @@
return 0;
}
-void CameraHal::SetUp(CameraMojoChannelManager* mojo_manager) {
- mojo_manager_ = mojo_manager;
+void CameraHal::SetUp(CameraMojoChannelManagerToken* token) {
+ mojo_manager_token_ = token;
}
void CameraHal::TearDown() {
- mojo_manager_ = nullptr;
+ mojo_manager_token_ = nullptr;
}
void CameraHal::SetPrivacySwitchCallback(
@@ -584,8 +584,8 @@
return CameraHal::GetInstance().Init();
}
-static void set_up(CameraMojoChannelManager* mojo_manager) {
- CameraHal::GetInstance().SetUp(mojo_manager);
+static void set_up(CameraMojoChannelManagerToken* token) {
+ CameraHal::GetInstance().SetUp(token);
}
static void tear_down() {
diff --git a/camera/hal/usb/camera_hal.h b/camera/hal/usb/camera_hal.h
index 3ccf7ae..87d9d5f 100644
--- a/camera/hal/usb/camera_hal.h
+++ b/camera/hal/usb/camera_hal.h
@@ -17,7 +17,7 @@
#include <base/threading/thread_checker.h>
#include <hardware/camera_common.h>
-#include "cros-camera/camera_mojo_channel_manager.h"
+#include "cros-camera/camera_mojo_channel_manager_token.h"
#include "cros-camera/cros_camera_hal.h"
#include "cros-camera/future.h"
#include "cros-camera/udev_watcher.h"
@@ -44,7 +44,7 @@
static CameraHal& GetInstance();
- CameraMojoChannelManager* GetMojoManagerInstance();
+ CameraMojoChannelManagerToken* GetMojoManagerToken();
// Implementations for camera_module_t.
int OpenDevice(int id, const hw_module_t* module, hw_device_t** hw_device);
@@ -54,7 +54,7 @@
int Init();
// Implementations for cros_camera_hal_t.
- void SetUp(CameraMojoChannelManager* mojo_manager);
+ void SetUp(CameraMojoChannelManagerToken* token);
void TearDown();
void SetPrivacySwitchCallback(PrivacySwitchStateChangeCallback callback);
@@ -121,8 +121,8 @@
// integer here, and use the smallest free id when the camera is reconnected.
std::map<std::string, std::set<int>> previous_ids_;
- // Mojo manager which is used for Mojo communication.
- CameraMojoChannelManager* mojo_manager_;
+ // Mojo manager token which is used for Mojo communication.
+ CameraMojoChannelManagerToken* mojo_manager_token_;
};
// Callback for camera_device.common.close().
diff --git a/camera/hal_adapter/camera_hal_adapter.cc b/camera/hal_adapter/camera_hal_adapter.cc
index 5168724..b04be15 100644
--- a/camera/hal_adapter/camera_hal_adapter.cc
+++ b/camera/hal_adapter/camera_hal_adapter.cc
@@ -43,7 +43,7 @@
} // namespace
CameraHalAdapter::CameraHalAdapter(std::vector<camera_module_t*> camera_modules,
- CameraMojoChannelManager* mojo_manager,
+ CameraMojoChannelManagerToken* token,
CameraActivityCallback activity_callback)
: camera_modules_(camera_modules),
camera_module_thread_("CameraModuleThread"),
@@ -52,7 +52,7 @@
callbacks_id_(0),
vendor_tag_ops_id_(0),
camera_metrics_(CameraMetrics::New()),
- mojo_manager_(mojo_manager),
+ mojo_manager_token_(token),
activity_callback_(activity_callback) {
VLOGF_ENTER();
}
@@ -479,7 +479,7 @@
VLOGF_ENTER();
DCHECK(camera_module_thread_.task_runner()->BelongsToCurrentThread());
- if (reprocess_effect_manager_.Initialize(mojo_manager_) != 0) {
+ if (reprocess_effect_manager_.Initialize(mojo_manager_token_) != 0) {
LOGF(ERROR) << "Failed to initialize reprocess effect manager";
callback.Run(false);
return;
diff --git a/camera/hal_adapter/camera_hal_adapter.h b/camera/hal_adapter/camera_hal_adapter.h
index c476288..264bc52 100644
--- a/camera/hal_adapter/camera_hal_adapter.h
+++ b/camera/hal_adapter/camera_hal_adapter.h
@@ -23,7 +23,7 @@
#include "common/utils/common_types.h"
#include "common/vendor_tag_manager.h"
#include "cros-camera/camera_metrics.h"
-#include "cros-camera/camera_mojo_channel_manager.h"
+#include "cros-camera/camera_mojo_channel_manager_token.h"
#include "cros-camera/future.h"
#include "hal_adapter/reprocess_effect/reprocess_effect_manager.h"
#include "mojo/camera3.mojom.h"
@@ -54,7 +54,7 @@
int32_t, bool, cros::mojom::CameraClientType)>;
CameraHalAdapter(std::vector<camera_module_t*> camera_modules,
- CameraMojoChannelManager* mojo_manager,
+ CameraMojoChannelManagerToken* token,
CameraActivityCallback activity_callback);
virtual ~CameraHalAdapter();
@@ -247,8 +247,8 @@
// Metrics for camera service.
std::unique_ptr<CameraMetrics> camera_metrics_;
- // Mojo manager which is used for Mojo communication.
- CameraMojoChannelManager* mojo_manager_;
+ // Mojo manager token which is used for Mojo communication.
+ CameraMojoChannelManagerToken* mojo_manager_token_;
CameraActivityCallback activity_callback_;
diff --git a/camera/hal_adapter/camera_hal_server_impl.cc b/camera/hal_adapter/camera_hal_server_impl.cc
index 63f39a2..770d680 100644
--- a/camera/hal_adapter/camera_hal_server_impl.cc
+++ b/camera/hal_adapter/camera_hal_server_impl.cc
@@ -42,7 +42,8 @@
namespace cros {
CameraHalServerImpl::CameraHalServerImpl()
- : mojo_manager_(CameraMojoChannelManager::CreateInstance()),
+ : mojo_manager_(CameraMojoChannelManager::FromToken(
+ CameraMojoChannelManagerToken::CreateInstance())),
ipc_bridge_(new IPCBridge(this, mojo_manager_.get())) {
VLOGF_ENTER();
}
diff --git a/camera/hal_adapter/camera_hal_test_adapter.cc b/camera/hal_adapter/camera_hal_test_adapter.cc
index 7554e3e..abf075d 100644
--- a/camera/hal_adapter/camera_hal_test_adapter.cc
+++ b/camera/hal_adapter/camera_hal_test_adapter.cc
@@ -14,12 +14,12 @@
CameraHalTestAdapter::CameraHalTestAdapter(
std::vector<camera_module_t*> camera_modules,
- CameraMojoChannelManager* mojo_manager,
+ CameraMojoChannelManagerToken* token,
CameraActivityCallback activity_callback,
bool enable_front,
bool enable_back,
bool enable_external)
- : CameraHalAdapter(camera_modules, mojo_manager, activity_callback),
+ : CameraHalAdapter(camera_modules, token, activity_callback),
enable_front_(enable_front),
enable_back_(enable_back),
enable_external_(enable_external) {
diff --git a/camera/hal_adapter/camera_hal_test_adapter.h b/camera/hal_adapter/camera_hal_test_adapter.h
index 35a63c2..75d7327 100644
--- a/camera/hal_adapter/camera_hal_test_adapter.h
+++ b/camera/hal_adapter/camera_hal_test_adapter.h
@@ -21,7 +21,7 @@
class CameraHalTestAdapter : public CameraHalAdapter {
public:
CameraHalTestAdapter(std::vector<camera_module_t*> camera_modules,
- CameraMojoChannelManager* mojo_manager,
+ CameraMojoChannelManagerToken* token,
CameraActivityCallback activity_callback,
bool enable_front,
bool enable_back,
diff --git a/camera/hal_adapter/reprocess_effect/gpu_algo_manager.cc b/camera/hal_adapter/reprocess_effect/gpu_algo_manager.cc
index 1479b85..48737a6 100644
--- a/camera/hal_adapter/reprocess_effect/gpu_algo_manager.cc
+++ b/camera/hal_adapter/reprocess_effect/gpu_algo_manager.cc
@@ -16,19 +16,19 @@
// static
GPUAlgoManager* GPUAlgoManager::GetInstance(
- CameraMojoChannelManager* mojo_manager) {
- static GPUAlgoManager* m = new GPUAlgoManager(mojo_manager);
+ CameraMojoChannelManagerToken* token) {
+ static GPUAlgoManager* m = new GPUAlgoManager(token);
if (!m->bridge_) {
return nullptr;
}
return m;
}
-GPUAlgoManager::GPUAlgoManager(CameraMojoChannelManager* mojo_manager)
+GPUAlgoManager::GPUAlgoManager(CameraMojoChannelManagerToken* token)
: camera_algorithm_callback_ops_t{}, req_id_(0) {
return_callback = GPUAlgoManager::ReturnCallbackForwarder;
bridge_ = cros::CameraAlgorithmBridge::CreateInstance(
- cros::CameraAlgorithmBackend::kGoogleGpu, mojo_manager);
+ cros::CameraAlgorithmBackend::kGoogleGpu, token);
if (!bridge_ || bridge_->Initialize(this) != 0) {
LOGF(WARNING) << "Failed to initialize camera GPU algorithm bridge";
bridge_ = nullptr;
diff --git a/camera/hal_adapter/reprocess_effect/gpu_algo_manager.h b/camera/hal_adapter/reprocess_effect/gpu_algo_manager.h
index 3daed44..5308655 100644
--- a/camera/hal_adapter/reprocess_effect/gpu_algo_manager.h
+++ b/camera/hal_adapter/reprocess_effect/gpu_algo_manager.h
@@ -15,13 +15,13 @@
#include <base/synchronization/lock.h>
#include "cros-camera/camera_algorithm_bridge.h"
-#include "cros-camera/camera_mojo_channel_manager.h"
+#include "cros-camera/camera_mojo_channel_manager_token.h"
namespace cros {
class GPUAlgoManager final : public camera_algorithm_callback_ops_t {
public:
- static GPUAlgoManager* GetInstance(CameraMojoChannelManager* mojo_manager);
+ static GPUAlgoManager* GetInstance(CameraMojoChannelManagerToken* token);
int32_t RegisterBuffer(int buffer_fd);
@@ -32,7 +32,7 @@
void DeregisterBuffers(const std::vector<int32_t>& buffer_handles);
private:
- explicit GPUAlgoManager(CameraMojoChannelManager* mojo_manager);
+ explicit GPUAlgoManager(CameraMojoChannelManagerToken* token);
GPUAlgoManager(const GPUAlgoManager&) = delete;
GPUAlgoManager& operator=(const GPUAlgoManager&) = delete;
diff --git a/camera/hal_adapter/reprocess_effect/portrait_mode_effect.cc b/camera/hal_adapter/reprocess_effect/portrait_mode_effect.cc
index d5fbf87..3fa8a82 100644
--- a/camera/hal_adapter/reprocess_effect/portrait_mode_effect.cc
+++ b/camera/hal_adapter/reprocess_effect/portrait_mode_effect.cc
@@ -58,13 +58,13 @@
int32_t PortraitModeEffect::InitializeAndGetVendorTags(
std::vector<VendorTagInfo>* request_vendor_tags,
std::vector<VendorTagInfo>* result_vendor_tags,
- CameraMojoChannelManager* mojo_manager) {
+ CameraMojoChannelManagerToken* token) {
VLOGF_ENTER();
if (!request_vendor_tags || !result_vendor_tags) {
return -EINVAL;
}
- gpu_algo_manager_ = GPUAlgoManager::GetInstance(mojo_manager);
+ gpu_algo_manager_ = GPUAlgoManager::GetInstance(token);
if (!gpu_algo_manager_) {
LOGF(WARNING)
<< "Cannot connect to GPU algorithm service. Disable portrait mode.";
diff --git a/camera/hal_adapter/reprocess_effect/portrait_mode_effect.h b/camera/hal_adapter/reprocess_effect/portrait_mode_effect.h
index 56d94cb..19c7387 100644
--- a/camera/hal_adapter/reprocess_effect/portrait_mode_effect.h
+++ b/camera/hal_adapter/reprocess_effect/portrait_mode_effect.h
@@ -36,7 +36,7 @@
int32_t InitializeAndGetVendorTags(
std::vector<VendorTagInfo>* request_vendor_tags,
std::vector<VendorTagInfo>* result_vendor_tags,
- CameraMojoChannelManager* mojo_manager);
+ CameraMojoChannelManagerToken* token);
int32_t SetVendorTags(uint32_t request_vendor_tag_start,
uint32_t request_vendor_tag_count,
diff --git a/camera/hal_adapter/reprocess_effect/reprocess_effect.h b/camera/hal_adapter/reprocess_effect/reprocess_effect.h
index f9baab0..1f65731 100644
--- a/camera/hal_adapter/reprocess_effect/reprocess_effect.h
+++ b/camera/hal_adapter/reprocess_effect/reprocess_effect.h
@@ -16,7 +16,7 @@
#include <hardware/gralloc.h>
#include <system/camera_metadata.h>
-#include "cros-camera/camera_mojo_channel_manager.h"
+#include "cros-camera/camera_mojo_channel_manager_token.h"
#include "hal_adapter/scoped_yuv_buffer_handle.h"
struct VendorTagInfo {
@@ -41,13 +41,13 @@
// Args:
// |request_vendor_tags|: names and types of request vendor tags
// |result_vendor_tags|: names and types of result vendor tags
- // |mojo_manager|: the mojo manager instance
+ // |token|: the mojo manager token
// Returns:
// 0 on success; corresponding error code on failure.
virtual int32_t InitializeAndGetVendorTags(
std::vector<VendorTagInfo>* request_vendor_tags,
std::vector<VendorTagInfo>* result_vendor_tags,
- CameraMojoChannelManager* mojo_manager) = 0;
+ CameraMojoChannelManagerToken* token) = 0;
// Sets the vendor tags that are allocated for the reprocessing effects.
// Args:
diff --git a/camera/hal_adapter/reprocess_effect/reprocess_effect_manager.cc b/camera/hal_adapter/reprocess_effect/reprocess_effect_manager.cc
index 9ff77e1..0b4bed6 100644
--- a/camera/hal_adapter/reprocess_effect/reprocess_effect_manager.cc
+++ b/camera/hal_adapter/reprocess_effect/reprocess_effect_manager.cc
@@ -26,13 +26,13 @@
buffer_manager_(CameraBufferManager::GetInstance()) {}
int32_t ReprocessEffectManager::Initialize(
- CameraMojoChannelManager* mojo_manager) {
+ CameraMojoChannelManagerToken* token) {
VLOGF_ENTER();
portrait_mode_ = std::make_unique<PortraitModeEffect>();
std::vector<VendorTagInfo> request_vendor_tags;
std::vector<VendorTagInfo> result_vendor_tags;
if (portrait_mode_->InitializeAndGetVendorTags(
- &request_vendor_tags, &result_vendor_tags, mojo_manager) != 0) {
+ &request_vendor_tags, &result_vendor_tags, token) != 0) {
LOGF(ERROR) << "Failed to initialize portrait mode effect";
return -ENODEV;
}
diff --git a/camera/hal_adapter/reprocess_effect/reprocess_effect_manager.h b/camera/hal_adapter/reprocess_effect/reprocess_effect_manager.h
index 7a32fa2..b5eac7a 100644
--- a/camera/hal_adapter/reprocess_effect/reprocess_effect_manager.h
+++ b/camera/hal_adapter/reprocess_effect/reprocess_effect_manager.h
@@ -16,7 +16,7 @@
#include <system/camera_vendor_tags.h>
#include "cros-camera/camera_buffer_manager.h"
-#include "cros-camera/camera_mojo_channel_manager.h"
+#include "cros-camera/camera_mojo_channel_manager_token.h"
#include "hal_adapter/reprocess_effect/portrait_mode_effect.h"
#include "hal_adapter/reprocess_effect/reprocess_effect.h"
@@ -33,7 +33,7 @@
~ReprocessEffectManager() = default;
- int32_t Initialize(CameraMojoChannelManager* mojo_manager);
+ int32_t Initialize(CameraMojoChannelManagerToken* token);
// Check whether there are vendor tags for reprocessing effects
bool HasReprocessEffectVendorTag(const camera_metadata_t& settings);
diff --git a/camera/include/cros-camera/camera_algorithm_bridge.h b/camera/include/cros-camera/camera_algorithm_bridge.h
index a6806b0..6c80fce 100644
--- a/camera/include/cros-camera/camera_algorithm_bridge.h
+++ b/camera/include/cros-camera/camera_algorithm_bridge.h
@@ -13,7 +13,7 @@
#include <vector>
#include "cros-camera/camera_algorithm.h"
-#include "cros-camera/camera_mojo_channel_manager.h"
+#include "cros-camera/camera_mojo_channel_manager_token.h"
#include "cros-camera/export.h"
namespace cros {
@@ -37,8 +37,8 @@
// Example usage:
//
// #include <cros-camera/camera_algorithm_bridge.h>
-// auto* mojo_manager = GetMojoChannelManager();
-// auto algo = CameraAlgorithmBridge::CreateInstance(backend, mojo_manager);
+// auto* token = GetMojoChannelManagerToken();
+// auto algo = CameraAlgorithmBridge::CreateInstance(backend, token);
// algo->Initialize(this);
// std::vector<int32_t> handles(2);
// handles[0] = algo->RegisterBuffer(buffer_fd0);
@@ -65,12 +65,12 @@
// vendor algorithms.
//
// Args:
- // |mojo_manager|: The camera mojo channel manager instance which is used
- // for mojo communication.
+ // |token|: The camera mojo channel manager token which is used for mojo
+ // communication.
// Returns:
// Unique pointer to instance on success; nullptr on failure.
static std::unique_ptr<CameraAlgorithmBridge> CreateInstance(
- CameraAlgorithmBackend backend, CameraMojoChannelManager* mojo_manager);
+ CameraAlgorithmBackend backend, CameraMojoChannelManagerToken* token);
virtual ~CameraAlgorithmBridge() {}
diff --git a/camera/include/cros-camera/camera_mojo_channel_manager.h b/camera/include/cros-camera/camera_mojo_channel_manager.h
index 4c42721..c9e16e4 100644
--- a/camera/include/cros-camera/camera_mojo_channel_manager.h
+++ b/camera/include/cros-camera/camera_mojo_channel_manager.h
@@ -14,7 +14,7 @@
#include <base/callback_forward.h>
#include <base/memory/ref_counted.h>
-#include "cros-camera/export.h"
+#include "cros-camera/camera_mojo_channel_manager_token.h"
#include "mojo/algorithm/camera_algorithm.mojom.h"
#include "mojo/cros_camera_service.mojom.h"
#include "mojo/gpu/jpeg_encode_accelerator.mojom.h"
@@ -28,12 +28,11 @@
// There are many places that need to initialize Mojo and use related channels.
// This class is used to manage them together.
-class CROS_CAMERA_EXPORT CameraMojoChannelManager {
+class CROS_CAMERA_EXPORT CameraMojoChannelManager
+ : public CameraMojoChannelManagerToken {
public:
using Callback = base::OnceCallback<void(void)>;
- static std::unique_ptr<CameraMojoChannelManager> CreateInstance();
-
virtual ~CameraMojoChannelManager() {}
// TODO(b/151270948): Remove this method once all camera HALs implement
@@ -41,6 +40,11 @@
// to them.
static CameraMojoChannelManager* GetInstance();
+ static CameraMojoChannelManager* FromToken(
+ CameraMojoChannelManagerToken* token) {
+ return static_cast<CameraMojoChannelManager*>(token);
+ }
+
// Gets the task runner that the CameraHalDispatcher interface is bound to.
virtual scoped_refptr<base::SingleThreadTaskRunner> GetIpcTaskRunner() = 0;
diff --git a/camera/include/cros-camera/camera_mojo_channel_manager_token.h b/camera/include/cros-camera/camera_mojo_channel_manager_token.h
new file mode 100644
index 0000000..cf3766e
--- /dev/null
+++ b/camera/include/cros-camera/camera_mojo_channel_manager_token.h
@@ -0,0 +1,21 @@
+/*
+ * Copyright 2020 The Chromium OS 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 CAMERA_INCLUDE_CROS_CAMERA_CAMERA_MOJO_CHANNEL_MANAGER_TOKEN_H_
+#define CAMERA_INCLUDE_CROS_CAMERA_CAMERA_MOJO_CHANNEL_MANAGER_TOKEN_H_
+
+#include "cros-camera/export.h"
+
+namespace cros {
+
+class CROS_CAMERA_EXPORT CameraMojoChannelManagerToken {
+ public:
+ static CameraMojoChannelManagerToken* CreateInstance();
+};
+
+} // namespace cros
+
+#endif // CAMERA_INCLUDE_CROS_CAMERA_CAMERA_MOJO_CHANNEL_MANAGER_TOKEN_H_
diff --git a/camera/include/cros-camera/cros_camera_hal.h b/camera/include/cros-camera/cros_camera_hal.h
index 3d1d01a..88763e7 100644
--- a/camera/include/cros-camera/cros_camera_hal.h
+++ b/camera/include/cros-camera/cros_camera_hal.h
@@ -10,7 +10,9 @@
#define CROS_CAMERA_HAL_INFO_SYM CCHI
#define CROS_CAMERA_HAL_INFO_SYM_AS_STR "CCHI"
-#include "cros-camera/camera_mojo_channel_manager.h"
+#include <base/callback.h>
+
+#include "cros-camera/camera_mojo_channel_manager_token.h"
namespace cros {
@@ -25,10 +27,10 @@
typedef struct cros_camera_hal {
/**
- * Sets up the camera HAL. The |mojo_manager| can be used for communication
- * through Mojo.
+ * Sets up the camera HAL. The |token| can be used for communication through
+ * Mojo.
*/
- void (*set_up)(CameraMojoChannelManager* mojo_manager);
+ void (*set_up)(CameraMojoChannelManagerToken* token);
/**
* Tears down the camera HAL.
diff --git a/camera/include/cros-camera/jpeg_compressor.h b/camera/include/cros-camera/jpeg_compressor.h
index 9074504..596c9b7 100644
--- a/camera/include/cros-camera/jpeg_compressor.h
+++ b/camera/include/cros-camera/jpeg_compressor.h
@@ -11,7 +11,7 @@
#include <memory>
-#include "cros-camera/camera_mojo_channel_manager.h"
+#include "cros-camera/camera_mojo_channel_manager_token.h"
#include "cros-camera/export.h"
namespace cros {
@@ -39,7 +39,7 @@
static std::unique_ptr<JpegCompressor> GetInstance();
static std::unique_ptr<JpegCompressor> GetInstance(
- CameraMojoChannelManager* mojo_manager);
+ CameraMojoChannelManagerToken* token);
virtual ~JpegCompressor() {}
diff --git a/camera/include/cros-camera/jpeg_decode_accelerator.h b/camera/include/cros-camera/jpeg_decode_accelerator.h
index 8f4c778..fc50065 100644
--- a/camera/include/cros-camera/jpeg_decode_accelerator.h
+++ b/camera/include/cros-camera/jpeg_decode_accelerator.h
@@ -14,7 +14,7 @@
#include <system/window.h>
-#include "cros-camera/camera_mojo_channel_manager.h"
+#include "cros-camera/camera_mojo_channel_manager_token.h"
namespace cros {
@@ -61,7 +61,7 @@
static std::unique_ptr<JpegDecodeAccelerator> CreateInstance();
static std::unique_ptr<JpegDecodeAccelerator> CreateInstance(
- CameraMojoChannelManager* mojo_manager);
+ CameraMojoChannelManagerToken* token);
virtual ~JpegDecodeAccelerator() {}
diff --git a/camera/include/cros-camera/jpeg_encode_accelerator.h b/camera/include/cros-camera/jpeg_encode_accelerator.h
index 8d065f2..31748ef 100644
--- a/camera/include/cros-camera/jpeg_encode_accelerator.h
+++ b/camera/include/cros-camera/jpeg_encode_accelerator.h
@@ -12,7 +12,7 @@
#include <vector>
#include <base/bind.h>
-#include "cros-camera/camera_mojo_channel_manager.h"
+#include "cros-camera/camera_mojo_channel_manager_token.h"
#include "cros-camera/jpeg_compressor.h"
namespace cros {
@@ -65,7 +65,7 @@
};
static std::unique_ptr<JpegEncodeAccelerator> CreateInstance(
- CameraMojoChannelManager* mojo_manager);
+ CameraMojoChannelManagerToken* token);
virtual ~JpegEncodeAccelerator() {}