[PATCH 2/7] libcamera: mali-c55: Enable usage of scaler
Kieran Bingham
kieran.bingham at ideasonboard.com
Thu Jun 13 21:25:43 CEST 2024
Quoting Daniel Scally (2024-06-13 16:59:44)
> From: Jacopo Mondi <jacopo.mondi at ideasonboard.com>
>
> The Mali C55 ISP has a resizing pipeline that allows to crop and scale
> images.
>
> So far the mali-c55 pipeline has only supported cropping without using
> the scaling functionalities.
>
> Now that the kernel has gained support for the scaling operations, make
> the libcamera pipeline use it by combining it with a first cropping step
> to align the input and output images FOV ratio, and then scale to the
> desired output size.
>
> Signed-off-by: Jacopo Mondi <jacopo.mondi at ideasonboard.com>
Missing SoB.
> ---
> src/libcamera/pipeline/mali-c55/mali-c55.cpp | 18 +++++++++++++++---
> 1 file changed, 15 insertions(+), 3 deletions(-)
>
> diff --git a/src/libcamera/pipeline/mali-c55/mali-c55.cpp b/src/libcamera/pipeline/mali-c55/mali-c55.cpp
> index 9442d17c..c4f1afbc 100644
> --- a/src/libcamera/pipeline/mali-c55/mali-c55.cpp
> +++ b/src/libcamera/pipeline/mali-c55/mali-c55.cpp
> @@ -715,16 +715,28 @@ int PipelineHandlerMaliC55::configureProcessedStream(MaliC55CameraData *data,
> if (ret)
> return ret;
>
> - /* \todo Configure the resizer crop/compose rectangles. */
> - Rectangle ispCrop = { 0, 0, config.size };
> + /*
> + * Compute the scaler-in to scaler-out ratio: first center-crop to align
> + * the FOV to the desired resolution, then scale to the desired size.
> + */
> + Size scalerIn = subdevFormat.size.boundedToAspectRatio(config.size);
> + int xCrop = (subdevFormat.size.width - scalerIn.width) / 2;
> + int yCrop = (subdevFormat.size.height - scalerIn.height) / 2;
> + Rectangle ispCrop = { xCrop, yCrop, scalerIn };
Don't we have geometry helpers to do centering like this?
> ret = pipe->resizer->setSelection(0, V4L2_SEL_TGT_CROP, &ispCrop);
> if (ret)
> return ret;
>
> - ret = pipe->resizer->setSelection(0, V4L2_SEL_TGT_COMPOSE, &ispCrop);
> + Rectangle ispCompose = { 0, 0, config.size };
> + ret = pipe->resizer->setSelection(0, V4L2_SEL_TGT_COMPOSE, &ispCompose);
> if (ret)
> return ret;
>
> + /*
> + * The source pad format size comes directly from the sink
> + * compose rectangle.
> + */
> + subdevFormat.size = ispCompose.size();
> subdevFormat.code = maliC55FmtToCode.find(config.pixelFormat)->second;
> return pipe->resizer->setFormat(1, &subdevFormat);
> }
> --
> 2.30.2
>
More information about the libcamera-devel
mailing list