diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2019-09-05 03:12:34 +0300 |
---|---|---|
committer | Jacopo Mondi <jacopo@jmondi.org> | 2019-09-05 23:07:53 +0200 |
commit | 9214e2b4932a6d5f459a8319f34b3671fee35aa2 (patch) | |
tree | 6f074e549c2e57f8107e3590e54f3af66d3e1be7 | |
parent | 637034742f2b0b752402719741ad0ec899c8ba6d (diff) |
android: Add CameraMetadata helper class
The new CameraMetadata helper class wraps the Android camera_metadata_t
to simplify its usage.
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-rw-r--r-- | src/android/camera_metadata.cpp | 52 | ||||
-rw-r--r-- | src/android/camera_metadata.h | 30 | ||||
-rw-r--r-- | src/android/meson.build | 1 |
3 files changed, 83 insertions, 0 deletions
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 <stdint.h> + +#include <system/camera_metadata.h> + +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' ]) |