[PATCH v2 6/6] libcamera: pipelines: Draw control delays from CameraSensor properties

Jacopo Mondi jacopo.mondi at ideasonboard.com
Fri Nov 8 16:41:54 CET 2024


Hi Dan

On Thu, Nov 07, 2024 at 10:25:08AM +0000, Daniel Scally wrote:
> Rather than hard coding default delays for control values in the
> pipeline handlers, pick up the ones defined in the CameraSensor
> properties.
>
> Signed-off-by: Daniel Scally <dan.scally at ideasonboard.com>
> ---
> Changes in v2:
>
> 	- Switched to use the new getSensorDelays() function
>
>  src/libcamera/pipeline/ipu3/ipu3.cpp     | 12 +++++-------
>  src/libcamera/pipeline/rkisp1/rkisp1.cpp | 13 ++++++-------
>  src/libcamera/pipeline/simple/simple.cpp |  8 ++++++--
>  3 files changed, 17 insertions(+), 16 deletions(-)
>
> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
> index 29d3c6c1..50f887c6 100644
> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp
> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
> @@ -1077,14 +1077,12 @@ int PipelineHandlerIPU3::registerCameras()
>  		if (ret)
>  			continue;
>
> -		/*
> -		 * \todo Read delay values from the sensor itself or from a
> -		 * a sensor database. For now use generic values taken from
> -		 * the Raspberry Pi and listed as 'generic values'.
> -		 */
> +		uint8_t exposureDelay, gainDelay, vblankDelay, hblankDelay;
> +		cio2->sensor()->getSensorDelays(exposureDelay, gainDelay,
> +						  vblankDelay, hblankDelay);

Wrong alignment

>  		std::unordered_map<uint32_t, DelayedControls::ControlParams> params = {
> -			{ V4L2_CID_ANALOGUE_GAIN, { 1, false } },
> -			{ V4L2_CID_EXPOSURE, { 2, false } },
> +			{ V4L2_CID_ANALOGUE_GAIN, { gainDelay, false } },
> +			{ V4L2_CID_EXPOSURE, { exposureDelay, false } },
>  		};
>
>  		data->delayedCtrls_ =
> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> index c7b0b392..a73cb6f2 100644
> --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> @@ -24,6 +24,7 @@
>  #include <libcamera/control_ids.h>
>  #include <libcamera/formats.h>
>  #include <libcamera/framebuffer.h>
> +#include <libcamera/property_ids.h>
>  #include <libcamera/request.h>
>  #include <libcamera/stream.h>
>  #include <libcamera/transform.h>
> @@ -1240,14 +1241,12 @@ int PipelineHandlerRkISP1::createCamera(MediaEntity *sensor)
>  	/* Initialize the camera properties. */
>  	data->properties_ = data->sensor_->properties();
>
> -	/*
> -	 * \todo Read delay values from the sensor itself or from a
> -	 * a sensor database. For now use generic values taken from
> -	 * the Raspberry Pi and listed as generic values.
> -	 */
> +	uint8_t exposureDelay, gainDelay, vblankDelay, hblankDelay;
> +	data->sensor_->getSensorDelays(exposureDelay, gainDelay, vblankDelay,
> +				       hblankDelay);
>  	std::unordered_map<uint32_t, DelayedControls::ControlParams> params = {
> -		{ V4L2_CID_ANALOGUE_GAIN, { 1, false } },
> -		{ V4L2_CID_EXPOSURE, { 2, false } },
> +		{ V4L2_CID_ANALOGUE_GAIN, { gainDelay, false } },
> +		{ V4L2_CID_EXPOSURE, { exposureDelay, false } },
>  	};
>
>  	data->delayedCtrls_ =
> diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
> index 3ddce71d..81dd9379 100644
> --- a/src/libcamera/pipeline/simple/simple.cpp
> +++ b/src/libcamera/pipeline/simple/simple.cpp
> @@ -26,6 +26,7 @@
>
>  #include <libcamera/camera.h>
>  #include <libcamera/control_ids.h>
> +#include <libcamera/property_ids.h>
>  #include <libcamera/request.h>
>  #include <libcamera/stream.h>
>
> @@ -1286,9 +1287,12 @@ int SimplePipelineHandler::configure(Camera *camera, CameraConfiguration *c)
>  	if (outputCfgs.empty())
>  		return 0;
>
> +	uint8_t exposureDelay, gainDelay, vblankDelay, hblankDelay;
> +	data->sensor_->getSensorDelays(exposureDelay, gainDelay, vblankDelay,
> +				       hblankDelay);
>  	std::unordered_map<uint32_t, DelayedControls::ControlParams> params = {
> -		{ V4L2_CID_ANALOGUE_GAIN, { 2, false } },
> -		{ V4L2_CID_EXPOSURE, { 2, false } },
> +		{ V4L2_CID_ANALOGUE_GAIN, { gainDelay, false } },
> +		{ V4L2_CID_EXPOSURE, { exposureDelay, false } },
>  	};
>  	data->delayedCtrls_ =
>  		std::make_unique<DelayedControls>(data->sensor_->device(),
> --
> 2.30.2
>


More information about the libcamera-devel mailing list