[libcamera-devel] [PATCH v1 03/10] pipeline: raspberrypi: Split out ISP Output0 buffer allocation

David Plowman david.plowman at raspberrypi.com
Tue Nov 1 12:52:05 CET 2022


Hi Naush

Thanks for the patch!

On Fri, 14 Oct 2022 at 14:18, Naushir Patuck via libcamera-devel
<libcamera-devel at lists.libcamera.org> 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>

Thanks!
David

> ---
>  .../pipeline/raspberrypi/raspberrypi.cpp        | 17 +++++++++++++----
>  1 file changed, 13 insertions(+), 4 deletions(-)
>
> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> index 7d1e454cddcd..450029197b11 100644
> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> @@ -297,6 +297,7 @@ public:
>         struct Config {
>                 unsigned int minUnicamBuffers;
>                 unsigned int minTotalUnicamBuffers;
> +               unsigned int numOutput0Buffers;
>         };
>
>         Config config_;
> @@ -1401,6 +1402,7 @@ int PipelineHandlerRPi::configurePipelineHandler(RPiCameraData *data)
>         config = {
>                 .minUnicamBuffers = 2,
>                 .minTotalUnicamBuffers = 4,
> +               .numOutput0Buffers = 1,
>         };
>
>         return 0;
> @@ -1485,12 +1487,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);
> +               } 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;
>                 }
> --
> 2.25.1
>


More information about the libcamera-devel mailing list