[PATCH v3 17/17] libcamera: pipeline: rkisp1: Limit sensor size to max resolution

Paul Elder paul.elder at ideasonboard.com
Thu Dec 12 13:15:37 CET 2024


On Fri, Dec 06, 2024 at 11:13:39AM +0100, Stefan Klug wrote:
> In RkISPPath::validate() the sensor sizes are correctly filtered to the
> ones supported by the ISP. But later in RkISPPipeline::configure() the
> configured stream size is passed to sensor->getFormat() and the
> CameraSensor class chooses the best sensor format for the requested
> stream size. This can result in a sensor format that is too big for the
> ISP. Fix that by supplying the maximum resolution supported by the ISP
> to setFormat().
> 
> Fixes: 761545407c76 ("pipeline: rkisp1: Filter out sensor sizes not supported by the pipeline")
> Signed-off-by: Stefan Klug <stefan.klug at ideasonboard.com>

Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>

> ---
> Changes in v3:
> - Added this patch
> ---
>  src/libcamera/pipeline/rkisp1/rkisp1.cpp    | 3 ++-
>  src/libcamera/pipeline/rkisp1/rkisp1_path.h | 1 +
>  2 files changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> index 2baff6da7cb7..4dcc5a4fa6a1 100644
> --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp
> @@ -677,7 +677,8 @@ CameraConfiguration::Status RkISP1CameraConfiguration::validate()
>  			       [](const auto &value) { return value.second; });
>  	}
>  
> -	sensorFormat_ = sensor->getFormat(mbusCodes, maxSize);
> +	sensorFormat_ = sensor->getFormat(mbusCodes, maxSize,
> +					  mainPath->maxResolution());
>  
>  	if (sensorFormat_.size.isNull())
>  		sensorFormat_.size = sensor->resolution();
> diff --git a/src/libcamera/pipeline/rkisp1/rkisp1_path.h b/src/libcamera/pipeline/rkisp1/rkisp1_path.h
> index 45be8476616c..2a1ef0abe6d1 100644
> --- a/src/libcamera/pipeline/rkisp1/rkisp1_path.h
> +++ b/src/libcamera/pipeline/rkisp1/rkisp1_path.h
> @@ -62,6 +62,7 @@ public:
>  
>  	int queueBuffer(FrameBuffer *buffer) { return video_->queueBuffer(buffer); }
>  	Signal<FrameBuffer *> &bufferReady() { return video_->bufferReady; }
> +	const Size &maxResolution() const { return maxResolution_; }
>  
>  private:
>  	void populateFormats();
> -- 
> 2.43.0
> 


More information about the libcamera-devel mailing list