[libcamera-devel] [PATCH v2 03/10] pipeline: raspberrypi: Split out ISP Output0 buffer allocation
Naushir Patuck
naush at raspberrypi.com
Fri Dec 2 14:05:54 CET 2022
Hi Laurent,
Thank you for your feedback!
On Fri, 2 Dec 2022 at 12:19, Laurent Pinchart <
laurent.pinchart at ideasonboard.com> wrote:
> Hi Naush,
>
> Thank you for the patch.
>
> On Tue, Nov 29, 2022 at 01:45:27PM +0000, Naushir Patuck via
> libcamera-devel wrote:
> > Add a new config parameter numOutput0Buffers specifying the number of
> internally
> > allocated ISP Output0 buffers. This parameter defaults to 1.
> >
> > Split out the buffer allocation logic so that the buffer count for ISP
> Output0
> > can be different from the ISP Output1 and Statistics streams.
> >
> > Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
> > Reviewed-by: David Plowman <david.plowman at raspberrypi.com>
> > ---
> > .../pipeline/raspberrypi/raspberrypi.cpp | 21 +++++++++++++++----
> > 1 file changed, 17 insertions(+), 4 deletions(-)
> >
> > diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> > index 4486d31ea78d..f2b695af2399 100644
> > --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> > +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> > @@ -305,6 +305,11 @@ public:
> > * the Unicam Image steram.
> > */
> > unsigned int minTotalUnicamBuffers;
> > + /*
> > + * The number of internal buffers allocated for the ISP
> Output0
> > + * stream.
>
> I'd comment here that the value can only be 0 or 1.
>
Ack.
>
> > + */
> > + unsigned int numOutput0Buffers;
> > };
> >
> > Config config_;
> > @@ -1418,6 +1423,7 @@ int
> PipelineHandlerRPi::configurePipelineHandler(RPiCameraData *data)
> > config = {
> > .minUnicamBuffers = 2,
> > .minTotalUnicamBuffers = 4,
> > + .numOutput0Buffers = 1,
> > };
> >
> > return 0;
> > @@ -1502,12 +1508,19 @@ int PipelineHandlerRPi::prepareBuffers(Camera
> *camera)
> > * so allocate the minimum required to avoid frame
> drops.
> > */
> > numBuffers = minBuffers;
> > - } else {
> > + } else if (stream == &data->isp_[Isp::Output0]) {
> > /*
> > * Since the ISP runs synchronous with the IPA and
> requests,
> > - * we only ever need one set of internal buffers.
> Any buffers
> > - * the application wants to hold onto will already
> be exported
> > - * through
> PipelineHandlerRPi::exportFrameBuffers().
> > + * we only ever need a maximum of one internal
> buffer. Any
> > + * buffers the application wants to hold onto will
> already
> > + * be exported through
> PipelineHandlerRPi::exportFrameBuffers().
> > + */
> > + numBuffers = std::min(1u,
> data->config_.numOutput0Buffers);
>
> Is it OK to call Stream::prepareBuffers() below if numBuffers is 0 ?
>
Yes it is. The count param tells the stream how many (if any) buffers to
allocate for internal use. Stream::prepareBuffers will call
V4L2VideoDevice::importBuffers
for externally/internally allocated buffers.
Regards,
Naush
>
> > + } else {
> > + /*
> > + * Same reasoning as above, we only ever need a
> maximum
> > + * of one internal buffer for Output1 (required
> for colour
> > + * denoise) and ISP statistics.
> > */
> > numBuffers = 1;
> > }
>
> --
> Regards,
>
> Laurent Pinchart
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20221202/449c529a/attachment.htm>
More information about the libcamera-devel
mailing list