android: Remove internal thread
Now that libcamera creates threads internally and doesn't rely on an application-provided event loop, remove the thread from the Android Camera HAL layer. The CameraProxy class becomes meaningless, remove it and communicate directly from the CameraHalManager to the CameraDevice. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Acked-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
parent
8a8502ec0e
commit
da3f50ee9c
10 changed files with 189 additions and 315 deletions
96
src/android/camera_ops.cpp
Normal file
96
src/android/camera_ops.cpp
Normal file
|
@ -0,0 +1,96 @@
|
|||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
/*
|
||||
* Copyright (C) 2019, Google Inc.
|
||||
*
|
||||
* camera_ops.h - Android Camera HAL Operations
|
||||
*/
|
||||
|
||||
#include "camera_ops.h"
|
||||
|
||||
#include <system/camera_metadata.h>
|
||||
|
||||
#include "camera_device.h"
|
||||
|
||||
using namespace libcamera;
|
||||
|
||||
/*
|
||||
* Translatation layer between the Android Camera HAL device operations and the
|
||||
* CameraDevice.
|
||||
*/
|
||||
|
||||
static int hal_dev_initialize(const struct camera3_device *dev,
|
||||
const camera3_callback_ops_t *callback_ops)
|
||||
{
|
||||
if (!dev)
|
||||
return -EINVAL;
|
||||
|
||||
CameraDevice *camera = reinterpret_cast<CameraDevice *>(dev->priv);
|
||||
camera->setCallbacks(callback_ops);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int hal_dev_configure_streams(const struct camera3_device *dev,
|
||||
camera3_stream_configuration_t *stream_list)
|
||||
{
|
||||
if (!dev)
|
||||
return -EINVAL;
|
||||
|
||||
CameraDevice *camera = reinterpret_cast<CameraDevice *>(dev->priv);
|
||||
return camera->configureStreams(stream_list);
|
||||
}
|
||||
|
||||
static const camera_metadata_t *
|
||||
hal_dev_construct_default_request_settings(const struct camera3_device *dev,
|
||||
int type)
|
||||
{
|
||||
if (!dev)
|
||||
return nullptr;
|
||||
|
||||
CameraDevice *camera = reinterpret_cast<CameraDevice *>(dev->priv);
|
||||
return camera->constructDefaultRequestSettings(type);
|
||||
}
|
||||
|
||||
static int hal_dev_process_capture_request(const struct camera3_device *dev,
|
||||
camera3_capture_request_t *request)
|
||||
{
|
||||
if (!dev)
|
||||
return -EINVAL;
|
||||
|
||||
CameraDevice *camera = reinterpret_cast<CameraDevice *>(dev->priv);
|
||||
return camera->processCaptureRequest(request);
|
||||
}
|
||||
|
||||
static void hal_dev_dump(const struct camera3_device *dev, int fd)
|
||||
{
|
||||
}
|
||||
|
||||
static int hal_dev_flush(const struct camera3_device *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int hal_dev_close(hw_device_t *hw_device)
|
||||
{
|
||||
if (!hw_device)
|
||||
return -EINVAL;
|
||||
|
||||
camera3_device_t *dev = reinterpret_cast<camera3_device_t *>(hw_device);
|
||||
CameraDevice *camera = reinterpret_cast<CameraDevice *>(dev->priv);
|
||||
|
||||
camera->close();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
camera3_device_ops hal_dev_ops = {
|
||||
.initialize = hal_dev_initialize,
|
||||
.configure_streams = hal_dev_configure_streams,
|
||||
.register_stream_buffers = nullptr,
|
||||
.construct_default_request_settings = hal_dev_construct_default_request_settings,
|
||||
.process_capture_request = hal_dev_process_capture_request,
|
||||
.get_metadata_vendor_tag_ops = nullptr,
|
||||
.dump = hal_dev_dump,
|
||||
.flush = hal_dev_flush,
|
||||
.reserved = { nullptr },
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue