[libcamera-devel] [PATCH 2/2] libcamera: pipeline: ipu3: Use new Size grownBy() and shrunkBy() helpers
Jacopo Mondi
jacopo at jmondi.org
Thu Oct 14 13:23:17 CEST 2021
Hi Laurent
On Wed, Oct 13, 2021 at 11:30:45AM +0300, Laurent Pinchart wrote:
> Hi Jacopo,
>
> On Wed, Oct 13, 2021 at 08:43:08AM +0200, Jacopo Mondi wrote:
> > 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've copied the style from further down in this file, I don't mind it
> either way.
>
> > (I'm honest, I found the previous version more immediate compared than
> > going through shrunk).
>
> We can skip this patch if you think it doesn't bring any readability
> improvement.
>
Nah, we're talking details
> > 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.
>
> Good question. For IPU3 in particular, I'm still not sure what we'll
> need once we complete the (mythical) rework of the ImgU configuration
> :-) I haven't checked the other pipeline handlers and IPAs yet, this
> series was a by-product of the review of your frame durations series
> where I noticed we were missing these helpers.
>
Sure, if we'll end up having to maintain the shrunks we'll reconsider
a new helper.
Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
I'll base my next frame duration series on top of these patches!
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