android: camera_metadata: Add copy constructor and getEntry

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: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
Paul Elder 2021-01-21 19:15:42 +09:00 committed by Jacopo Mondi
parent afbf0ec626
commit 5e2596006b
2 changed files with 38 additions and 0 deletions

View file

@ -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_)

View file

@ -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);