blob: e95ff5d5ce7fb400b99a49df1adfe2e9b09e0a58 [file] [log] [blame]
/*
* Copyright 2017 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_COMMON_CAMERA_ALGORITHM_ADAPTER_H_
#define CAMERA_COMMON_CAMERA_ALGORITHM_ADAPTER_H_
#include <memory>
#include <string>
#include <base/files/scoped_file.h>
#include <base/threading/thread.h>
#include <mojo/core/embedder/scoped_ipc_support.h>
#include "common/camera_algorithm_ops_impl.h"
#include "cros-camera/future.h"
namespace cros {
// This class loads and adapts the functions of camera algorithm. It runs in
// the sandboxed camera algorithm process.
class CameraAlgorithmAdapter {
public:
CameraAlgorithmAdapter();
CameraAlgorithmAdapter(const CameraAlgorithmAdapter&) = delete;
CameraAlgorithmAdapter& operator=(const CameraAlgorithmAdapter&) = delete;
~CameraAlgorithmAdapter();
// Build up IPC and load the camera algorithm library. This method returns
// when the IPC connection is lost.
void Run(std::string pipe_name, base::ScopedFD channel);
private:
void InitializeOnIpcThread(std::string pipe_name, base::ScopedFD channel);
void DestroyOnIpcThread();
// Pointer to CameraAlgorithmOps interface implementation.
CameraAlgorithmOpsImpl* algo_impl_;
// Handle of the camera algorithm library.
void* algo_dll_handle_;
// Thread for IPC chores
base::Thread ipc_thread_;
std::unique_ptr<mojo::core::ScopedIPCSupport> ipc_support_;
// Callback to handle IPC channel lost event
base::Callback<void(void)> ipc_lost_cb_;
// Store observers for future locks
cros::CancellationRelay relay_;
};
} // namespace cros
#endif // CAMERA_COMMON_CAMERA_ALGORITHM_ADAPTER_H_