[RFC,v1,11/23] libcamera: request: Store `MetadataList`
diff mbox series

Message ID 20250606164156.1442682-12-barnabas.pocze@ideasonboard.com
State New
Headers show
Series
  • libcamera: Add `MetadataList`
Related show

Commit Message

Barnabás Pőcze June 6, 2025, 4:41 p.m. UTC
Add a `MetadataList` to the `Request` object to store the metadata items
returned by the camera. The metadata list is initialized using the camera's
`MetadataListPlan` object, which is supposed to be filled by the pipeline
handlers.

Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
---
 include/libcamera/request.h | 5 +++++
 src/libcamera/request.cpp   | 2 ++
 2 files changed, 7 insertions(+)

Comments

Jacopo Mondi June 19, 2025, 11:12 a.m. UTC | #1
Hi Barnabás

On Fri, Jun 06, 2025 at 06:41:44PM +0200, Barnabás Pőcze wrote:
> Add a `MetadataList` to the `Request` object to store the metadata items
> returned by the camera. The metadata list is initialized using the camera's
> `MetadataListPlan` object, which is supposed to be filled by the pipeline
> handlers.
>
> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>

Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>

Thanks
  j

> ---
>  include/libcamera/request.h | 5 +++++
>  src/libcamera/request.cpp   | 2 ++
>  2 files changed, 7 insertions(+)
>
> diff --git a/include/libcamera/request.h b/include/libcamera/request.h
> index e214a9d13..171a40903 100644
> --- a/include/libcamera/request.h
> +++ b/include/libcamera/request.h
> @@ -18,6 +18,7 @@
>
>  #include <libcamera/controls.h>
>  #include <libcamera/fence.h>
> +#include <libcamera/metadata_list.h>
>
>  namespace libcamera {
>
> @@ -51,6 +52,9 @@ public:
>
>  	ControlList &controls() { return *controls_; }
>  	ControlList &metadata() { return *metadata_; }
> +#ifndef __DOXYGEN__
> +	[[nodiscard]] auto &metadata2() { return metadata2_; }
> +#endif
>  	const BufferMap &buffers() const { return bufferMap_; }
>  	int addBuffer(const Stream *stream, FrameBuffer *buffer,
>  		      std::unique_ptr<Fence> fence = nullptr);
> @@ -69,6 +73,7 @@ private:
>
>  	ControlList *controls_;
>  	ControlList *metadata_;
> +	MetadataList metadata2_;
>  	BufferMap bufferMap_;
>
>  	const uint64_t cookie_;
> diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp
> index 7f1e11e8f..17ca67d08 100644
> --- a/src/libcamera/request.cpp
> +++ b/src/libcamera/request.cpp
> @@ -354,6 +354,7 @@ void Request::Private::timeout()
>   */
>  Request::Request(Camera *camera, uint64_t cookie)
>  	: Extensible(std::make_unique<Private>(camera)),
> +	  metadata2_(camera->_d()->metadataPlan_),
>  	  cookie_(cookie), status_(RequestPending)
>  {
>  	controls_ = new ControlList(controls::controls,
> @@ -407,6 +408,7 @@ void Request::reuse(ReuseFlag flags)
>
>  	controls_->clear();
>  	metadata_->clear();
> +	metadata2_.clear();
>  }
>
>  /**
> --
> 2.49.0
>
Jacopo Mondi June 19, 2025, 2:15 p.m. UTC | #2
Sorry, one additional note

On Fri, Jun 06, 2025 at 06:41:44PM +0200, Barnabás Pőcze wrote:
> Add a `MetadataList` to the `Request` object to store the metadata items
> returned by the camera. The metadata list is initialized using the camera's
> `MetadataListPlan` object, which is supposed to be filled by the pipeline
> handlers.
>
> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
> ---
>  include/libcamera/request.h | 5 +++++
>  src/libcamera/request.cpp   | 2 ++
>  2 files changed, 7 insertions(+)
>
> diff --git a/include/libcamera/request.h b/include/libcamera/request.h
> index e214a9d13..171a40903 100644
> --- a/include/libcamera/request.h
> +++ b/include/libcamera/request.h
> @@ -18,6 +18,7 @@
>
>  #include <libcamera/controls.h>
>  #include <libcamera/fence.h>
> +#include <libcamera/metadata_list.h>
>
>  namespace libcamera {
>
> @@ -51,6 +52,9 @@ public:
>
>  	ControlList &controls() { return *controls_; }
>  	ControlList &metadata() { return *metadata_; }
> +#ifndef __DOXYGEN__
> +	[[nodiscard]] auto &metadata2() { return metadata2_; }

let's not use auto in public interfaces, what do you think ?

	[[nodiscard]] MetadataList &metadata2() { return metadata2_; }

gives me the type without having to look at the metadata2_
definition.

(my battle against 'auto' continues :)


> +#endif
>  	const BufferMap &buffers() const { return bufferMap_; }
>  	int addBuffer(const Stream *stream, FrameBuffer *buffer,
>  		      std::unique_ptr<Fence> fence = nullptr);
> @@ -69,6 +73,7 @@ private:
>
>  	ControlList *controls_;
>  	ControlList *metadata_;
> +	MetadataList metadata2_;
>  	BufferMap bufferMap_;
>
>  	const uint64_t cookie_;
> diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp
> index 7f1e11e8f..17ca67d08 100644
> --- a/src/libcamera/request.cpp
> +++ b/src/libcamera/request.cpp
> @@ -354,6 +354,7 @@ void Request::Private::timeout()
>   */
>  Request::Request(Camera *camera, uint64_t cookie)
>  	: Extensible(std::make_unique<Private>(camera)),
> +	  metadata2_(camera->_d()->metadataPlan_),
>  	  cookie_(cookie), status_(RequestPending)
>  {
>  	controls_ = new ControlList(controls::controls,
> @@ -407,6 +408,7 @@ void Request::reuse(ReuseFlag flags)
>
>  	controls_->clear();
>  	metadata_->clear();
> +	metadata2_.clear();
>  }
>
>  /**
> --
> 2.49.0
>

Patch
diff mbox series

diff --git a/include/libcamera/request.h b/include/libcamera/request.h
index e214a9d13..171a40903 100644
--- a/include/libcamera/request.h
+++ b/include/libcamera/request.h
@@ -18,6 +18,7 @@ 
 
 #include <libcamera/controls.h>
 #include <libcamera/fence.h>
+#include <libcamera/metadata_list.h>
 
 namespace libcamera {
 
@@ -51,6 +52,9 @@  public:
 
 	ControlList &controls() { return *controls_; }
 	ControlList &metadata() { return *metadata_; }
+#ifndef __DOXYGEN__
+	[[nodiscard]] auto &metadata2() { return metadata2_; }
+#endif
 	const BufferMap &buffers() const { return bufferMap_; }
 	int addBuffer(const Stream *stream, FrameBuffer *buffer,
 		      std::unique_ptr<Fence> fence = nullptr);
@@ -69,6 +73,7 @@  private:
 
 	ControlList *controls_;
 	ControlList *metadata_;
+	MetadataList metadata2_;
 	BufferMap bufferMap_;
 
 	const uint64_t cookie_;
diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp
index 7f1e11e8f..17ca67d08 100644
--- a/src/libcamera/request.cpp
+++ b/src/libcamera/request.cpp
@@ -354,6 +354,7 @@  void Request::Private::timeout()
  */
 Request::Request(Camera *camera, uint64_t cookie)
 	: Extensible(std::make_unique<Private>(camera)),
+	  metadata2_(camera->_d()->metadataPlan_),
 	  cookie_(cookie), status_(RequestPending)
 {
 	controls_ = new ControlList(controls::controls,
@@ -407,6 +408,7 @@  void Request::reuse(ReuseFlag flags)
 
 	controls_->clear();
 	metadata_->clear();
+	metadata2_.clear();
 }
 
 /**