[{"id":20970,"web_url":"https://patchwork.libcamera.org/comment/20970/","msgid":"<163707367417.3997548.6695013290046302116@Monstersaurus>","date":"2021-11-16T14:41:14","subject":"Re: [libcamera-devel] [PATCH] ipa: ipu3: agc: Remove the threshold\n\tfor the histogram calculation","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Jean-Michel Hautbois (2021-11-16 08:09:56)\n> Until f8f07f94 (ipa: ipu3: agc: Improve gain calculation, 2021-11-04)\n> the gain to apply on the exposure value was only using the histogram.\n> Now that the global brightness of the frame is estimated too, we don't\n> need to remove part of the saturated pixels from the equation anymore.\n> \n> Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>\n\nThis is still working quite well here. No perceived regression as far\nas I can tell, and it's still coping well with backlights and skylights.\n\nTested-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n> ---\n>  src/ipa/ipu3/algorithms/agc.cpp | 24 ++++++++----------------\n>  1 file changed, 8 insertions(+), 16 deletions(-)\n> \n> diff --git a/src/ipa/ipu3/algorithms/agc.cpp b/src/ipa/ipu3/algorithms/agc.cpp\n> index 4e424857..f67a79d3 100644\n> --- a/src/ipa/ipu3/algorithms/agc.cpp\n> +++ b/src/ipa/ipu3/algorithms/agc.cpp\n> @@ -58,12 +58,6 @@ static constexpr uint32_t knumHistogramBins = 256;\n>  /* Target value to reach for the top 2% of the histogram */\n>  static constexpr double kEvGainTarget = 0.5;\n>  \n> -/*\n> - * Maximum ratio of saturated pixels in a cell for the cell to be considered\n> - * non-saturated and counted by the AGC algorithm.\n> - */\n> -static constexpr uint32_t kMinCellsPerZoneRatio = 255 * 20 / 100;\n> -\n>  /* Number of frames to wait before calculating stats on minimum exposure */\n>  static constexpr uint32_t kNumStartupFrames = 10;\n>  \n> @@ -133,16 +127,14 @@ void Agc::measureBrightness(const ipu3_uapi_stats_3a *stats,\n>                                         &stats->awb_raw_buffer.meta_data[cellPosition]\n>                                 );\n>  \n> -                       if (cell->sat_ratio <= kMinCellsPerZoneRatio) {\n> -                               uint8_t gr = cell->Gr_avg;\n> -                               uint8_t gb = cell->Gb_avg;\n> -                               /*\n> -                                * Store the average green value to estimate the\n> -                                * brightness. Even the overexposed pixels are\n> -                                * taken into account.\n> -                                */\n> -                               hist[(gr + gb) / 2]++;\n> -                       }\n> +                       uint8_t gr = cell->Gr_avg;\n> +                       uint8_t gb = cell->Gb_avg;\n> +                       /*\n> +                        * Store the average green value to estimate the\n> +                        * brightness. Even the overexposed pixels are\n> +                        * taken into account.\n> +                        */\n> +                       hist[(gr + gb) / 2]++;\n>                 }\n>         }\n>  \n> -- \n> 2.32.0\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 04457BF415\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 16 Nov 2021 14:41:19 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 40EFA60376;\n\tTue, 16 Nov 2021 15:41:18 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id BE34760120\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 16 Nov 2021 15:41:16 +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 5BCF3547;\n\tTue, 16 Nov 2021 15:41:16 +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=\"j/+7AhF5\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1637073676;\n\tbh=QVDaVKkuFgD6KmeOulZC25+sYs2ZtUHl5yZZMRzqkLg=;\n\th=In-Reply-To:References:Subject:From:To:Date:From;\n\tb=j/+7AhF5oeCu22v1Z/hXx9ykdvvILqsbvVgTISJ5wasGabFqLdw9PYBeSN+LHfCRW\n\tcuvpjF7W9+RkHTde6RvZ+slGRDUd1lTxHSDyQso61UBQ9l9QTz6fudgrF2K+lvrYAH\n\t6Gk3vhKR+7axPWm7yOgECl60KBqSbcjL7fk5bdDc=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20211116080956.21373-1-jeanmichel.hautbois@ideasonboard.com>","References":"<20211116080956.21373-1-jeanmichel.hautbois@ideasonboard.com>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","To":"Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Date":"Tue, 16 Nov 2021 14:41:14 +0000","Message-ID":"<163707367417.3997548.6695013290046302116@Monstersaurus>","User-Agent":"alot/0.10","Subject":"Re: [libcamera-devel] [PATCH] ipa: ipu3: agc: Remove the threshold\n\tfor the histogram calculation","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":20971,"web_url":"https://patchwork.libcamera.org/comment/20971/","msgid":"<YZPHRo8B7HgkpOTT@pendragon.ideasonboard.com>","date":"2021-11-16T14:59:18","subject":"Re: [libcamera-devel] [PATCH] ipa: ipu3: agc: Remove the threshold\n\tfor the histogram calculation","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hello,\n\nOn Tue, Nov 16, 2021 at 02:41:14PM +0000, Kieran Bingham wrote:\n> Quoting Jean-Michel Hautbois (2021-11-16 08:09:56)\n> > Until f8f07f94 (ipa: ipu3: agc: Improve gain calculation, 2021-11-04)\n\ns/Until/Until commit/\n\nI'd drop the date, and expand the commit ID to 12 characters as usual.\n\n> > the gain to apply on the exposure value was only using the histogram.\n> > Now that the global brightness of the frame is estimated too, we don't\n> > need to remove part of the saturated pixels from the equation anymore.\n\nI'm not sure to understand why the above commit changed the situation,\nbut I also don't understand why we needed to take saturation into\naccount here in the first place, so the change looks good to me overall.\n\nCommit f8f07f94 also added a histogram empty check. Do we still need it\n?\n\n> > Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>\n> \n> This is still working quite well here. No perceived regression as far\n> as I can tell, and it's still coping well with backlights and skylights.\n> \n> Tested-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> \n> > ---\n> >  src/ipa/ipu3/algorithms/agc.cpp | 24 ++++++++----------------\n> >  1 file changed, 8 insertions(+), 16 deletions(-)\n> > \n> > diff --git a/src/ipa/ipu3/algorithms/agc.cpp b/src/ipa/ipu3/algorithms/agc.cpp\n> > index 4e424857..f67a79d3 100644\n> > --- a/src/ipa/ipu3/algorithms/agc.cpp\n> > +++ b/src/ipa/ipu3/algorithms/agc.cpp\n> > @@ -58,12 +58,6 @@ static constexpr uint32_t knumHistogramBins = 256;\n> >  /* Target value to reach for the top 2% of the histogram */\n> >  static constexpr double kEvGainTarget = 0.5;\n> >  \n> > -/*\n> > - * Maximum ratio of saturated pixels in a cell for the cell to be considered\n> > - * non-saturated and counted by the AGC algorithm.\n> > - */\n> > -static constexpr uint32_t kMinCellsPerZoneRatio = 255 * 20 / 100;\n> > -\n> >  /* Number of frames to wait before calculating stats on minimum exposure */\n> >  static constexpr uint32_t kNumStartupFrames = 10;\n> >  \n> > @@ -133,16 +127,14 @@ void Agc::measureBrightness(const ipu3_uapi_stats_3a *stats,\n> >                                         &stats->awb_raw_buffer.meta_data[cellPosition]\n> >                                 );\n> >  \n> > -                       if (cell->sat_ratio <= kMinCellsPerZoneRatio) {\n> > -                               uint8_t gr = cell->Gr_avg;\n> > -                               uint8_t gb = cell->Gb_avg;\n> > -                               /*\n> > -                                * Store the average green value to estimate the\n> > -                                * brightness. Even the overexposed pixels are\n> > -                                * taken into account.\n> > -                                */\n> > -                               hist[(gr + gb) / 2]++;\n> > -                       }\n> > +                       uint8_t gr = cell->Gr_avg;\n> > +                       uint8_t gb = cell->Gb_avg;\n> > +                       /*\n> > +                        * Store the average green value to estimate the\n> > +                        * brightness. Even the overexposed pixels are\n> > +                        * taken into account.\n> > +                        */\n> > +                       hist[(gr + gb) / 2]++;\n> >                 }\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 D7117BDB1C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 16 Nov 2021 14:59:42 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 8D27160376;\n\tTue, 16 Nov 2021 15:59:42 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 6F74E60120\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 16 Nov 2021 15:59:41 +0100 (CET)","from pendragon.ideasonboard.com\n\t(117.145-247-81.adsl-dyn.isp.belgacom.be [81.247.145.117])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 165C9547;\n\tTue, 16 Nov 2021 15:59:41 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"G+G4SGty\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1637074781;\n\tbh=w5qe6XZ/uTJGk7zBhJ+vJy5BNbQI/B7IrIgRWtV80Wg=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=G+G4SGtyLkB2KjJuqVXn0BB6Q5MlNMOofLETpwefTgUB2Fc9r3jOrsW60qQT6YNF+\n\tOm0fXnNTcqg3+xCdRPw2uxiOoXAeWrWafjktyme1NaNcxNf1kmqVx8Y/S9r8+hxRs5\n\t1IzgscFXbwUJeD6KeNTI9MXyvcMoO8mLguGPqmZY=","Date":"Tue, 16 Nov 2021 16:59:18 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<YZPHRo8B7HgkpOTT@pendragon.ideasonboard.com>","References":"<20211116080956.21373-1-jeanmichel.hautbois@ideasonboard.com>\n\t<163707367417.3997548.6695013290046302116@Monstersaurus>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<163707367417.3997548.6695013290046302116@Monstersaurus>","Subject":"Re: [libcamera-devel] [PATCH] ipa: ipu3: agc: Remove the threshold\n\tfor the histogram calculation","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>"}},{"id":20972,"web_url":"https://patchwork.libcamera.org/comment/20972/","msgid":"<2d667f18-b809-8faa-04c9-bdab02f356a1@ideasonboard.com>","date":"2021-11-16T15:20:13","subject":"Re: [libcamera-devel] [PATCH] ipa: ipu3: agc: Remove the threshold\n\tfor the histogram calculation","submitter":{"id":75,"url":"https://patchwork.libcamera.org/api/people/75/","name":"Jean-Michel Hautbois","email":"jeanmichel.hautbois@ideasonboard.com"},"content":"Hi Laurent,\n\nOn 16/11/2021 15:59, Laurent Pinchart wrote:\n> Hello,\n> \n> On Tue, Nov 16, 2021 at 02:41:14PM +0000, Kieran Bingham wrote:\n>> Quoting Jean-Michel Hautbois (2021-11-16 08:09:56)\n>>> Until f8f07f94 (ipa: ipu3: agc: Improve gain calculation, 2021-11-04)\n> \n> s/Until/Until commit/\n> \n> I'd drop the date, and expand the commit ID to 12 characters as usual.\n\nOK, this is what git log --pretty=reference returned, I will use \n--abbrev instead.\n\n> \n>>> the gain to apply on the exposure value was only using the histogram.\n>>> Now that the global brightness of the frame is estimated too, we don't\n>>> need to remove part of the saturated pixels from the equation anymore.\n> \n> I'm not sure to understand why the above commit changed the situation,\n> but I also don't understand why we needed to take saturation into\n> account here in the first place, so the change looks good to me overall.\n> \n> Commit f8f07f94 also added a histogram empty check. Do we still need it\n> ?\n\nI don't think we need it anymore... as I can't see why the histogram \ncould be empty now. I may remove it too in v2 then.\n\n> \n>>> Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>\n>>\n>> This is still working quite well here. No perceived regression as far\n>> as I can tell, and it's still coping well with backlights and skylights.\n>>\n>> Tested-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>>\n>>> ---\n>>>   src/ipa/ipu3/algorithms/agc.cpp | 24 ++++++++----------------\n>>>   1 file changed, 8 insertions(+), 16 deletions(-)\n>>>\n>>> diff --git a/src/ipa/ipu3/algorithms/agc.cpp b/src/ipa/ipu3/algorithms/agc.cpp\n>>> index 4e424857..f67a79d3 100644\n>>> --- a/src/ipa/ipu3/algorithms/agc.cpp\n>>> +++ b/src/ipa/ipu3/algorithms/agc.cpp\n>>> @@ -58,12 +58,6 @@ static constexpr uint32_t knumHistogramBins = 256;\n>>>   /* Target value to reach for the top 2% of the histogram */\n>>>   static constexpr double kEvGainTarget = 0.5;\n>>>   \n>>> -/*\n>>> - * Maximum ratio of saturated pixels in a cell for the cell to be considered\n>>> - * non-saturated and counted by the AGC algorithm.\n>>> - */\n>>> -static constexpr uint32_t kMinCellsPerZoneRatio = 255 * 20 / 100;\n>>> -\n>>>   /* Number of frames to wait before calculating stats on minimum exposure */\n>>>   static constexpr uint32_t kNumStartupFrames = 10;\n>>>   \n>>> @@ -133,16 +127,14 @@ void Agc::measureBrightness(const ipu3_uapi_stats_3a *stats,\n>>>                                          &stats->awb_raw_buffer.meta_data[cellPosition]\n>>>                                  );\n>>>   \n>>> -                       if (cell->sat_ratio <= kMinCellsPerZoneRatio) {\n>>> -                               uint8_t gr = cell->Gr_avg;\n>>> -                               uint8_t gb = cell->Gb_avg;\n>>> -                               /*\n>>> -                                * Store the average green value to estimate the\n>>> -                                * brightness. Even the overexposed pixels are\n>>> -                                * taken into account.\n>>> -                                */\n>>> -                               hist[(gr + gb) / 2]++;\n>>> -                       }\n>>> +                       uint8_t gr = cell->Gr_avg;\n>>> +                       uint8_t gb = cell->Gb_avg;\n>>> +                       /*\n>>> +                        * Store the average green value to estimate the\n>>> +                        * brightness. Even the overexposed pixels are\n>>> +                        * taken into account.\n>>> +                        */\n>>> +                       hist[(gr + gb) / 2]++;\n>>>                  }\n>>>          }\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 11B04BF415\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 16 Nov 2021 15:20:19 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 6C7476032C;\n\tTue, 16 Nov 2021 16:20:18 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 5F8B360120\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 16 Nov 2021 16:20:16 +0100 (CET)","from [IPV6:2a01:e0a:169:7140:c966:1d53:a935:70a0] (unknown\n\t[IPv6:2a01:e0a:169:7140:c966:1d53:a935:70a0])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id EABAB547;\n\tTue, 16 Nov 2021 16:20:15 +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=\"XMZa9L4l\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1637076016;\n\tbh=y73ST7VDLLNk27t+2D3ntm0vbgJStxqqifhYL+0McFA=;\n\th=Date:Subject:To:Cc:References:From:In-Reply-To:From;\n\tb=XMZa9L4lyWnjGagIEzasglzJuAY7Tyy99/qnK97xxC3McFF0TZ8TJZApsvw5etr8/\n\tp0QmXT1+EqCtKewFeNDJiYhU+wJGLEA8/r3dptIqp/0aYZLTDHe/Iom66VNcsIUkRH\n\tIF+ksRupaYjojg55YHH+9IKMW74TEe/5j3qJh3UU=","Message-ID":"<2d667f18-b809-8faa-04c9-bdab02f356a1@ideasonboard.com>","Date":"Tue, 16 Nov 2021 16:20:13 +0100","MIME-Version":"1.0","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101\n\tThunderbird/91.2.1","Content-Language":"en-US","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tKieran Bingham <kieran.bingham@ideasonboard.com>","References":"<20211116080956.21373-1-jeanmichel.hautbois@ideasonboard.com>\n\t<163707367417.3997548.6695013290046302116@Monstersaurus>\n\t<YZPHRo8B7HgkpOTT@pendragon.ideasonboard.com>","From":"Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>","In-Reply-To":"<YZPHRo8B7HgkpOTT@pendragon.ideasonboard.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"7bit","Subject":"Re: [libcamera-devel] [PATCH] ipa: ipu3: agc: Remove the threshold\n\tfor the histogram calculation","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>"}}]