[{"id":21451,"web_url":"https://patchwork.libcamera.org/comment/21451/","msgid":"<163827491708.3059017.13058782523714141584@Monstersaurus>","date":"2021-11-30T12:21:57","subject":"Re: [libcamera-devel] [PATCH 1/2] pipeline: raspberrypi: Fix\n\tunder-allocation of embedded data buffers","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting David Plowman (2021-11-30 11:22:58)\n> The code was reducing the number of raw stream buffers allocated when\n> the application is providing some of its own. However, it was not\n> taking account of the fact that the application cannot supply embedded\n> data buffers, so it must always allocate a reasonable minimum number\n> of these buffers (possibly more than the number of raw stream buffers)\n> to prevent frame drops.\n> \n> Signed-off-by: David Plowman <david.plowman@raspberrypi.com>\n> ---\n>  .../pipeline/raspberrypi/raspberrypi.cpp      | 25 ++++++++++++-------\n>  1 file changed, 16 insertions(+), 9 deletions(-)\n> \n> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> index e31fa3b2..045725dd 100644\n> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> @@ -1248,18 +1248,25 @@ int PipelineHandlerRPi::prepareBuffers(Camera *camera)\n>         /* Decide how many internal buffers to allocate. */\n>         for (auto const stream : data->streams_) {\n>                 unsigned int numBuffers;\n> -\n> -               if (stream == &data->unicam_[Unicam::Image] ||\n> -                   stream == &data->unicam_[Unicam::Embedded]) {\n> +               /*\n> +                * For Unicam, allocate a minimum of 4 buffers as we want\n> +                * to avoid any frame drops.\n> +                */\n> +               constexpr unsigned int minBuffers = 4;\n> +               if (stream == &data->unicam_[Unicam::Image]) {\n>                         /*\n> -                        * For Unicam, allocate a minimum of 4 buffers as we want\n> -                        * to avoid any frame drops. If an application has configured\n> -                        * a RAW stream, allocate additional buffers to make up the\n> -                        * minimum, but ensure we have at least 2 sets of internal\n> -                        * buffers to use to minimise frame drops.\n> +                        * If an application has configured a RAW stream, allocate\n> +                        * additional buffers to make up the minimum, but ensure\n> +                        * we have at least 2 sets of internal buffers to use to\n> +                        * minimise frame drops.\n>                          */\n> -                       constexpr unsigned int minBuffers = 4;\n>                         numBuffers = std::max<int>(2, minBuffers - numRawBuffers);\n> +               } else if (stream == &data->unicam_[Unicam::Embedded]) {\n> +                       /*\n> +                        * Embedded data buffers are (currently) for internal use,\n> +                        * so allocate the minimum required to avoid frame drops.\n> +                        */\n> +                       numBuffers = minBuffers;\n\nOuch, yes I see how this would have bitten.\n\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n>                 } else {\n>                         /*\n>                          * Since the ISP runs synchronous with the IPA and requests,\n> -- \n> 2.30.2\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 0D188BDB13\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 30 Nov 2021 12:22:03 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 45F44605C4;\n\tTue, 30 Nov 2021 13:22:02 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 6460760587\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 30 Nov 2021 13:22:00 +0100 (CET)","from pendragon.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 02B6E8F0;\n\tTue, 30 Nov 2021 13:21:59 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"bFOR42/d\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1638274920;\n\tbh=FMVGfqatAaM2KPF0FdrGB8vTpb3aG56ujW2Lu3mKUqY=;\n\th=In-Reply-To:References:Subject:From:To:Date:From;\n\tb=bFOR42/dWl0QiegFY0FEq4ktZnoyCLrZRHdmGSGVD2bo5ZkxlW3BIItIOqcCqm4wv\n\tvJfaK9+7WvEn0/ETw0eMT1lKanKyBoJQzf6sSA8dGwxn8J0nn0FDzzG6xXCTVGOPEK\n\tMdYHy+bd7jnEq9rx8rtK3Dui9cxNkEiExFxSBXF0=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20211130112259.18723-2-david.plowman@raspberrypi.com>","References":"<20211130112259.18723-1-david.plowman@raspberrypi.com>\n\t<20211130112259.18723-2-david.plowman@raspberrypi.com>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","To":"David Plowman <david.plowman@raspberrypi.com>,\n\tlibcamera-devel@lists.libcamera.org","Date":"Tue, 30 Nov 2021 12:21:57 +0000","Message-ID":"<163827491708.3059017.13058782523714141584@Monstersaurus>","User-Agent":"alot/0.10","Subject":"Re: [libcamera-devel] [PATCH 1/2] pipeline: raspberrypi: Fix\n\tunder-allocation of embedded data buffers","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":21494,"web_url":"https://patchwork.libcamera.org/comment/21494/","msgid":"<CAEmqJProa3X63XBs-70_hiPnEGvgVZk09ajvi_=umnsfH4Tpgg@mail.gmail.com>","date":"2021-12-01T09:02:52","subject":"Re: [libcamera-devel] [PATCH 1/2] pipeline: raspberrypi: Fix\n\tunder-allocation of embedded data buffers","submitter":{"id":34,"url":"https://patchwork.libcamera.org/api/people/34/","name":"Naushir Patuck","email":"naush@raspberrypi.com"},"content":"Hi David,\n\nThank you for your patch.\n\nOn Tue, 30 Nov 2021 at 11:23, David Plowman <david.plowman@raspberrypi.com>\nwrote:\n\n> The code was reducing the number of raw stream buffers allocated when\n> the application is providing some of its own. However, it was not\n> taking account of the fact that the application cannot supply embedded\n> data buffers, so it must always allocate a reasonable minimum number\n> of these buffers (possibly more than the number of raw stream buffers)\n> to prevent frame drops.\n>\n> Signed-off-by: David Plowman <david.plowman@raspberrypi.com>\n>\n\nReviewed-by: Naushir Patuck <naush@raspberrypi.com>\n\n---\n>  .../pipeline/raspberrypi/raspberrypi.cpp      | 25 ++++++++++++-------\n>  1 file changed, 16 insertions(+), 9 deletions(-)\n>\n> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> index e31fa3b2..045725dd 100644\n> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> @@ -1248,18 +1248,25 @@ int PipelineHandlerRPi::prepareBuffers(Camera\n> *camera)\n>         /* Decide how many internal buffers to allocate. */\n>         for (auto const stream : data->streams_) {\n>                 unsigned int numBuffers;\n> -\n> -               if (stream == &data->unicam_[Unicam::Image] ||\n> -                   stream == &data->unicam_[Unicam::Embedded]) {\n> +               /*\n> +                * For Unicam, allocate a minimum of 4 buffers as we want\n> +                * to avoid any frame drops.\n> +                */\n> +               constexpr unsigned int minBuffers = 4;\n> +               if (stream == &data->unicam_[Unicam::Image]) {\n>                         /*\n> -                        * For Unicam, allocate a minimum of 4 buffers as\n> we want\n> -                        * to avoid any frame drops. If an application has\n> configured\n> -                        * a RAW stream, allocate additional buffers to\n> make up the\n> -                        * minimum, but ensure we have at least 2 sets of\n> internal\n> -                        * buffers to use to minimise frame drops.\n> +                        * If an application has configured a RAW stream,\n> allocate\n> +                        * additional buffers to make up the minimum, but\n> ensure\n> +                        * we have at least 2 sets of internal buffers to\n> use to\n> +                        * minimise frame drops.\n>                          */\n> -                       constexpr unsigned int minBuffers = 4;\n>                         numBuffers = std::max<int>(2, minBuffers -\n> numRawBuffers);\n> +               } else if (stream == &data->unicam_[Unicam::Embedded]) {\n> +                       /*\n> +                        * Embedded data buffers are (currently) for\n> internal use,\n> +                        * so allocate the minimum required to avoid frame\n> drops.\n> +                        */\n> +                       numBuffers = minBuffers;\n>                 } else {\n>                         /*\n>                          * Since the ISP runs synchronous with the IPA and\n> requests,\n> --\n> 2.30.2\n>\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id D36AFBF415\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  1 Dec 2021 09:03:10 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 1AEBB60723;\n\tWed,  1 Dec 2021 10:03:10 +0100 (CET)","from mail-lj1-x233.google.com (mail-lj1-x233.google.com\n\t[IPv6:2a00:1450:4864:20::233])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 1CEDF6011D\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  1 Dec 2021 10:03:09 +0100 (CET)","by mail-lj1-x233.google.com with SMTP id k2so46779541lji.4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 01 Dec 2021 01:03:09 -0800 (PST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=raspberrypi.com header.i=@raspberrypi.com\n\theader.b=\"F1taAJWu\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google;\n\th=mime-version:references:in-reply-to:from:date:message-id:subject:to\n\t:cc; bh=E84kfHBSO5wPQCo6RybA955be/fsqAI3C+1FkNxV5hw=;\n\tb=F1taAJWumySvuKVt+2TNykGuSBkxiCZL/25sSpyJC8LdFdAfgeUwMVwcZmRwlWplqg\n\tp4kT+Xfe/TFiX2sLrXQjP15uEOQfSr+iZDfFBNMFTUtaU+HE7Dz+6Yw37gx8U+HvyW8L\n\t8CILt+j05S2NWx/iayiE5vP2hjThN+R15df7HXnm2QV+UQi7gl8b0dU7n3H81LjieJAU\n\t9SF/GRMmFtklost17GWM/uzLMRl6SZE6IZkmS+ZBmuEvy9Rjj6TahnoqxVi+CBkaU8lr\n\tTkCyPS2KxyhrtGAmoJG6g1czK7YX+5yLKiQ8o2dxm+kDItlGmSFa5ixSdk/RpS1r/Os1\n\tR/kg==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112;\n\th=x-gm-message-state:mime-version:references:in-reply-to:from:date\n\t:message-id:subject:to:cc;\n\tbh=E84kfHBSO5wPQCo6RybA955be/fsqAI3C+1FkNxV5hw=;\n\tb=ehDCa5ahE32JTPn24nSd49aYB6cIliUe6E/4mB47Eplk7wPgw8wpYvjgGxFb6zyWeF\n\tvVCkCBgQlbEbNV82eZ9ghad6dlHa3zX49exqKOEb3cR0hKHKQ5l7gdhO+WCv0gtvZMEh\n\tsskLuTFNmQSkl4+ZglvtTZg1b+icYp+qOQoXFuuD1niO5OBA4g0aXcl+/dr6fQc+cI0R\n\tF80IzsTLUm3FZsD3aTs5MXajM5qlZEDGCFfSZC7B6RODnLkoHlBI9aGSdhsJBk6qKmfG\n\tTNDNsUfOYX3VPLAL6mFNMGBzeHw+sjKMF43bq8scFiNss5nlfSGtK6IiQnER5qfgiF9Z\n\txR+g==","X-Gm-Message-State":"AOAM533MYa7v5oS1bdX12hfxH9OC50Hj6OnvOQDzMCmNy9gTNs7OtMdD\n\tzF5anJgzmuFreOeP3ICDcCqwbJzTGfO4EFyG4d4u1DqJiUy5ag==","X-Google-Smtp-Source":"ABdhPJw7+SaB0hr9Q8ApVsmLXQGY4nFRwx0BgxH1DrIczTEHg+5DIRSALTyeBV030DHXhY6b7Il2AD4QRxkRcF9yzHk=","X-Received":"by 2002:a2e:908b:: with SMTP id\n\tl11mr4498026ljg.208.1638349388343; \n\tWed, 01 Dec 2021 01:03:08 -0800 (PST)","MIME-Version":"1.0","References":"<20211130112259.18723-1-david.plowman@raspberrypi.com>\n\t<20211130112259.18723-2-david.plowman@raspberrypi.com>","In-Reply-To":"<20211130112259.18723-2-david.plowman@raspberrypi.com>","From":"Naushir Patuck <naush@raspberrypi.com>","Date":"Wed, 1 Dec 2021 09:02:52 +0000","Message-ID":"<CAEmqJProa3X63XBs-70_hiPnEGvgVZk09ajvi_=umnsfH4Tpgg@mail.gmail.com>","To":"David Plowman <david.plowman@raspberrypi.com>","Content-Type":"multipart/alternative; boundary=\"0000000000004f7f3c05d211f128\"","Subject":"Re: [libcamera-devel] [PATCH 1/2] pipeline: raspberrypi: Fix\n\tunder-allocation of embedded data buffers","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":21526,"web_url":"https://patchwork.libcamera.org/comment/21526/","msgid":"<20211201140208.vsyrx4hgj6vvahti@uno.localdomain>","date":"2021-12-01T14:02:08","subject":"Re: [libcamera-devel] [PATCH 1/2] pipeline: raspberrypi: Fix\n\tunder-allocation of embedded data buffers","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi David\n\nOn Tue, Nov 30, 2021 at 11:22:58AM +0000, David Plowman wrote:\n> The code was reducing the number of raw stream buffers allocated when\n> the application is providing some of its own. However, it was not\n> taking account of the fact that the application cannot supply embedded\n> data buffers, so it must always allocate a reasonable minimum number\n> of these buffers (possibly more than the number of raw stream buffers)\n> to prevent frame drops.\n>\n> Signed-off-by: David Plowman <david.plowman@raspberrypi.com>\n\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n  j\n\n> ---\n>  .../pipeline/raspberrypi/raspberrypi.cpp      | 25 ++++++++++++-------\n>  1 file changed, 16 insertions(+), 9 deletions(-)\n>\n> diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> index e31fa3b2..045725dd 100644\n> --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp\n> @@ -1248,18 +1248,25 @@ int PipelineHandlerRPi::prepareBuffers(Camera *camera)\n>  \t/* Decide how many internal buffers to allocate. */\n>  \tfor (auto const stream : data->streams_) {\n>  \t\tunsigned int numBuffers;\n> -\n> -\t\tif (stream == &data->unicam_[Unicam::Image] ||\n> -\t\t    stream == &data->unicam_[Unicam::Embedded]) {\n> +\t\t/*\n> +\t\t * For Unicam, allocate a minimum of 4 buffers as we want\n> +\t\t * to avoid any frame drops.\n> +\t\t */\n> +\t\tconstexpr unsigned int minBuffers = 4;\n> +\t\tif (stream == &data->unicam_[Unicam::Image]) {\n>  \t\t\t/*\n> -\t\t\t * For Unicam, allocate a minimum of 4 buffers as we want\n> -\t\t\t * to avoid any frame drops. If an application has configured\n> -\t\t\t * a RAW stream, allocate additional buffers to make up the\n> -\t\t\t * minimum, but ensure we have at least 2 sets of internal\n> -\t\t\t * buffers to use to minimise frame drops.\n> +\t\t\t * If an application has configured a RAW stream, allocate\n> +\t\t\t * additional buffers to make up the minimum, but ensure\n> +\t\t\t * we have at least 2 sets of internal buffers to use to\n> +\t\t\t * minimise frame drops.\n>  \t\t\t */\n> -\t\t\tconstexpr unsigned int minBuffers = 4;\n>  \t\t\tnumBuffers = std::max<int>(2, minBuffers - numRawBuffers);\n> +\t\t} else if (stream == &data->unicam_[Unicam::Embedded]) {\n> +\t\t\t/*\n> +\t\t\t * Embedded data buffers are (currently) for internal use,\n> +\t\t\t * so allocate the minimum required to avoid frame drops.\n> +\t\t\t */\n> +\t\t\tnumBuffers = minBuffers;\n>  \t\t} else {\n>  \t\t\t/*\n>  \t\t\t * Since the ISP runs synchronous with the IPA and requests,\n> --\n> 2.30.2\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 07E39BDB13\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  1 Dec 2021 14:01:20 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 379016071A;\n\tWed,  1 Dec 2021 15:01:19 +0100 (CET)","from relay7-d.mail.gandi.net (relay7-d.mail.gandi.net\n\t[217.70.183.200])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id AEB7E6011A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  1 Dec 2021 15:01:17 +0100 (CET)","(Authenticated sender: jacopo@jmondi.org)\n\tby relay7-d.mail.gandi.net (Postfix) with ESMTPSA id E39AA20012;\n\tWed,  1 Dec 2021 14:01:16 +0000 (UTC)"],"Date":"Wed, 1 Dec 2021 15:02:08 +0100","From":"Jacopo Mondi <jacopo@jmondi.org>","To":"David Plowman <david.plowman@raspberrypi.com>","Message-ID":"<20211201140208.vsyrx4hgj6vvahti@uno.localdomain>","References":"<20211130112259.18723-1-david.plowman@raspberrypi.com>\n\t<20211130112259.18723-2-david.plowman@raspberrypi.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20211130112259.18723-2-david.plowman@raspberrypi.com>","Subject":"Re: [libcamera-devel] [PATCH 1/2] pipeline: raspberrypi: Fix\n\tunder-allocation of embedded data buffers","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]