[libcamera-devel] [PATCH 1/2] pipeline: raspberrypi: Fix under-allocation of embedded data buffers

Naushir Patuck naush at raspberrypi.com
Wed Dec 1 10:02:52 CET 2021


Hi David,

Thank you for your patch.

On Tue, 30 Nov 2021 at 11:23, David Plowman <david.plowman at raspberrypi.com>
wrote:

> The code was reducing the number of raw stream buffers allocated when
> the application is providing some of its own. However, it was not
> taking account of the fact that the application cannot supply embedded
> data buffers, so it must always allocate a reasonable minimum number
> of these buffers (possibly more than the number of raw stream buffers)
> to prevent frame drops.
>
> Signed-off-by: David Plowman <david.plowman at raspberrypi.com>
>

Reviewed-by: Naushir Patuck <naush at raspberrypi.com>

---
>  .../pipeline/raspberrypi/raspberrypi.cpp      | 25 ++++++++++++-------
>  1 file changed, 16 insertions(+), 9 deletions(-)
>
> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> index e31fa3b2..045725dd 100644
> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp
> @@ -1248,18 +1248,25 @@ int PipelineHandlerRPi::prepareBuffers(Camera
> *camera)
>         /* Decide how many internal buffers to allocate. */
>         for (auto const stream : data->streams_) {
>                 unsigned int numBuffers;
> -
> -               if (stream == &data->unicam_[Unicam::Image] ||
> -                   stream == &data->unicam_[Unicam::Embedded]) {
> +               /*
> +                * For Unicam, allocate a minimum of 4 buffers as we want
> +                * to avoid any frame drops.
> +                */
> +               constexpr unsigned int minBuffers = 4;
> +               if (stream == &data->unicam_[Unicam::Image]) {
>                         /*
> -                        * For Unicam, allocate a minimum of 4 buffers as
> we want
> -                        * to avoid any frame drops. If an application has
> configured
> -                        * a RAW stream, allocate additional buffers to
> make up the
> -                        * minimum, but ensure we have at least 2 sets of
> internal
> -                        * buffers to use to minimise frame drops.
> +                        * If an application has configured a RAW stream,
> allocate
> +                        * additional buffers to make up the minimum, but
> ensure
> +                        * we have at least 2 sets of internal buffers to
> use to
> +                        * minimise frame drops.
>                          */
> -                       constexpr unsigned int minBuffers = 4;
>                         numBuffers = std::max<int>(2, minBuffers -
> numRawBuffers);
> +               } else if (stream == &data->unicam_[Unicam::Embedded]) {
> +                       /*
> +                        * Embedded data buffers are (currently) for
> internal use,
> +                        * so allocate the minimum required to avoid frame
> drops.
> +                        */
> +                       numBuffers = minBuffers;
>                 } else {
>                         /*
>                          * Since the ISP runs synchronous with the IPA and
> requests,
> --
> 2.30.2
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20211201/323f51f1/attachment-0001.htm>


More information about the libcamera-devel mailing list