summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-09-05 03:12:34 +0300
committerJacopo Mondi <jacopo@jmondi.org>2019-09-05 23:07:53 +0200
commit9214e2b4932a6d5f459a8319f34b3671fee35aa2 (patch)
tree6f074e549c2e57f8107e3590e54f3af66d3e1be7
parent637034742f2b0b752402719741ad0ec899c8ba6d (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.cpp52
-rw-r--r--src/android/camera_metadata.h30
-rw-r--r--src/android/meson.build1
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'
])