[v4,11/22] libcamera: request: Store `MetadataList`
diff mbox series

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

Commit Message

Barnabás Pőcze Jan. 6, 2026, 4:57 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.

This new list is exposed as `metadata2`, and the old `ControlList` is
still present for now.

Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
---
 include/libcamera/internal/request.h |  5 +++++
 include/libcamera/request.h          |  5 +++++
 src/libcamera/request.cpp            | 11 ++++++++++-
 3 files changed, 20 insertions(+), 1 deletion(-)

Patch
diff mbox series

diff --git a/include/libcamera/internal/request.h b/include/libcamera/internal/request.h
index 693097ee9..3e10ae051 100644
--- a/include/libcamera/internal/request.h
+++ b/include/libcamera/internal/request.h
@@ -16,6 +16,7 @@ 
 #include <libcamera/base/event_notifier.h>
 #include <libcamera/base/timer.h>
 
+#include <libcamera/metadata_list.h>
 #include <libcamera/request.h>
 
 using namespace std::chrono_literals;
@@ -37,6 +38,9 @@  public:
 	bool hasPendingBuffers() const;
 
 	ControlList &metadata() { return metadata_; }
+#ifndef __DOXYGEN__
+	[[nodiscard]] MetadataList &metadata2() { return metadata2_; }
+#endif
 
 	bool completeBuffer(FrameBuffer *buffer);
 	void complete();
@@ -64,6 +68,7 @@  private:
 	std::map<FrameBuffer *, EventNotifier> notifiers_;
 	std::unique_ptr<Timer> timer_;
 	ControlList metadata_;
+	MetadataList metadata2_;
 };
 
 } /* namespace libcamera */
diff --git a/include/libcamera/request.h b/include/libcamera/request.h
index 290983f61..96755a655 100644
--- a/include/libcamera/request.h
+++ b/include/libcamera/request.h
@@ -24,6 +24,7 @@  namespace libcamera {
 class Camera;
 class CameraControlValidator;
 class FrameBuffer;
+class MetadataList;
 class Stream;
 
 class Request : public Extensible
@@ -51,6 +52,10 @@  public:
 
 	ControlList &controls() { return controls_; }
 	const ControlList &metadata() const;
+#ifndef __DOXYGEN__
+	[[nodiscard]] const MetadataList &metadata2() const;
+#endif
+
 	const BufferMap &buffers() const { return bufferMap_; }
 	int addBuffer(const Stream *stream, FrameBuffer *buffer,
 		      std::unique_ptr<Fence> &&fence = {});
diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp
index 57f1f060d..6d44c6749 100644
--- a/src/libcamera/request.cpp
+++ b/src/libcamera/request.cpp
@@ -57,7 +57,8 @@  LOG_DEFINE_CATEGORY(Request)
  * \todo Add a validator for metadata controls.
  */
 Request::Private::Private(Camera *camera)
-	: camera_(camera), cancelled_(false), metadata_(controls::controls)
+	: camera_(camera), cancelled_(false), metadata_(controls::controls),
+	  metadata2_(camera->metadata())
 {
 }
 
@@ -405,6 +406,7 @@  void Request::reuse(ReuseFlag flags)
 
 	controls_.clear();
 	_d()->metadata_.clear();
+	_d()->metadata2_.clear();
 }
 
 /**
@@ -432,6 +434,13 @@  const ControlList &Request::metadata() const
 	return _d()->metadata_;
 }
 
+#ifndef __DOXYGEN__
+const MetadataList &Request::metadata2() const
+{
+	return _d()->metadata2_;
+}
+#endif
+
 /**
  * \fn Request::buffers()
  * \brief Retrieve the request's streams to buffers map