[libcamera-devel] [PATCH v6 6/9] android: Add CameraMetadata helper class
Jacopo Mondi
jacopo at jmondi.org
Thu Sep 5 09:47:33 CEST 2019
From: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
The new CameraMetadata helper class wraps the Android camera_metadata_t
to simplify its usage.
Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
src/android/camera_metadata.cpp | 63 +++++++++++++++++++++++++++++++++
src/android/camera_metadata.h | 31 ++++++++++++++++
src/android/meson.build | 1 +
3 files changed, 95 insertions(+)
create mode 100644 src/android/camera_metadata.cpp
create mode 100644 src/android/camera_metadata.h
diff --git a/src/android/camera_metadata.cpp b/src/android/camera_metadata.cpp
new file mode 100644
index 000000000000..c261e1f01a20
--- /dev/null
+++ b/src/android/camera_metadata.cpp
@@ -0,0 +1,63 @@
+/* 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;
+}
+
+camera_metadata_t *CameraMetadata::release()
+{
+ if (!valid_)
+ return nullptr;
+
+ camera_metadata_t *metadata = metadata_;
+ valid_ = false;
+ metadata_ = nullptr;
+ return metadata;
+}
diff --git a/src/android/camera_metadata.h b/src/android/camera_metadata.h
new file mode 100644
index 000000000000..43a5598c6463
--- /dev/null
+++ b/src/android/camera_metadata.h
@@ -0,0 +1,31 @@
+/* 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();
+ camera_metadata_t *release();
+
+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 26537794bc29..b5e4eeeb73a8 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'
])
--
2.23.0
More information about the libcamera-devel
mailing list