From 9214e2b4932a6d5f459a8319f34b3671fee35aa2 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Thu, 5 Sep 2019 03:12:34 +0300 Subject: android: Add CameraMetadata helper class The new CameraMetadata helper class wraps the Android camera_metadata_t to simplify its usage. Reviewed-by: Jacopo Mondi Signed-off-by: Laurent Pinchart --- src/android/camera_metadata.cpp | 52 +++++++++++++++++++++++++++++++++++++++++ src/android/camera_metadata.h | 30 ++++++++++++++++++++++++ src/android/meson.build | 1 + 3 files changed, 83 insertions(+) create mode 100644 src/android/camera_metadata.cpp create mode 100644 src/android/camera_metadata.h (limited to 'src/android') diff --git a/src/android/camera_metadata.cpp b/src/android/camera_metadata.cpp new file mode 100644 index 00000000..76965108 --- /dev/null +++ b/src/android/camera_metadata.cpp @@ -0,0 +1,52 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2019, Google Inc. + * + * camera_metadata.cpp - libcamera Android Camera Metadata Helper + */ + +#include "camera_metadata.h" + +#include "log.h" + +using namespace libcamera; + +LOG_DEFINE_CATEGORY(CameraMetadata); + +CameraMetadata::CameraMetadata(size_t entryCapacity, size_t dataCapacity) +{ + metadata_ = allocate_camera_metadata(entryCapacity, dataCapacity); + valid_ = metadata_ != nullptr; +} + +CameraMetadata::~CameraMetadata() +{ + if (metadata_) + free_camera_metadata(metadata_); +} + +bool CameraMetadata::addEntry(uint32_t tag, const void *data, size_t count) +{ + if (!valid_) + return false; + + if (!add_camera_metadata_entry(metadata_, tag, data, count)) + return true; + + const char *name = get_camera_metadata_tag_name(tag); + if (name) + LOG(CameraMetadata, Error) + << "Failed to add tag " << name; + else + LOG(CameraMetadata, Error) + << "Failed to add unknown tag " << tag; + + valid_ = false; + + return false; +} + +camera_metadata_t *CameraMetadata::get() +{ + return valid_ ? metadata_ : nullptr; +} diff --git a/src/android/camera_metadata.h b/src/android/camera_metadata.h new file mode 100644 index 00000000..75a9d706 --- /dev/null +++ b/src/android/camera_metadata.h @@ -0,0 +1,30 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +/* + * Copyright (C) 2019, Google Inc. + * + * camera_metadata.h - libcamera Android Camera Metadata Helper + */ +#ifndef __ANDROID_CAMERA_METADATA_H__ +#define __ANDROID_CAMERA_METADATA_H__ + +#include + +#include + +class CameraMetadata +{ +public: + CameraMetadata(size_t entryCapacity, size_t dataCapacity); + ~CameraMetadata(); + + bool isValid() { return valid_; } + bool addEntry(uint32_t tag, const void *data, size_t data_count); + + camera_metadata_t *get(); + +private: + camera_metadata_t *metadata_; + bool valid_; +}; + +#endif /* __ANDROID_CAMERA_METADATA_H__ */ diff --git a/src/android/meson.build b/src/android/meson.build index 26537794..b5e4eeeb 100644 --- a/src/android/meson.build +++ b/src/android/meson.build @@ -2,6 +2,7 @@ android_hal_sources = files([ 'camera3_hal.cpp', 'camera_hal_manager.cpp', 'camera_device.cpp', + 'camera_metadata.cpp', 'camera_proxy.cpp', 'thread_rpc.cpp' ]) -- cgit v1.2.1