From 667d8ea8fd4bda35e8888792d2b6c055fdb4be18 Mon Sep 17 00:00:00 2001 From: Jacopo Mondi Date: Fri, 10 May 2019 17:40:02 +0200 Subject: 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 --- src/android/camera_device.h | 71 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 src/android/camera_device.h (limited to 'src/android/camera_device.h') diff --git a/src/android/camera_device.h b/src/android/camera_device.h new file mode 100644 index 00000000..ac5b95c9 --- /dev/null +++ b/src/android/camera_device.h @@ -0,0 +1,71 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2019, Google Inc. + * + * camera_device.h - libcamera Android Camera Device + */ +#ifndef __ANDROID_CAMERA_DEVICE_H__ +#define __ANDROID_CAMERA_DEVICE_H__ + +#include + +#include + +#include +#include +#include +#include +#include + +#include "message.h" + +#define METADATA_ASSERT(_r) \ + do { \ + if (!(_r)) break; \ + LOG(HAL, Error) << "Error: " << __func__ << ":" << __LINE__; \ + return nullptr; \ + } while(0); + +class CameraDevice : public libcamera::Object +{ +public: + CameraDevice(unsigned int id, std::shared_ptr &camera); + ~CameraDevice(); + + void message(libcamera::Message *message); + + int open(); + void close(); + void setCallbacks(const camera3_callback_ops_t *callbacks); + 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); + void requestComplete(libcamera::Request *request, + const std::map &buffers); + +private: + struct Camera3RequestDescriptor { + Camera3RequestDescriptor(unsigned int frameNumber, + unsigned int numBuffers); + ~Camera3RequestDescriptor(); + + uint32_t frameNumber; + uint32_t numBuffers; + camera3_stream_buffer_t *buffers; + }; + + void notifyShutter(uint32_t frameNumber, uint64_t timestamp); + void notifyError(uint32_t frameNumber, camera3_stream_t *stream); + camera_metadata_t *getResultMetadata(int frame_number, int64_t timestamp); + + bool running_; + std::shared_ptr camera_; + std::unique_ptr config_; + + camera_metadata_t *staticMetadata_; + camera_metadata_t *requestTemplate_; + const camera3_callback_ops_t *callbacks_; +}; + +#endif /* __ANDROID_CAMERA_DEVICE_H__ */ -- cgit v1.2.1