[libcamera-devel] [PATCH 2/6] android: CameraMetadata: Add copy constructor and getEntry
Paul Elder
paul.elder at ideasonboard.com
Thu Jan 14 11:40:31 CET 2021
Add a copy constructor to CameraMetadata, as well as a constructor from
camera_metadata_t. Also add a function getEntry to allow getting
metadata entries from CameraMetadata. This allows us to use
CameraMetadata for reading form camera_metadata_t.
Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
---
src/android/camera_metadata.cpp | 23 +++++++++++++++++++++++
src/android/camera_metadata.h | 3 +++
2 files changed, 26 insertions(+)
diff --git a/src/android/camera_metadata.cpp b/src/android/camera_metadata.cpp
index edea48fe..57ac6009 100644
--- a/src/android/camera_metadata.cpp
+++ b/src/android/camera_metadata.cpp
@@ -19,12 +19,35 @@ CameraMetadata::CameraMetadata(size_t entryCapacity, size_t dataCapacity)
valid_ = metadata_ != nullptr;
}
+CameraMetadata::CameraMetadata(const camera_metadata_t *metadata)
+{
+ metadata_ = clone_camera_metadata(metadata);
+ valid_ = metadata_ != nullptr;
+}
+
+CameraMetadata::CameraMetadata(const CameraMetadata &other)
+{
+ metadata_ = clone_camera_metadata(other.get());
+ valid_ = metadata_ != nullptr;
+}
+
CameraMetadata::~CameraMetadata()
{
if (metadata_)
free_camera_metadata(metadata_);
}
+int CameraMetadata::getEntry(uint32_t tag, camera_metadata_ro_entry_t *entry) const
+{
+ if (!entry)
+ return -EINVAL;
+
+ if (find_camera_metadata_ro_entry(metadata_, tag, entry))
+ return -EINVAL;
+
+ return 0;
+}
+
bool CameraMetadata::addEntry(uint32_t tag, const void *data, size_t count)
{
if (!valid_)
diff --git a/src/android/camera_metadata.h b/src/android/camera_metadata.h
index 9d047b1b..fa1c4983 100644
--- a/src/android/camera_metadata.h
+++ b/src/android/camera_metadata.h
@@ -15,9 +15,12 @@ class CameraMetadata
{
public:
CameraMetadata(size_t entryCapacity, size_t dataCapacity);
+ CameraMetadata(const camera_metadata_t *metadata);
+ CameraMetadata(const CameraMetadata &other);
~CameraMetadata();
bool isValid() const { return valid_; }
+ int getEntry(uint32_t tag, camera_metadata_ro_entry_t *entry) const;
bool addEntry(uint32_t tag, const void *data, size_t data_count);
bool updateEntry(uint32_t tag, const void *data, size_t data_count);
--
2.27.0
More information about the libcamera-devel
mailing list