[libcamera-devel,1/7] android: camera_metadata: Add copy constructor and getEntry
diff mbox series

Message ID 20210121165305.367801-2-jacopo@jmondi.org
State Accepted
Headers show
Series
  • android: camera device and metadata improvements
Related show

Commit Message

Jacopo Mondi Jan. 21, 2021, 4:52 p.m. UTC
From: Paul Elder <paul.elder@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@jmondi.org>
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
---
 src/android/camera_metadata.cpp | 33 +++++++++++++++++++++++++++++++++
 src/android/camera_metadata.h   |  5 +++++
 2 files changed, 38 insertions(+)

Comments

Laurent Pinchart Jan. 21, 2021, 9:31 p.m. UTC | #1
Hi Jacopo,

Thank you for the patch.

On Thu, Jan 21, 2021 at 05:52:59PM +0100, Jacopo Mondi wrote:
> From: Paul Elder <paul.elder@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@jmondi.org>
> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> ---
>  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);
>
Paul Elder Jan. 22, 2021, 3:42 a.m. UTC | #2
Hi Jacopo,

On Thu, Jan 21, 2021 at 05:52:59PM +0100, Jacopo Mondi wrote:
> From: Paul Elder <paul.elder@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@jmondi.org>
> Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
> Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>

(Can I review a patch that's from me?)

Anyway for the minor fix that you applied,

Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>

> ---
>  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
>
Jacopo Mondi Jan. 22, 2021, 8:48 a.m. UTC | #3
Hi Paul,

On Fri, Jan 22, 2021 at 12:42:00PM +0900, paul.elder@ideasonboard.com wrote:
> Hi Jacopo,
>
> On Thu, Jan 21, 2021 at 05:52:59PM +0100, Jacopo Mondi wrote:
> > From: Paul Elder <paul.elder@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@jmondi.org>
> > Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
> > Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
>
> (Can I review a patch that's from me?)

Sure you can

>
> Anyway for the minor fix that you applied,

I'm sorry I just realized I took the liberty to edit your patch and
re-send it. I should have asked first.

>
> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>

Thanks
  j

>
> > ---
> >  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
> >

Patch
diff mbox series

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