[libcamera-devel] [PATCH 1/3] libcamera: pipeline_handler: Make cameraData() a const operation

Laurent Pinchart laurent.pinchart at ideasonboard.com
Fri Aug 14 11:35:32 CEST 2020


Hi Niklas,

Thank you for the patch.

On Thu, Aug 06, 2020 at 02:53:28PM +0200, Niklas Söderlund wrote:
> There is nothing blocking cameraData() from being a constant operation.
> The assert already enforces that a std::map::at() operation would always
> succeed. Switch to using at() and mark the method as a const operation.
> 
> Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> ---
>  include/libcamera/internal/pipeline_handler.h | 2 +-
>  src/libcamera/pipeline_handler.cpp            | 4 ++--
>  2 files changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/include/libcamera/internal/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h
> index 22e629a8401d1e4e..d5321ef56df358d0 100644
> --- a/include/libcamera/internal/pipeline_handler.h
> +++ b/include/libcamera/internal/pipeline_handler.h
> @@ -96,7 +96,7 @@ protected:
>  
>  	virtual int queueRequestDevice(Camera *camera, Request *request) = 0;
>  
> -	CameraData *cameraData(const Camera *camera);
> +	CameraData *cameraData(const Camera *camera) const;

CameraData holds part of the pipeline state. As such, returning a
non-const pointer from a const function, while not breaking compilation,
conceptually breaks const-correctness.

Would it be enough for your use case to have both

	CameraData *cameraData(const Camera *camera);
	const CameraData *cameraData(const Camera *camera) const;

?

>  
>  	CameraManager *manager_;
>  
> diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp
> index ccd45edc847b9e3f..bc9c1d4b09c5437d 100644
> --- a/src/libcamera/pipeline_handler.cpp
> +++ b/src/libcamera/pipeline_handler.cpp
> @@ -595,10 +595,10 @@ void PipelineHandler::disconnect()
>   * valid until the pipeline handler is destroyed. It shall not be deleted
>   * manually by the caller.
>   */
> -CameraData *PipelineHandler::cameraData(const Camera *camera)
> +CameraData *PipelineHandler::cameraData(const Camera *camera) const
>  {
>  	ASSERT(cameraData_.count(camera));
> -	return cameraData_[camera].get();
> +	return cameraData_.at(camera).get();
>  }
>  
>  /**

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list