[libcamera-devel] [PATCH 1/7] android: camera_metadata: Add copy constructor and getEntry

Jacopo Mondi jacopo at jmondi.org
Thu Jan 21 17:52:59 CET 2021


From: Paul Elder <paul.elder at ideasonboard.com>

Add a copy constructor and assignment operator to CameraMetadata, as well
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 from camera_metadata_t.

Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
---
 src/android/camera_metadata.cpp | 33 +++++++++++++++++++++++++++++++++
 src/android/camera_metadata.h   |  5 +++++
 2 files changed, 38 insertions(+)

diff --git a/src/android/camera_metadata.cpp b/src/android/camera_metadata.cpp
index edea48fe5581..8e36e758d231 100644
--- a/src/android/camera_metadata.cpp
+++ b/src/android/camera_metadata.cpp
@@ -19,12 +19,45 @@ 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)
+	: CameraMetadata(other.get())
+{
+}
+
 CameraMetadata::~CameraMetadata()
 {
 	if (metadata_)
 		free_camera_metadata(metadata_);
 }
 
+CameraMetadata &CameraMetadata::operator=(const CameraMetadata &other)
+{
+	if (this == &other)
+		return *this;
+
+	if (metadata_)
+		free_camera_metadata(metadata_);
+
+	metadata_ = clone_camera_metadata(other.get());
+	valid_ = metadata_ != nullptr;
+
+	return *this;
+}
+
+bool CameraMetadata::getEntry(uint32_t tag, camera_metadata_ro_entry_t *entry) const
+{
+	if (find_camera_metadata_ro_entry(metadata_, tag, entry))
+		return false;
+
+	return true;
+}
+
 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 9d047b1bb534..720b760d44da 100644
--- a/src/android/camera_metadata.h
+++ b/src/android/camera_metadata.h
@@ -15,9 +15,14 @@ class CameraMetadata
 {
 public:
 	CameraMetadata(size_t entryCapacity, size_t dataCapacity);
+	CameraMetadata(const camera_metadata_t *metadata);
+	CameraMetadata(const CameraMetadata &other);
 	~CameraMetadata();
 
+	CameraMetadata &operator=(const CameraMetadata &other);
+
 	bool isValid() const { return valid_; }
+	bool 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.29.2



More information about the libcamera-devel mailing list