[{"id":33182,"web_url":"https://patchwork.libcamera.org/comment/33182/","msgid":"<20250126225021.GE1133@pendragon.ideasonboard.com>","date":"2025-01-26T22:50:21","subject":"Re: [PATCH v4 1/9] libcamera: software_isp: Determine color\n\ttemperature","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Milan,\n\nThank you for the patch.\n\nOn Mon, Jan 13, 2025 at 02:50:58PM +0100, Milan Zamazal wrote:\n> The AWB algorithm has data to determine color temperature of the image.\n> Let's compute the temperature from it and store it into the context.\n> This piece of information is currently unused but it will be needed in a\n> followup patch introducing support for color correction matrix.\n> \n> Let's store the white balance related information under `awb' subsection\n> of the active state, as the hardware pipelines do.\n> \n> Signed-off-by: Milan Zamazal <mzamazal@redhat.com>\n> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> ---\n>  src/ipa/simple/algorithms/awb.cpp | 13 ++++++++++---\n>  src/ipa/simple/algorithms/lut.cpp |  2 +-\n>  src/ipa/simple/ipa_context.h      | 11 +++++++----\n>  3 files changed, 18 insertions(+), 8 deletions(-)\n> \n> diff --git a/src/ipa/simple/algorithms/awb.cpp b/src/ipa/simple/algorithms/awb.cpp\n> index 195de41d..f4fe1af6 100644\n> --- a/src/ipa/simple/algorithms/awb.cpp\n> +++ b/src/ipa/simple/algorithms/awb.cpp\n> @@ -12,6 +12,7 @@\n>  \n>  #include <libcamera/base/log.h>\n>  \n> +#include \"libipa/colours.h\"\n>  #include \"simple/ipa_context.h\"\n>  \n>  namespace libcamera {\n> @@ -23,7 +24,7 @@ namespace ipa::soft::algorithms {\n>  int Awb::configure(IPAContext &context,\n>  \t\t   [[maybe_unused]] const IPAConfigInfo &configInfo)\n>  {\n> -\tauto &gains = context.activeState.gains;\n> +\tauto &gains = context.activeState.awb.gains;\n>  \tgains.red = gains.green = gains.blue = 1.0;\n>  \n>  \treturn 0;\n> @@ -54,12 +55,18 @@ void Awb::process(IPAContext &context,\n>  \t * Calculate red and blue gains for AWB.\n>  \t * Clamp max gain at 4.0, this also avoids 0 division.\n>  \t */\n> -\tauto &gains = context.activeState.gains;\n> +\tauto &gains = context.activeState.awb.gains;\n>  \tgains.red = sumR <= sumG / 4 ? 4.0 : static_cast<double>(sumG) / sumR;\n>  \tgains.blue = sumB <= sumG / 4 ? 4.0 : static_cast<double>(sumG) / sumB;\n>  \t/* Green gain is fixed to 1.0 */\n>  \n> -\tLOG(IPASoftAwb, Debug) << \"gain R/B \" << gains.red << \"/\" << gains.blue;\n> +\tRGB<double> rgbGains{ { 1 / gains.red, 1 / gains.green, 1 / gains.blue } };\n> +\tuint32_t temperature = estimateCCT(rgbGains);\n> +\tcontext.activeState.awb.temperatureK = temperature;\n\n\tcontext.activeState.awb.temperatureK = estimateCCT(rgbGains);\n\n> +\n> +\tLOG(IPASoftAwb, Debug)\n> +\t\t<< \"gain R/B: \" << gains.red << \"/\" << gains.blue\n> +\t\t<< \"; temperature: \" << context.activeState.awb.temperatureK;\n>  }\n>  \n>  REGISTER_IPA_ALGORITHM(Awb, \"Awb\")\n> diff --git a/src/ipa/simple/algorithms/lut.cpp b/src/ipa/simple/algorithms/lut.cpp\n> index 0ba2391f..d75ff710 100644\n> --- a/src/ipa/simple/algorithms/lut.cpp\n> +++ b/src/ipa/simple/algorithms/lut.cpp\n> @@ -95,7 +95,7 @@ void Lut::prepare(IPAContext &context,\n>  \t    context.activeState.gamma.contrast != context.activeState.knobs.contrast)\n>  \t\tupdateGammaTable(context);\n>  \n> -\tauto &gains = context.activeState.gains;\n> +\tauto &gains = context.activeState.awb.gains;\n>  \tauto &gammaTable = context.activeState.gamma.gammaTable;\n>  \tconst unsigned int gammaTableSize = gammaTable.size();\n>  \n> diff --git a/src/ipa/simple/ipa_context.h b/src/ipa/simple/ipa_context.h\n> index 4af51306..607af45a 100644\n> --- a/src/ipa/simple/ipa_context.h\n> +++ b/src/ipa/simple/ipa_context.h\n> @@ -36,10 +36,13 @@ struct IPAActiveState {\n>  \t} blc;\n>  \n>  \tstruct {\n> -\t\tdouble red;\n> -\t\tdouble green;\n> -\t\tdouble blue;\n> -\t} gains;\n> +\t\tstruct {\n> +\t\t\tdouble red;\n> +\t\t\tdouble green;\n> +\t\t\tdouble blue;\n> +\t\t} gains;\n\nPlease add a patch on top (or at the bottom, up to you) to convert this\nto\n\n\t\tRGB<double> gains;\n\n(don't forget to include vector.h)\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> +\t\tunsigned int temperatureK;\n> +\t} awb;\n>  \n>  \tstatic constexpr unsigned int kGammaLookupSize = 1024;\n>  \tstruct {","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 9B303BEFBE\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSun, 26 Jan 2025 22:50:36 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 7477A6855D;\n\tSun, 26 Jan 2025 23:50:35 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id DDA7068506\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 26 Jan 2025 23:50:32 +0100 (CET)","from pendragon.ideasonboard.com (81-175-209-231.bb.dnainternet.fi\n\t[81.175.209.231])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 858D210D8;\n\tSun, 26 Jan 2025 23:49:26 +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=\"KLpJHZ46\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1737931766;\n\tbh=6KGn8M3+yMrauhaeFcPx7bLQm7iMHK9OIw6PQDaWKlE=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=KLpJHZ46JU6Cx3HHTOs9YA8golMgOsEpU7kSdqmlNqxU9y6PZbpohk5hZcIl54Rn3\n\twU5jMzdPD8cp7sE16dRWWkjuRY/BagPulwhAfkVFQie7lmeOhgJacg4XWVH+VGsGhO\n\tZH4QP7rR6DuPXmHDVaHf7c6iA0OLFkiD5a2gWAFo=","Date":"Mon, 27 Jan 2025 00:50:21 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Milan Zamazal <mzamazal@redhat.com>","Cc":"libcamera-devel@lists.libcamera.org,\n\tRobert Mader <robert.mader@collabora.com>,\n\tHans de Goede <hdegoede@redhat.com>,\n\tKieran Bingham <kieran.bingham@ideasonboard.com>","Subject":"Re: [PATCH v4 1/9] libcamera: software_isp: Determine color\n\ttemperature","Message-ID":"<20250126225021.GE1133@pendragon.ideasonboard.com>","References":"<20250113135108.13924-1-mzamazal@redhat.com>\n\t<20250113135108.13924-2-mzamazal@redhat.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20250113135108.13924-2-mzamazal@redhat.com>","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":33218,"web_url":"https://patchwork.libcamera.org/comment/33218/","msgid":"<85tt9je1c2.fsf@mzamazal-thinkpadp1gen3.tpbc.csb>","date":"2025-01-28T09:26:21","subject":"Re: [PATCH v4 1/9] libcamera: software_isp: Determine color\n\ttemperature","submitter":{"id":177,"url":"https://patchwork.libcamera.org/api/people/177/","name":"Milan Zamazal","email":"mzamazal@redhat.com"},"content":"Hi Laurent,\n\nthank you for review.\n\nLaurent Pinchart <laurent.pinchart@ideasonboard.com> writes:\n\n> Hi Milan,\n>\n> Thank you for the patch.\n>\n> On Mon, Jan 13, 2025 at 02:50:58PM +0100, Milan Zamazal wrote:\n>> The AWB algorithm has data to determine color temperature of the image.\n>> Let's compute the temperature from it and store it into the context.\n>> This piece of information is currently unused but it will be needed in a\n>> followup patch introducing support for color correction matrix.\n>> \n>> Let's store the white balance related information under `awb' subsection\n>> of the active state, as the hardware pipelines do.\n>> \n>> Signed-off-by: Milan Zamazal <mzamazal@redhat.com>\n>> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>> ---\n>>  src/ipa/simple/algorithms/awb.cpp | 13 ++++++++++---\n>>  src/ipa/simple/algorithms/lut.cpp |  2 +-\n>>  src/ipa/simple/ipa_context.h      | 11 +++++++----\n>>  3 files changed, 18 insertions(+), 8 deletions(-)\n>> \n>> diff --git a/src/ipa/simple/algorithms/awb.cpp b/src/ipa/simple/algorithms/awb.cpp\n>> index 195de41d..f4fe1af6 100644\n>> --- a/src/ipa/simple/algorithms/awb.cpp\n>> +++ b/src/ipa/simple/algorithms/awb.cpp\n>> @@ -12,6 +12,7 @@\n>>  \n>>  #include <libcamera/base/log.h>\n>>  \n>> +#include \"libipa/colours.h\"\n>>  #include \"simple/ipa_context.h\"\n>>  \n>>  namespace libcamera {\n>> @@ -23,7 +24,7 @@ namespace ipa::soft::algorithms {\n>>  int Awb::configure(IPAContext &context,\n>>  \t\t   [[maybe_unused]] const IPAConfigInfo &configInfo)\n>>  {\n>> -\tauto &gains = context.activeState.gains;\n>> +\tauto &gains = context.activeState.awb.gains;\n>>  \tgains.red = gains.green = gains.blue = 1.0;\n>>  \n>>  \treturn 0;\n>> @@ -54,12 +55,18 @@ void Awb::process(IPAContext &context,\n>>  \t * Calculate red and blue gains for AWB.\n>>  \t * Clamp max gain at 4.0, this also avoids 0 division.\n>>  \t */\n>> -\tauto &gains = context.activeState.gains;\n>> +\tauto &gains = context.activeState.awb.gains;\n>>  \tgains.red = sumR <= sumG / 4 ? 4.0 : static_cast<double>(sumG) / sumR;\n>>  \tgains.blue = sumB <= sumG / 4 ? 4.0 : static_cast<double>(sumG) / sumB;\n>>  \t/* Green gain is fixed to 1.0 */\n>>  \n>> -\tLOG(IPASoftAwb, Debug) << \"gain R/B \" << gains.red << \"/\" << gains.blue;\n>> +\tRGB<double> rgbGains{ { 1 / gains.red, 1 / gains.green, 1 / gains.blue } };\n>> +\tuint32_t temperature = estimateCCT(rgbGains);\n>> +\tcontext.activeState.awb.temperatureK = temperature;\n>\n> \tcontext.activeState.awb.temperatureK = estimateCCT(rgbGains);\n\nAck.\n\n>> +\n>> +\tLOG(IPASoftAwb, Debug)\n>> +\t\t<< \"gain R/B: \" << gains.red << \"/\" << gains.blue\n>> +\t\t<< \"; temperature: \" << context.activeState.awb.temperatureK;\n>>  }\n>>  \n>>  REGISTER_IPA_ALGORITHM(Awb, \"Awb\")\n>> diff --git a/src/ipa/simple/algorithms/lut.cpp b/src/ipa/simple/algorithms/lut.cpp\n>> index 0ba2391f..d75ff710 100644\n>> --- a/src/ipa/simple/algorithms/lut.cpp\n>> +++ b/src/ipa/simple/algorithms/lut.cpp\n>> @@ -95,7 +95,7 @@ void Lut::prepare(IPAContext &context,\n>>  \t    context.activeState.gamma.contrast != context.activeState.knobs.contrast)\n>>  \t\tupdateGammaTable(context);\n>>  \n>> -\tauto &gains = context.activeState.gains;\n>> +\tauto &gains = context.activeState.awb.gains;\n>>  \tauto &gammaTable = context.activeState.gamma.gammaTable;\n>>  \tconst unsigned int gammaTableSize = gammaTable.size();\n>>  \n>> diff --git a/src/ipa/simple/ipa_context.h b/src/ipa/simple/ipa_context.h\n>> index 4af51306..607af45a 100644\n>> --- a/src/ipa/simple/ipa_context.h\n>> +++ b/src/ipa/simple/ipa_context.h\n>> @@ -36,10 +36,13 @@ struct IPAActiveState {\n>>  \t} blc;\n>>  \n>>  \tstruct {\n>> -\t\tdouble red;\n>> -\t\tdouble green;\n>> -\t\tdouble blue;\n>> -\t} gains;\n>> +\t\tstruct {\n>> +\t\t\tdouble red;\n>> +\t\t\tdouble green;\n>> +\t\t\tdouble blue;\n>> +\t\t} gains;\n>\n> Please add a patch on top (or at the bottom, up to you) to convert this\n> to\n>\n> \t\tRGB<double> gains;\n>\n> (don't forget to include vector.h)\n\nI'll add it on top in v5.\n\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n>\n>> +\t\tunsigned int temperatureK;\n>> +\t} awb;\n>>  \n>>  \tstatic constexpr unsigned int kGammaLookupSize = 1024;\n>>  \tstruct {","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 954D1BDC71\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 28 Jan 2025 09:26:30 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 96D2E6855D;\n\tTue, 28 Jan 2025 10:26:29 +0100 (CET)","from us-smtp-delivery-124.mimecast.com\n\t(us-smtp-delivery-124.mimecast.com [170.10.133.124])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 4F1ED60353\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 28 Jan 2025 10:26:27 +0100 (CET)","from mail-wr1-f70.google.com (mail-wr1-f70.google.com\n\t[209.85.221.70]) by relay.mimecast.com with ESMTP with STARTTLS\n\t(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n\tus-mta-456-5nbbWPZaOzqtkYb3a-BsfQ-1; Tue, 28 Jan 2025 04:26:24 -0500","by mail-wr1-f70.google.com with SMTP id\n\tffacd0b85a97d-38634103b0dso2855548f8f.2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 28 Jan 2025 01:26:24 -0800 (PST)","from mzamazal-thinkpadp1gen3.tpbc.csb (nat-pool-brq-t.redhat.com.\n\t[213.175.37.10]) by smtp.gmail.com with ESMTPSA id\n\tffacd0b85a97d-38c2a1c3f5dsm13876509f8f.92.2025.01.28.01.26.22\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tTue, 28 Jan 2025 01:26:22 -0800 (PST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=redhat.com header.i=@redhat.com\n\theader.b=\"J5hhzexj\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1738056386;\n\th=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n\tto:to:cc:cc:mime-version:mime-version:content-type:content-type:\n\tin-reply-to:in-reply-to:references:references;\n\tbh=E0EKU1h/JoOyLk7eTbJqNUvk/AV06A/Hu8Fu6lOB/CQ=;\n\tb=J5hhzexj3ndua/yMfKGwpj6fEuBCmNX/VCB1ThtzFJKkyfQpM8iNkKapznftocm38WidB5\n\th6DCfU4Ua5MAzVQLeyq3f8xNyq/BnfxlzUTEU0ay2p754xjCagGzjEyM5+nf+WqbzgJqgv\n\tDfg+FZD5f/LUI2fB5hBUDbwhr1fUHaw=","X-MC-Unique":"5nbbWPZaOzqtkYb3a-BsfQ-1","X-Mimecast-MFC-AGG-ID":"5nbbWPZaOzqtkYb3a-BsfQ","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1738056383; x=1738661183;\n\th=mime-version:user-agent:message-id:date:references:in-reply-to\n\t:subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date\n\t:message-id:reply-to;\n\tbh=E0EKU1h/JoOyLk7eTbJqNUvk/AV06A/Hu8Fu6lOB/CQ=;\n\tb=Wy68+OEzDI+dne84BRBSnV7HANOA8DQe6k1RhlY+H/37moLlwBEhOgER+y+zFBMgQi\n\tyULsrIhvQLd+PdxWyar/PHIsJ0XIiz2in146fHXqrN6TBe3gcnsR76ngKBktlO/IH2nC\n\tTxqZjvHLKPC5Uv7mG4uunpcVJaA4kyCoPtaVelORGjNU5K6js6WRYtxv8QuaCV2oMTUn\n\tYxyETTTqgS6GKjLXuoAb4s0te2oMMKWvFbB3qFXpJShRI3aD3T9mhuKruXvtssVvvugI\n\trok08mIS3KJfvG7WB0mFNZKZAhs2PEPmBNNJ6YsQhTEuYMdaV0OhfnjRF7u+EzrdwxJj\n\tUSGA==","X-Gm-Message-State":"AOJu0YzkHcg96Dqg22SbEAA6KYancpbjK99e91beaaV0XCertbMPPPP2\n\tkBKRprH+M7tybvU5mEmTx8pZZ9OjruaUUa8a9zwc8xU6TQwAza8G9y6cjZdQthwHIWUJujJt727\n\tE06TguX1sCJl6KBH0cAaiNcxOB2xmtcIaEwmnPYAqAWZjHv2JQIjRgXvvJtmDjb4B6nisGxw=","X-Gm-Gg":"ASbGncvxjwpkiVWKBsAuHjDLYoT20hN+OtHTjNl9tokpjVc+hjFUQfAC08RW4O48WsW\n\tru88Q09jYpcVAJl4CuqZObKePXVHHgCpk3STfPub1yM9ceTVgjXKUdrTIWQhy4QUHc2UkEr57/q\n\tA+GmNXe5zDuBK408rqpaazVxEqt/HCvHGApduy4DESFiF+LjI+9C1havEivhzU5Vf3BMEAjRue4\n\t3SuAqx7UriwFSZWws31vopx05mvUpbGPeT12YZejXfxXGU6KXoPcloJTNUWC/F143We85tAAv8p\n\tzMPWY9d9IF66YoZ1jp9gOCsZjuwWujPqvIrhxGWLU2E7r7RuOTJIDzLJ","X-Received":["by 2002:adf:ffca:0:b0:38a:88e2:e6aa with SMTP id\n\tffacd0b85a97d-38bf56745bcmr31874964f8f.29.1738056383331; \n\tTue, 28 Jan 2025 01:26:23 -0800 (PST)","by 2002:adf:ffca:0:b0:38a:88e2:e6aa with SMTP id\n\tffacd0b85a97d-38bf56745bcmr31874944f8f.29.1738056382941; \n\tTue, 28 Jan 2025 01:26:22 -0800 (PST)"],"X-Google-Smtp-Source":"AGHT+IFvZBF3LlOUREcsp4BrEQSb1e96zjNW07R2CAUTIoKgIFy7yeuJtEqhMporMixIH95dFzBxUw==","From":"Milan Zamazal <mzamazal@redhat.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org,  Robert Mader\n\t<robert.mader@collabora.com>,  Hans de Goede <hdegoede@redhat.com>,\n\tKieran Bingham <kieran.bingham@ideasonboard.com>","Subject":"Re: [PATCH v4 1/9] libcamera: software_isp: Determine color\n\ttemperature","In-Reply-To":"<20250126225021.GE1133@pendragon.ideasonboard.com> (Laurent\n\tPinchart's message of \"Mon, 27 Jan 2025 00:50:21 +0200\")","References":"<20250113135108.13924-1-mzamazal@redhat.com>\n\t<20250113135108.13924-2-mzamazal@redhat.com>\n\t<20250126225021.GE1133@pendragon.ideasonboard.com>","Date":"Tue, 28 Jan 2025 10:26:21 +0100","Message-ID":"<85tt9je1c2.fsf@mzamazal-thinkpadp1gen3.tpbc.csb>","User-Agent":"Gnus/5.13 (Gnus v5.13)","MIME-Version":"1.0","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"4g21wMY_L9DlLFdZWAQNviZCQEg9Ttyp6xOGh0YGSVY_1738056383","X-Mimecast-Originator":"redhat.com","Content-Type":"text/plain","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>"}}]