[libcamera-devel] [PATCH v2 13/13] android: Remove internal thread
Jacopo Mondi
jacopo at jmondi.org
Thu Feb 13 12:06:50 CET 2020
Hi Laurent,
sorry for the delay
On Wed, Jan 22, 2020 at 10:57:23PM +0200, Laurent Pinchart wrote:
> 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 at ideasonboard.com>
Acked-by: Jacopo Mondi <jacopo at jmondi.org>
Thanks
j
> ---
> Changes since v1:
>
> - Remove unused CameraDevice::cameraDevice_
> - Include stddef.h in camera_hal_manager.h to fix compilation of
> Android's hardware/hardware.h header
> ---
> src/android/camera3_hal.cpp | 8 +-
> src/android/camera_device.cpp | 48 +++++---
> src/android/camera_device.h | 16 ++-
> src/android/camera_hal_manager.cpp | 78 +++++--------
> src/android/camera_hal_manager.h | 17 +--
> src/android/camera_ops.cpp | 96 +++++++++++++++
> src/android/camera_ops.h | 15 +++
> src/android/camera_proxy.cpp | 180 -----------------------------
> src/android/camera_proxy.h | 42 -------
> src/android/meson.build | 2 +-
> 10 files changed, 188 insertions(+), 314 deletions(-)
> create mode 100644 src/android/camera_ops.cpp
> create mode 100644 src/android/camera_ops.h
> delete mode 100644 src/android/camera_proxy.cpp
> delete mode 100644 src/android/camera_proxy.h
>
> diff --git a/src/android/camera3_hal.cpp b/src/android/camera3_hal.cpp
> index 8d2629ca356c..d6fc1ecc01bf 100644
> --- a/src/android/camera3_hal.cpp
> +++ b/src/android/camera3_hal.cpp
> @@ -7,8 +7,8 @@
>
> #include <hardware/camera_common.h>
>
> +#include "camera_device.h"
> #include "camera_hal_manager.h"
> -#include "camera_proxy.h"
> #include "log.h"
>
> using namespace libcamera;
> @@ -71,14 +71,14 @@ static int hal_dev_open(const hw_module_t *module, const char *name,
> LOG(HAL, Debug) << "Open camera " << name;
>
> int id = atoi(name);
> - CameraProxy *proxy = cameraManager.open(id, module);
> - if (!proxy) {
> + CameraDevice *camera = cameraManager.open(id, module);
> + if (!camera) {
> LOG(HAL, Error)
> << "Failed to open camera module '" << id << "'";
> return -ENODEV;
> }
>
> - *device = &proxy->camera3Device()->common;
> + *device = &camera->camera3Device()->common;
>
> return 0;
> }
> diff --git a/src/android/camera_device.cpp b/src/android/camera_device.cpp
> index 67c1d47e67ed..b460d499375b 100644
> --- a/src/android/camera_device.cpp
> +++ b/src/android/camera_device.cpp
> @@ -6,6 +6,7 @@
> */
>
> #include "camera_device.h"
> +#include "camera_ops.h"
>
> #include "log.h"
> #include "utils.h"
> @@ -39,13 +40,13 @@ CameraDevice::Camera3RequestDescriptor::~Camera3RequestDescriptor()
> * \class CameraDevice
> *
> * The CameraDevice class wraps a libcamera::Camera instance, and implements
> - * the camera_device_t interface by handling RPC requests received from its
> - * associated CameraProxy.
> + * the camera3_device_t interface, bridging calls received from the Android
> + * camera service to the CameraDevice.
> *
> - * It translate parameters and operations from Camera HALv3 API to the libcamera
> - * ones to provide static information for a Camera, create request templates
> - * for it, process capture requests and then deliver capture results back
> - * to the framework using the designated callbacks.
> + * The class translates parameters and operations from the Camera HALv3 API to
> + * the libcamera API to provide static information for a Camera, create request
> + * templates for it, process capture requests and then deliver capture results
> + * back to the framework using the designated callbacks.
> */
>
> CameraDevice::CameraDevice(unsigned int id, const std::shared_ptr<Camera> &camera)
> @@ -63,7 +64,7 @@ CameraDevice::~CameraDevice()
> delete it.second;
> }
>
> -int CameraDevice::open()
> +int CameraDevice::open(const hw_module_t *hardwareModule)
> {
> int ret = camera_->acquire();
> if (ret) {
> @@ -71,6 +72,19 @@ int CameraDevice::open()
> return ret;
> }
>
> + /* Initialize the hw_device_t in the instance camera3_module_t. */
> + camera3Device_.common.tag = HARDWARE_DEVICE_TAG;
> + camera3Device_.common.version = CAMERA_DEVICE_API_VERSION_3_3;
> + camera3Device_.common.module = (hw_module_t *)hardwareModule;
> + camera3Device_.common.close = hal_dev_close;
> +
> + /*
> + * The camera device operations. These actually implement
> + * the Android Camera HALv3 interface.
> + */
> + camera3Device_.ops = &hal_dev_ops;
> + camera3Device_.priv = this;
> +
> return 0;
> }
>
> @@ -90,7 +104,7 @@ void CameraDevice::setCallbacks(const camera3_callback_ops_t *callbacks)
> /*
> * Return static information for the camera.
> */
> -camera_metadata_t *CameraDevice::getStaticMetadata()
> +const camera_metadata_t *CameraDevice::getStaticMetadata()
> {
> if (staticMetadata_)
> return staticMetadata_->get();
> @@ -675,7 +689,7 @@ int CameraDevice::configureStreams(camera3_stream_configuration_t *stream_list)
> return 0;
> }
>
> -void CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Request)
> +int CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Request)
> {
> StreamConfiguration *streamConfiguration = &config_->at(0);
> Stream *stream = streamConfiguration->stream();
> @@ -683,7 +697,7 @@ void CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reque
> if (camera3Request->num_output_buffers != 1) {
> LOG(HAL, Error) << "Invalid number of output buffers: "
> << camera3Request->num_output_buffers;
> - return;
> + return -EINVAL;
> }
>
> /* Start the camera if that's the first request we handle. */
> @@ -691,7 +705,7 @@ void CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reque
> int ret = camera_->start();
> if (ret) {
> LOG(HAL, Error) << "Failed to start camera";
> - return;
> + return ret;
> }
>
> running_ = true;
> @@ -747,7 +761,7 @@ void CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reque
> if (!buffer) {
> LOG(HAL, Error) << "Failed to create buffer";
> delete descriptor;
> - return;
> + return -ENOMEM;
> }
>
> Request *request =
> @@ -757,14 +771,12 @@ void CameraDevice::processCaptureRequest(camera3_capture_request_t *camera3Reque
> int ret = camera_->queueRequest(request);
> if (ret) {
> LOG(HAL, Error) << "Failed to queue request";
> - goto error;
> + delete request;
> + delete descriptor;
> + return ret;
> }
>
> - return;
> -
> -error:
> - delete request;
> - delete descriptor;
> + return 0;
> }
>
> void CameraDevice::requestComplete(Request *request)
> diff --git a/src/android/camera_device.h b/src/android/camera_device.h
> index caa617dcbfe1..55eac317e0e4 100644
> --- a/src/android/camera_device.h
> +++ b/src/android/camera_device.h
> @@ -13,7 +13,6 @@
>
> #include <libcamera/buffer.h>
> #include <libcamera/camera.h>
> -#include <libcamera/object.h>
> #include <libcamera/request.h>
> #include <libcamera/stream.h>
>
> @@ -21,19 +20,23 @@
>
> class CameraMetadata;
>
> -class CameraDevice : public libcamera::Object
> +class CameraDevice
> {
> public:
> CameraDevice(unsigned int id, const std::shared_ptr<libcamera::Camera> &camera);
> ~CameraDevice();
>
> - int open();
> + int open(const hw_module_t *hardwareModule);
> void close();
> +
> + unsigned int id() const { return id_; }
> + camera3_device_t *camera3Device() { return &camera3Device_; }
> +
> void setCallbacks(const camera3_callback_ops_t *callbacks);
> - camera_metadata_t *getStaticMetadata();
> + const camera_metadata_t *getStaticMetadata();
> const camera_metadata_t *constructDefaultRequestSettings(int type);
> int configureStreams(camera3_stream_configuration_t *stream_list);
> - void processCaptureRequest(camera3_capture_request_t *request);
> + int processCaptureRequest(camera3_capture_request_t *request);
> void requestComplete(libcamera::Request *request);
>
> private:
> @@ -52,6 +55,9 @@ private:
> std::unique_ptr<CameraMetadata> getResultMetadata(int frame_number,
> int64_t timestamp);
>
> + unsigned int id_;
> + camera3_device_t camera3Device_;
> +
> bool running_;
> std::shared_ptr<libcamera::Camera> camera_;
> std::unique_ptr<libcamera::CameraConfiguration> config_;
> diff --git a/src/android/camera_hal_manager.cpp b/src/android/camera_hal_manager.cpp
> index 22f0323b3ff0..5bd3bdba8a55 100644
> --- a/src/android/camera_hal_manager.cpp
> +++ b/src/android/camera_hal_manager.cpp
> @@ -12,7 +12,6 @@
> #include "log.h"
>
> #include "camera_device.h"
> -#include "camera_proxy.h"
>
> using namespace libcamera;
>
> @@ -28,92 +27,67 @@ LOG_DECLARE_CATEGORY(HAL);
> * their static information and to open camera devices.
> */
>
> -CameraHalManager::~CameraHalManager()
> +CameraHalManager::CameraHalManager()
> + : cameraManager_(nullptr)
> {
> - if (isRunning()) {
> - exit(0);
> - /* \todo Wait with a timeout, just in case. */
> - wait();
> - }
> }
>
> -int CameraHalManager::init()
> +CameraHalManager::~CameraHalManager()
> {
> - /*
> - * Start the camera HAL manager thread and wait until its
> - * initialisation completes to be fully operational before
> - * receiving calls from the camera stack.
> - */
> - start();
> -
> - MutexLocker locker(mutex_);
> - cv_.wait(locker);
> + cameras_.clear();
>
> - return 0;
> + if (cameraManager_) {
> + cameraManager_->stop();
> + delete cameraManager_;
> + cameraManager_ = nullptr;
> + }
> }
>
> -void CameraHalManager::run()
> +int CameraHalManager::init()
> {
> - /*
> - * All the libcamera components must be initialised here, in
> - * order to bind them to the camera HAL manager thread that
> - * executes the event dispatcher.
> - */
> cameraManager_ = new CameraManager();
>
> int ret = cameraManager_->start();
> if (ret) {
> LOG(HAL, Error) << "Failed to start camera manager: "
> << strerror(-ret);
> - return;
> + delete cameraManager_;
> + cameraManager_ = nullptr;
> + return ret;
> }
>
> /*
> - * For each Camera registered in the system, a CameraProxy
> - * gets created here to wraps a camera device.
> + * For each Camera registered in the system, a CameraDevice
> + * gets created here to wraps a libcamera Camera instance.
> *
> * \todo Support camera hotplug.
> */
> unsigned int index = 0;
> - for (auto &camera : cameraManager_->cameras()) {
> - CameraProxy *proxy = new CameraProxy(index, camera);
> - proxies_.emplace_back(proxy);
> + for (auto &cam : cameraManager_->cameras()) {
> + CameraDevice *camera = new CameraDevice(index, cam);
> + cameras_.emplace_back(camera);
>
> ++index;
> }
>
> - /*
> - * libcamera has been initialized. Unlock the init() caller
> - * as we're now ready to handle calls from the framework.
> - */
> - cv_.notify_one();
> -
> - /* Now start processing events and messages. */
> - exec();
> -
> - /* Clean up the resources we have allocated. */
> - proxies_.clear();
> -
> - cameraManager_->stop();
> - delete cameraManager_;
> - cameraManager_ = nullptr;
> + return 0;
> }
>
> -CameraProxy *CameraHalManager::open(unsigned int id,
> - const hw_module_t *hardwareModule)
> +CameraDevice *CameraHalManager::open(unsigned int id,
> + const hw_module_t *hardwareModule)
> {
> if (id >= numCameras()) {
> LOG(HAL, Error) << "Invalid camera id '" << id << "'";
> return nullptr;
> }
>
> - CameraProxy *proxy = proxies_[id].get();
> - if (proxy->open(hardwareModule))
> + CameraDevice *camera = cameras_[id].get();
> + if (camera->open(hardwareModule))
> return nullptr;
>
> LOG(HAL, Info) << "Open camera '" << id << "'";
>
> - return proxy;
> + return camera;
> }
>
> unsigned int CameraHalManager::numCameras() const
> @@ -131,14 +105,14 @@ int CameraHalManager::getCameraInfo(unsigned int id, struct camera_info *info)
> return -EINVAL;
> }
>
> - CameraProxy *proxy = proxies_[id].get();
> + CameraDevice *camera = cameras_[id].get();
>
> /* \todo Get these info dynamically inspecting the camera module. */
> info->facing = id ? CAMERA_FACING_FRONT : CAMERA_FACING_BACK;
> info->orientation = 0;
> info->device_version = 0;
> info->resource_cost = 0;
> - info->static_camera_characteristics = proxy->getStaticMetadata();
> + info->static_camera_characteristics = camera->getStaticMetadata();
> info->conflicting_devices = nullptr;
> info->conflicting_devices_length = 0;
>
> diff --git a/src/android/camera_hal_manager.h b/src/android/camera_hal_manager.h
> index c23abd1c00af..94d8f005444d 100644
> --- a/src/android/camera_hal_manager.h
> +++ b/src/android/camera_hal_manager.h
> @@ -7,8 +7,7 @@
> #ifndef __ANDROID_CAMERA_MANAGER_H__
> #define __ANDROID_CAMERA_MANAGER_H__
>
> -#include <condition_variable>
> -#include <mutex>
> +#include <stddef.h>
> #include <vector>
>
> #include <hardware/hardware.h>
> @@ -16,33 +15,27 @@
>
> #include <libcamera/camera_manager.h>
>
> -#include "thread.h"
> -
> class CameraDevice;
> -class CameraProxy;
>
> -class CameraHalManager : public libcamera::Thread
> +class CameraHalManager
> {
> public:
> + CameraHalManager();
> ~CameraHalManager();
>
> int init();
>
> - CameraProxy *open(unsigned int id, const hw_module_t *module);
> + CameraDevice *open(unsigned int id, const hw_module_t *module);
>
> unsigned int numCameras() const;
> int getCameraInfo(unsigned int id, struct camera_info *info);
>
> private:
> - void run() override;
> camera_metadata_t *getStaticMetadata(unsigned int id);
>
> libcamera::CameraManager *cameraManager_;
>
> - std::mutex mutex_;
> - std::condition_variable cv_;
> -
> - std::vector<std::unique_ptr<CameraProxy>> proxies_;
> + std::vector<std::unique_ptr<CameraDevice>> cameras_;
> };
>
> #endif /* __ANDROID_CAMERA_MANAGER_H__ */
> diff --git a/src/android/camera_ops.cpp b/src/android/camera_ops.cpp
> new file mode 100644
> index 000000000000..9dfc2e655e83
> --- /dev/null
> +++ b/src/android/camera_ops.cpp
> @@ -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 },
> +};
> diff --git a/src/android/camera_ops.h b/src/android/camera_ops.h
> new file mode 100644
> index 000000000000..304e7b856e81
> --- /dev/null
> +++ b/src/android/camera_ops.h
> @@ -0,0 +1,15 @@
> +/* SPDX-License-Identifier: LGPL-2.1-or-later */
> +/*
> + * Copyright (C) 2019, Google Inc.
> + *
> + * camera_ops.h - Android Camera HAL Operations
> + */
> +#ifndef __ANDROID_CAMERA_OPS_H__
> +#define __ANDROID_CAMERA_OPS_H__
> +
> +#include <hardware/camera3.h>
> +
> +int hal_dev_close(hw_device_t *hw_device);
> +extern camera3_device_ops hal_dev_ops;
> +
> +#endif /* __ANDROID_CAMERA_OPS_H__ */
> diff --git a/src/android/camera_proxy.cpp b/src/android/camera_proxy.cpp
> deleted file mode 100644
> index 3964b5665e2f..000000000000
> --- a/src/android/camera_proxy.cpp
> +++ /dev/null
> @@ -1,180 +0,0 @@
> -/* SPDX-License-Identifier: LGPL-2.1-or-later */
> -/*
> - * Copyright (C) 2019, Google Inc.
> - *
> - * camera_proxy.cpp - Proxy to camera devices
> - */
> -
> -#include "camera_proxy.h"
> -
> -#include <system/camera_metadata.h>
> -
> -#include <libcamera/object.h>
> -
> -#include "log.h"
> -#include "message.h"
> -#include "utils.h"
> -
> -#include "camera_device.h"
> -
> -using namespace libcamera;
> -
> -LOG_DECLARE_CATEGORY(HAL);
> -
> -/*
> - * \class CameraProxy
> - *
> - * The CameraProxy wraps a CameraDevice and implements the camera3_device_t
> - * API, bridging calls received from the camera framework to the CameraDevice.
> - *
> - * Bridging operation calls between the framework and the CameraDevice is
> - * required as the two run in two different threads and certain operations,
> - * such as queueing a new capture request to the camera, shall be called in
> - * the thread that dispatches events. Other operations do not require any
> - * bridging and resolve to direct function calls on the CameraDevice instance
> - * instead.
> - */
> -
> -static int hal_dev_initialize(const struct camera3_device *dev,
> - const camera3_callback_ops_t *callback_ops)
> -{
> - if (!dev)
> - return -EINVAL;
> -
> - CameraProxy *proxy = reinterpret_cast<CameraProxy *>(dev->priv);
> - proxy->initialize(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;
> -
> - CameraProxy *proxy = reinterpret_cast<CameraProxy *>(dev->priv);
> - return proxy->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;
> -
> - CameraProxy *proxy = reinterpret_cast<CameraProxy *>(dev->priv);
> - return proxy->constructDefaultRequestSettings(type);
> -}
> -
> -static int hal_dev_process_capture_request(const struct camera3_device *dev,
> - camera3_capture_request_t *request)
> -{
> - if (!dev)
> - return -EINVAL;
> -
> - CameraProxy *proxy = reinterpret_cast<CameraProxy *>(dev->priv);
> - return proxy->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;
> -}
> -
> -static 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);
> - CameraProxy *proxy = reinterpret_cast<CameraProxy *>(dev->priv);
> -
> - proxy->close();
> -
> - return 0;
> -}
> -
> -static 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 },
> -};
> -
> -CameraProxy::CameraProxy(unsigned int id, const std::shared_ptr<Camera> &camera)
> - : id_(id)
> -{
> - cameraDevice_ = new CameraDevice(id, camera);
> -}
> -
> -CameraProxy::~CameraProxy()
> -{
> - delete cameraDevice_;
> -}
> -
> -int CameraProxy::open(const hw_module_t *hardwareModule)
> -{
> - int ret = cameraDevice_->open();
> - if (ret)
> - return ret;
> -
> - /* Initialize the hw_device_t in the instance camera3_module_t. */
> - camera3Device_.common.tag = HARDWARE_DEVICE_TAG;
> - camera3Device_.common.version = CAMERA_DEVICE_API_VERSION_3_3;
> - camera3Device_.common.module = (hw_module_t *)hardwareModule;
> - camera3Device_.common.close = hal_dev_close;
> -
> - /*
> - * The camera device operations. These actually implement
> - * the Android Camera HALv3 interface.
> - */
> - camera3Device_.ops = &hal_dev_ops;
> - camera3Device_.priv = this;
> -
> - return 0;
> -}
> -
> -void CameraProxy::close()
> -{
> - cameraDevice_->invokeMethod(&CameraDevice::close,
> - ConnectionTypeBlocking);
> -}
> -
> -void CameraProxy::initialize(const camera3_callback_ops_t *callbacks)
> -{
> - cameraDevice_->setCallbacks(callbacks);
> -}
> -
> -const camera_metadata_t *CameraProxy::getStaticMetadata()
> -{
> - return cameraDevice_->getStaticMetadata();
> -}
> -
> -const camera_metadata_t *CameraProxy::constructDefaultRequestSettings(int type)
> -{
> - return cameraDevice_->constructDefaultRequestSettings(type);
> -}
> -
> -int CameraProxy::configureStreams(camera3_stream_configuration_t *stream_list)
> -{
> - return cameraDevice_->configureStreams(stream_list);
> -}
> -
> -int CameraProxy::processCaptureRequest(camera3_capture_request_t *request)
> -{
> - cameraDevice_->invokeMethod(&CameraDevice::processCaptureRequest,
> - ConnectionTypeBlocking, request);
> -
> - return 0;
> -}
> diff --git a/src/android/camera_proxy.h b/src/android/camera_proxy.h
> deleted file mode 100644
> index e8cfbc9dd526..000000000000
> --- a/src/android/camera_proxy.h
> +++ /dev/null
> @@ -1,42 +0,0 @@
> -/* SPDX-License-Identifier: LGPL-2.1-or-later */
> -/*
> - * Copyright (C) 2019, Google Inc.
> - *
> - * camera_proxy.h - Proxy to camera devices
> - */
> -#ifndef __ANDROID_CAMERA_PROXY_H__
> -#define __ANDROID_CAMERA_PROXY_H__
> -
> -#include <memory>
> -
> -#include <hardware/camera3.h>
> -
> -#include <libcamera/camera.h>
> -
> -class CameraDevice;
> -
> -class CameraProxy
> -{
> -public:
> - CameraProxy(unsigned int id, const std::shared_ptr<libcamera::Camera> &camera);
> - ~CameraProxy();
> -
> - int open(const hw_module_t *hardwareModule);
> - void close();
> -
> - void initialize(const camera3_callback_ops_t *callbacks);
> - const camera_metadata_t *getStaticMetadata();
> - const camera_metadata_t *constructDefaultRequestSettings(int type);
> - int configureStreams(camera3_stream_configuration_t *stream_list);
> - int processCaptureRequest(camera3_capture_request_t *request);
> -
> - unsigned int id() const { return id_; }
> - camera3_device_t *camera3Device() { return &camera3Device_; }
> -
> -private:
> - unsigned int id_;
> - CameraDevice *cameraDevice_;
> - camera3_device_t camera3Device_;
> -};
> -
> -#endif /* __ANDROID_CAMERA_PROXY_H__ */
> diff --git a/src/android/meson.build b/src/android/meson.build
> index 70dfcc1df27a..5a5a332e6a6f 100644
> --- a/src/android/meson.build
> +++ b/src/android/meson.build
> @@ -3,7 +3,7 @@ android_hal_sources = files([
> 'camera_hal_manager.cpp',
> 'camera_device.cpp',
> 'camera_metadata.cpp',
> - 'camera_proxy.cpp',
> + 'camera_ops.cpp',
> ])
>
> android_camera_metadata_sources = files([
> --
> Regards,
>
> Laurent Pinchart
>
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20200213/8923aaf5/attachment.sig>
More information about the libcamera-devel
mailing list