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

Message ID 20251202-cam-control-override-v3-4-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 controls_ member variable is a pointer, for no specific reason.
Make it an instance and simplify the class destructor.

Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
---
 include/libcamera/request.h | 4 ++--
 src/libcamera/request.cpp   | 7 ++-----
 2 files changed, 4 insertions(+), 7 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 controls_ member variable is a pointer, for no specific reason.
> Make it an instance and simplify the class destructor.
> 
> Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
> ---

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


>   include/libcamera/request.h | 4 ++--
>   src/libcamera/request.cpp   | 7 ++-----
>   2 files changed, 4 insertions(+), 7 deletions(-)
> 
> diff --git a/include/libcamera/request.h b/include/libcamera/request.h
> index c9aeddb62680923dc3490a23dc6c3f70f70cc075..290983f613520f136f1d56100c665b0e3124ec02 100644
> --- a/include/libcamera/request.h
> +++ b/include/libcamera/request.h
> @@ -49,7 +49,7 @@ public:
>   
>   	void reuse(ReuseFlag flags = Default);
>   
> -	ControlList &controls() { return *controls_; }
> +	ControlList &controls() { return controls_; }
>   	const ControlList &metadata() const;
>   	const BufferMap &buffers() const { return bufferMap_; }
>   	int addBuffer(const Stream *stream, FrameBuffer *buffer,
> @@ -67,7 +67,7 @@ public:
>   private:
>   	LIBCAMERA_DISABLE_COPY(Request)
>   
> -	ControlList *controls_;
> +	ControlList controls_;
>   	BufferMap bufferMap_;
>   
>   	const uint64_t cookie_;
> diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp
> index 0d6c4a0ce9aec5f328c1f66cea43abb37c82544a..57f1f060d5b48bfde97132793e96ef5ce33e252f 100644
> --- a/src/libcamera/request.cpp
> +++ b/src/libcamera/request.cpp
> @@ -362,11 +362,9 @@ void Request::Private::timeout()
>    */
>   Request::Request(Camera *camera, uint64_t cookie)
>   	: Extensible(std::make_unique<Private>(camera)),
> +	  controls_(camera->controls(), camera->_d()->validator()),
>   	  cookie_(cookie), status_(RequestPending)
>   {
> -	controls_ = new ControlList(camera->controls(),
> -				    camera->_d()->validator());
> -
>   	LIBCAMERA_TRACEPOINT(request_construct, this);
>   
>   	LOG(Request, Debug) << "Created request - cookie: " << cookie_;
> @@ -375,7 +373,6 @@ Request::Request(Camera *camera, uint64_t cookie)
>   Request::~Request()
>   {
>   	LIBCAMERA_TRACEPOINT(request_destroy, this);
> -	delete controls_;
>   }
>   
>   /**
> @@ -406,7 +403,7 @@ void Request::reuse(ReuseFlag flags)
>   
>   	status_ = RequestPending;
>   
> -	controls_->clear();
> +	controls_.clear();
>   	_d()->metadata_.clear();
>   }
>   
>

Patch
diff mbox series

diff --git a/include/libcamera/request.h b/include/libcamera/request.h
index c9aeddb62680923dc3490a23dc6c3f70f70cc075..290983f613520f136f1d56100c665b0e3124ec02 100644
--- a/include/libcamera/request.h
+++ b/include/libcamera/request.h
@@ -49,7 +49,7 @@  public:
 
 	void reuse(ReuseFlag flags = Default);
 
-	ControlList &controls() { return *controls_; }
+	ControlList &controls() { return controls_; }
 	const ControlList &metadata() const;
 	const BufferMap &buffers() const { return bufferMap_; }
 	int addBuffer(const Stream *stream, FrameBuffer *buffer,
@@ -67,7 +67,7 @@  public:
 private:
 	LIBCAMERA_DISABLE_COPY(Request)
 
-	ControlList *controls_;
+	ControlList controls_;
 	BufferMap bufferMap_;
 
 	const uint64_t cookie_;
diff --git a/src/libcamera/request.cpp b/src/libcamera/request.cpp
index 0d6c4a0ce9aec5f328c1f66cea43abb37c82544a..57f1f060d5b48bfde97132793e96ef5ce33e252f 100644
--- a/src/libcamera/request.cpp
+++ b/src/libcamera/request.cpp
@@ -362,11 +362,9 @@  void Request::Private::timeout()
  */
 Request::Request(Camera *camera, uint64_t cookie)
 	: Extensible(std::make_unique<Private>(camera)),
+	  controls_(camera->controls(), camera->_d()->validator()),
 	  cookie_(cookie), status_(RequestPending)
 {
-	controls_ = new ControlList(camera->controls(),
-				    camera->_d()->validator());
-
 	LIBCAMERA_TRACEPOINT(request_construct, this);
 
 	LOG(Request, Debug) << "Created request - cookie: " << cookie_;
@@ -375,7 +373,6 @@  Request::Request(Camera *camera, uint64_t cookie)
 Request::~Request()
 {
 	LIBCAMERA_TRACEPOINT(request_destroy, this);
-	delete controls_;
 }
 
 /**
@@ -406,7 +403,7 @@  void Request::reuse(ReuseFlag flags)
 
 	status_ = RequestPending;
 
-	controls_->clear();
+	controls_.clear();
 	_d()->metadata_.clear();
 }