[libcamera-devel] [PATCH v4 2/7] libcamera: pipeline: raspberrypi: Set sensor orientation during validate

Kieran Bingham kieran.bingham at ideasonboard.com
Fri Aug 28 17:01:54 CEST 2020


Hi David,

On 28/08/2020 15:41, David Plowman wrote:
> We set the sensor orientation (h and v flips) during validate as this
> will in general affect the Bayer order output by the sensor. Doing it
> here means that the correct raw format gets advertised in any raw
> streams that the application requested.

Eeep - I'm not sure if we could do this in validate().

Validation should not actually make any change to the hardware, but it
should check that the configuration can be applied correctly, and make
any changes that would be necessary to support a correct (and 'valid')
configuration to be applied through the ->configure()


> Signed-off-by: David Plowman <david.plowman at raspberrypi.com>
> ---
>  .../pipeline/raspberrypi/raspberrypi.cpp       | 18 +++++++++++-------
>  1 file changed, 11 insertions(+), 7 deletions(-)
> 
> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> index 42c9caa..7aace71 100644
> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> @@ -400,6 +400,17 @@ CameraConfiguration::Status RPiCameraConfiguration::validate()
>  	if (config_.empty())
>  		return Invalid;
>  
> +	/*
> +	 * Configure the H/V flip controls based on the sensor rotation. We do
> +	 * this here so that the sensor has the correct Bayer format that will
> +	 * get advertised in the configuration of any raw streams.
> +	 */
> +	ControlList ctrls(data_->unicam_[Unicam::Image].dev()->controls());
> +	int32_t rotation = data_->sensor_->properties().get(properties::Rotation);
> +	ctrls.set(V4L2_CID_HFLIP, static_cast<int32_t>(!!rotation));
> +	ctrls.set(V4L2_CID_VFLIP, static_cast<int32_t>(!!rotation));
> +	data_->unicam_[Unicam::Image].dev()->setControls(&ctrls);
> +
>  	unsigned int rawCount = 0, outCount = 0, count = 0, maxIndex = 0;
>  	std::pair<int, Size> outSize[2];
>  	Size maxSize;
> @@ -1164,13 +1175,6 @@ int RPiCameraData::configureIPA()
>  					      { V4L2_CID_EXPOSURE, result.data[1] } });
>  			sensorMetadata_ = result.data[2];
>  		}
> -
> -		/* Configure the H/V flip controls based on the sensor rotation. */
> -		ControlList ctrls(unicam_[Unicam::Image].dev()->controls());
> -		int32_t rotation = sensor_->properties().get(properties::Rotation);
> -		ctrls.set(V4L2_CID_HFLIP, static_cast<int32_t>(!!rotation));
> -		ctrls.set(V4L2_CID_VFLIP, static_cast<int32_t>(!!rotation));
> -		unicam_[Unicam::Image].dev()->setControls(&ctrls);
>  	}
>  
>  	if (result.operation & RPI_IPA_CONFIG_SENSOR) {
> 

-- 
Regards
--
Kieran


More information about the libcamera-devel mailing list