[v3,3/5] libcamera: request: Make metadata_ a class instance
diff mbox series

Message ID 20251202-cam-control-override-v3-3-eacab052798d@ideasonboard.com
State New
Headers show
Series
  • libcamera: ipc: ControlLists without valid idmap break IPC
Related show

Commit Message

Jacopo Mondi Dec. 2, 2025, 2:49 p.m. UTC
The metadata_ member variable is a pointer, for no specific reason.
Make it an instance and simplify the class destructor.

Suggested-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
---
 include/libcamera/internal/request.h |  4 ++--
 src/libcamera/request.cpp            | 13 +++++--------
 2 files changed, 7 insertions(+), 10 deletions(-)

Comments

Barnabás Pőcze Dec. 2, 2025, 6:24 p.m. UTC | #1
2025. 12. 02. 15:49 keltezéssel, Jacopo Mondi írta:
> The metadata_ member variable is a pointer, for no specific reason.
> Make it an instance and simplify the class destructor.
> 
> Suggested-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
> Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
> ---

Reviewed-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>


>   include/libcamera/internal/request.h |  4 ++--
>   src/libcamera/request.cpp            | 13 +++++--------
>   2 files changed, 7 insertions(+), 10 deletions(-)
> 
> diff --git a/include/libcamera/internal/request.h b/include/libcamera/internal/request.h
> index 643f67cabf5778f7515c0117d06d4e0a3fdec4f8..693097ee9a263be5b4217d5e5393ea93cc30a239 100644
> --- a/include/libcamera/internal/request.h
> +++ b/include/libcamera/internal/request.h
> @@ -36,7 +36,7 @@ public:
>   	Camera *camera() const { return camera_; }
>   	bool hasPendingBuffers() const;
>   
> -	ControlList &metadata() { return *metadata_; }
> +	ControlList &metadata() { return metadata_; }
>   
>   	bool completeBuffer(FrameBuffer *buffer);
>   	void complete();
> @@ -63,7 +63,7 @@ private:
>   	std::unordered_set<FrameBuffer *> pending_;
>   	std::map<FrameBuffer *, EventNotifier> notifiers_;
>   	std::unique_ptr<Timer> timer_;
> -	ControlList *metadata_;
> +	ControlList metadata_;
>   };
>   
>   } /* namespace libcamera */
> diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp
> index a661b2f5c8ae9ae2bcbab2dcdceeef7dcb8d0930..0d6c4a0ce9aec5f328c1f66cea43abb37c82544a 100644
> --- a/src/libcamera/request.cpp
> +++ b/src/libcamera/request.cpp
> @@ -53,20 +53,17 @@ LOG_DEFINE_CATEGORY(Request)
>   /**
>    * \brief Create a Request::Private
>    * \param camera The Camera that creates the request
> + *
> + * \todo Add a validator for metadata controls.
>    */
>   Request::Private::Private(Camera *camera)
> -	: camera_(camera), cancelled_(false)
> +	: camera_(camera), cancelled_(false), metadata_(controls::controls)
>   {
> -	/**
> -	 * \todo Add a validator for metadata controls.
> -	 */
> -	metadata_ = new ControlList(controls::controls);
>   }
>   
>   Request::Private::~Private()
>   {
>   	doCancelRequest();
> -	delete metadata_;
>   }
>   
>   /**
> @@ -410,7 +407,7 @@ void Request::reuse(ReuseFlag flags)
>   	status_ = RequestPending;
>   
>   	controls_->clear();
> -	_d()->metadata_->clear();
> +	_d()->metadata_.clear();
>   }
>   
>   /**
> @@ -435,7 +432,7 @@ void Request::reuse(ReuseFlag flags)
>    */
>   const ControlList &Request::metadata() const
>   {
> -	return *_d()->metadata_;
> +	return _d()->metadata_;
>   }
>   
>   /**
>

Patch
diff mbox series

diff --git a/include/libcamera/internal/request.h b/include/libcamera/internal/request.h
index 643f67cabf5778f7515c0117d06d4e0a3fdec4f8..693097ee9a263be5b4217d5e5393ea93cc30a239 100644
--- a/include/libcamera/internal/request.h
+++ b/include/libcamera/internal/request.h
@@ -36,7 +36,7 @@  public:
 	Camera *camera() const { return camera_; }
 	bool hasPendingBuffers() const;
 
-	ControlList &metadata() { return *metadata_; }
+	ControlList &metadata() { return metadata_; }
 
 	bool completeBuffer(FrameBuffer *buffer);
 	void complete();
@@ -63,7 +63,7 @@  private:
 	std::unordered_set<FrameBuffer *> pending_;
 	std::map<FrameBuffer *, EventNotifier> notifiers_;
 	std::unique_ptr<Timer> timer_;
-	ControlList *metadata_;
+	ControlList metadata_;
 };
 
 } /* namespace libcamera */
diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp
index a661b2f5c8ae9ae2bcbab2dcdceeef7dcb8d0930..0d6c4a0ce9aec5f328c1f66cea43abb37c82544a 100644
--- a/src/libcamera/request.cpp
+++ b/src/libcamera/request.cpp
@@ -53,20 +53,17 @@  LOG_DEFINE_CATEGORY(Request)
 /**
  * \brief Create a Request::Private
  * \param camera The Camera that creates the request
+ *
+ * \todo Add a validator for metadata controls.
  */
 Request::Private::Private(Camera *camera)
-	: camera_(camera), cancelled_(false)
+	: camera_(camera), cancelled_(false), metadata_(controls::controls)
 {
-	/**
-	 * \todo Add a validator for metadata controls.
-	 */
-	metadata_ = new ControlList(controls::controls);
 }
 
 Request::Private::~Private()
 {
 	doCancelRequest();
-	delete metadata_;
 }
 
 /**
@@ -410,7 +407,7 @@  void Request::reuse(ReuseFlag flags)
 	status_ = RequestPending;
 
 	controls_->clear();
-	_d()->metadata_->clear();
+	_d()->metadata_.clear();
 }
 
 /**
@@ -435,7 +432,7 @@  void Request::reuse(ReuseFlag flags)
  */
 const ControlList &Request::metadata() const
 {
-	return *_d()->metadata_;
+	return _d()->metadata_;
 }
 
 /**