android: hal: Add Camera3 HAL
Add libcamera Android Camera HALv3 implementation. The initial camera HAL implementation supports the LIMITED hardware level and uses statically defined metadata and camera characteristics. Add a build option named 'android' and adjust the build system to selectively compile the Android camera HAL and link it against the required Android libraries. Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
parent
6bed34da16
commit
667d8ea8fd
13 changed files with 1559 additions and 1 deletions
111
src/android/camera3_hal.cpp
Normal file
111
src/android/camera3_hal.cpp
Normal file
|
@ -0,0 +1,111 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/*
|
||||
* Copyright (C) 2019, Google Inc.
|
||||
*
|
||||
* camera3_hal.cpp - Android Camera HALv3 module
|
||||
*/
|
||||
|
||||
#include <hardware/camera_common.h>
|
||||
|
||||
#include "camera_hal_manager.h"
|
||||
#include "camera_proxy.h"
|
||||
#include "log.h"
|
||||
|
||||
using namespace libcamera;
|
||||
|
||||
LOG_DEFINE_CATEGORY(HAL)
|
||||
|
||||
static CameraHalManager cameraManager;
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Android Camera HAL callbacks
|
||||
*/
|
||||
|
||||
static int hal_get_number_of_cameras(void)
|
||||
{
|
||||
return cameraManager.numCameras();
|
||||
}
|
||||
|
||||
static int hal_get_camera_info(int id, struct camera_info *info)
|
||||
{
|
||||
return cameraManager.getCameraInfo(id, info);
|
||||
}
|
||||
|
||||
static int hal_set_callbacks(const camera_module_callbacks_t *callbacks)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int hal_open_legacy(const struct hw_module_t *module, const char *id,
|
||||
uint32_t halVersion, struct hw_device_t **device)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
static int hal_set_torch_mode(const char *camera_id, bool enabled)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
/*
|
||||
* First entry point of the camera HAL module.
|
||||
*
|
||||
* Initialize the HAL but does not open any camera device yet (see hal_dev_open)
|
||||
*/
|
||||
static int hal_init()
|
||||
{
|
||||
LOG(HAL, Info) << "Initialising Android camera HAL";
|
||||
|
||||
cameraManager.init();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Android Camera Device
|
||||
*/
|
||||
|
||||
static int hal_dev_open(const hw_module_t *module, const char *name,
|
||||
hw_device_t **device)
|
||||
{
|
||||
LOG(HAL, Debug) << "Open camera " << name;
|
||||
|
||||
int id = atoi(name);
|
||||
CameraProxy *proxy = cameraManager.open(id, module);
|
||||
if (!proxy) {
|
||||
LOG(HAL, Error)
|
||||
<< "Failed to open camera module '" << id << "'";
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
*device = &proxy->camera3Device()->common;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct hw_module_methods_t hal_module_methods = {
|
||||
.open = hal_dev_open,
|
||||
};
|
||||
|
||||
camera_module_t HAL_MODULE_INFO_SYM = {
|
||||
.common = {
|
||||
.tag = HARDWARE_MODULE_TAG,
|
||||
.module_api_version = CAMERA_MODULE_API_VERSION_2_4,
|
||||
.hal_api_version = HARDWARE_HAL_API_VERSION,
|
||||
.id = CAMERA_HARDWARE_MODULE_ID,
|
||||
.name = "libcamera camera HALv3 module",
|
||||
.author = "libcamera",
|
||||
.methods = &hal_module_methods,
|
||||
.dso = nullptr,
|
||||
.reserved = {},
|
||||
},
|
||||
|
||||
.get_number_of_cameras = hal_get_number_of_cameras,
|
||||
.get_camera_info = hal_get_camera_info,
|
||||
.set_callbacks = hal_set_callbacks,
|
||||
.get_vendor_tag_ops = nullptr,
|
||||
.open_legacy = hal_open_legacy,
|
||||
.set_torch_mode = hal_set_torch_mode,
|
||||
.init = hal_init,
|
||||
.reserved = {},
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue