[libcamera-devel] [PATCH] libcamera: camera_sensor: Do not initialise unsupported test patterns

Laurent Pinchart laurent.pinchart at ideasonboard.com
Tue Feb 22 07:11:31 CET 2022


Hi Kieran,

Thank you for the patch.

On Sat, Feb 12, 2022 at 11:34:07PM +0000, Kieran Bingham wrote:
> After the CameraSensor class has initialised properties, a default
> setting is applied to ensure that test pattern modes are disabled unless
> explicitly requested.
> 
> This does not currently check to see if test patterns are supported on
> the CameraSensor and the applyTestPatternMode call will report a failure
> if it attempts to set a mode when not supported.
> 
> Move the initialisation of the test pattern mode to the implementation
> of the control mappings to ensure that it is correctly reset at start
> up, while the code path will have already completed early if not
> supported.
> 
> Bug: https://github.com/raspberrypi/libcamera-apps/issues/249
> Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> ---
>  src/libcamera/camera_sensor.cpp | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp
> index 345b4a170d47..3a6a1a6bca77 100644
> --- a/src/libcamera/camera_sensor.cpp
> +++ b/src/libcamera/camera_sensor.cpp
> @@ -172,7 +172,7 @@ int CameraSensor::init()
>  	if (ret)
>  		return ret;
>  
> -	return applyTestPatternMode(controls::draft::TestPatternModeEnum::TestPatternModeOff);
> +	return 0;
>  }
>  
>  int CameraSensor::validateSensorDriver()
> @@ -372,6 +372,9 @@ void CameraSensor::initTestPatternModes()
>  
>  		testPatternModes_.push_back(it->second);
>  	}
> +
> +	/* Initialise the sensor with test patterns disabled. */
> +	applyTestPatternMode(controls::draft::TestPatternModeEnum::TestPatternModeOff);

Errors when applyting the test pattern are not propagated up anymore.

A different approach if you don't want to turn all void functions in the
call stack to return an int is to move the error message when
testPatternModes_.empty() from CameraSensor::applyTestPatternMode() to
CameraSensor::setTestPatternMode(). You will need to keep the check in
CameraSensor::applyTestPatternMode() in order to return 0, but
CameraSensor::setTestPatternMode() could return a proper error code.

>  }
>  
>  int CameraSensor::initProperties()

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list