[libcamera-devel] [PATCH 2/2] libcamera: pipeline: ipu3: Use new Size grownBy() and shrunkBy() helpers
Jacopo Mondi
jacopo at jmondi.org
Wed Oct 13 08:43:08 CEST 2021
Hi Laurent,
On Wed, Oct 13, 2021 at 04:26:30AM +0300, Laurent Pinchart wrote:
> The Size class has new helpers that can simplify the code in the IPU3
> pipeline handler. Use them.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> ---
> src/libcamera/pipeline/ipu3/ipu3.cpp | 15 ++++++---------
> 1 file changed, 6 insertions(+), 9 deletions(-)
>
> diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
> index 92e869257e53..262b9a23703e 100644
> --- a/src/libcamera/pipeline/ipu3/ipu3.cpp
> +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
> @@ -438,11 +438,10 @@ CameraConfiguration *PipelineHandlerIPU3::generateConfiguration(Camera *camera,
> * \todo Clarify the alignment constraints as explained
> * in validate()
> */
> - size = sensorResolution.boundedTo(IMGU_OUTPUT_MAX_SIZE);
> - size.width = utils::alignDown(size.width - 1,
> - IMGU_OUTPUT_WIDTH_MARGIN);
> - size.height = utils::alignDown(size.height - 1,
> - IMGU_OUTPUT_HEIGHT_MARGIN);
> + size = sensorResolution.boundedTo(IMGU_OUTPUT_MAX_SIZE)
> + .shrunkBy({ 1, 1 })
> + .alignedDownTo(IMGU_OUTPUT_WIDTH_MARGIN,
> + IMGU_OUTPUT_HEIGHT_MARGIN);
Can you align the dots ?
size = sensorResolution.boundedTo(IMGU_OUTPUT_MAX_SIZE)
.shrunkBy({ 1, 1 })
.alignedDownTo(IMGU_OUTPUT_WIDTH_MARGIN,
IMGU_OUTPUT_HEIGHT_MARGIN);
Same below.
Or was it intentional ?
(I'm honest, I found the previous version more immediate compared than
going through shrunk).
Anyway, there's a repeating pattern of
{size.width - 1, size.height - 1}.alignDownTo(margins)
{size.width + 1, size.height + 1}.alignUpTo(margins)
Which makes me wonder if what we're looking for is actually a 'Align
to the next strictly minor/major value' function.
Thanks
j
> pixelFormat = formats::NV12;
> bufferCount = IPU3_BUFFER_COUNT;
> streamFormats[pixelFormat] = { { IMGU_OUTPUT_MIN_SIZE, size } };
> @@ -996,8 +995,7 @@ int PipelineHandlerIPU3::initControls(IPU3CameraData *data)
> */
>
> /* The strictly smaller size than the sensor resolution, aligned to margins. */
> - Size minSize = Size(sensor->resolution().width - 1,
> - sensor->resolution().height - 1)
> + Size minSize = sensor->resolution().shrunkBy({ 1, 1 })
> .alignedDownTo(IMGU_OUTPUT_WIDTH_MARGIN,
> IMGU_OUTPUT_HEIGHT_MARGIN);
>
> @@ -1005,8 +1003,7 @@ int PipelineHandlerIPU3::initControls(IPU3CameraData *data)
> * Either the smallest margin-aligned size larger than the viewfinder
> * size or the adjusted sensor resolution.
> */
> - minSize = Size(IPU3ViewfinderSize.width + 1,
> - IPU3ViewfinderSize.height + 1)
> + minSize = IPU3ViewfinderSize.grownBy({ 1, 1 })
> .alignedUpTo(IMGU_OUTPUT_WIDTH_MARGIN,
> IMGU_OUTPUT_HEIGHT_MARGIN)
> .boundedTo(minSize);
> --
> Regards,
>
> Laurent Pinchart
>
More information about the libcamera-devel
mailing list