[{"id":30033,"web_url":"https://patchwork.libcamera.org/comment/30033/","msgid":"<mieylyts42nc7q33kbys4ozi5xtcaiia4ldlnbe4dqa6xi2qma@nhehzb63jwjb>","date":"2024-06-21T13:13:45","subject":"Re: [PATCH] libcamera: yaml_parser: Add support for float types","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/people/143/","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"content":"Hi Laurent\n\nOn Fri, Jun 21, 2024 at 03:03:18PM GMT, Laurent Pinchart wrote:\n> The YamlObject::get<T>() function template has a specialization for\n> double but not for float. When used in an IPA module, the issue is\n> caught at module load time only, when dynamic links are resolved,\n> causing errors such as\n>\n> Failed to open IPA module shared object: /usr/lib/libcamera/ipa_rkisp1.so: undefined symbol: _ZNK9libcamera10YamlObject6GetterIfE3getERK_\n>\n> Fix it by adding a float specialization. The alternative would be to use\n> double only in IPA modules, but the lack of enforcement at compile time\n> makes this dangerous.\n>\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n> Jacopo, I think this may fix the issue you've experienced. Could you\n> test the patch ?\n\nThank you! indeed it does!\n\nTested-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n\nThanks\n  j\n> ---\n>  include/libcamera/internal/yaml_parser.h | 1 +\n>  src/libcamera/yaml_parser.cpp            | 9 +++++++++\n>  2 files changed, 10 insertions(+)\n>\n> diff --git a/include/libcamera/internal/yaml_parser.h b/include/libcamera/internal/yaml_parser.h\n> index 06a41146ad01..e38a2df9ae1d 100644\n> --- a/include/libcamera/internal/yaml_parser.h\n> +++ b/include/libcamera/internal/yaml_parser.h\n> @@ -177,6 +177,7 @@ public:\n>  \ttemplate<typename T,\n>  \t\t std::enable_if_t<\n>  \t\t\t std::is_same_v<bool, T> ||\n> +\t\t\t std::is_same_v<float, T> ||\n>  \t\t\t std::is_same_v<double, T> ||\n>  \t\t\t std::is_same_v<int8_t, T> ||\n>  \t\t\t std::is_same_v<uint8_t, T> ||\n> diff --git a/src/libcamera/yaml_parser.cpp b/src/libcamera/yaml_parser.cpp\n> index 56670ba7a584..025006bcdcdd 100644\n> --- a/src/libcamera/yaml_parser.cpp\n> +++ b/src/libcamera/yaml_parser.cpp\n> @@ -278,6 +278,13 @@ YamlObject::Getter<uint32_t>::get(const YamlObject &obj) const\n>  \treturn value;\n>  }\n>\n> +template<>\n> +std::optional<float>\n> +YamlObject::Getter<float>::get(const YamlObject &obj) const\n> +{\n> +\treturn obj.get<double>();\n> +}\n> +\n>  template<>\n>  std::optional<double>\n>  YamlObject::Getter<double>::get(const YamlObject &obj) const\n> @@ -349,6 +356,7 @@ YamlObject::Getter<Size>::get(const YamlObject &obj) const\n>  template<typename T,\n>  \t std::enable_if_t<\n>  \t\t std::is_same_v<bool, T> ||\n> +\t\t std::is_same_v<float, T> ||\n>  \t\t std::is_same_v<double, T> ||\n>  \t\t std::is_same_v<int8_t, T> ||\n>  \t\t std::is_same_v<uint8_t, T> ||\n> @@ -377,6 +385,7 @@ std::optional<std::vector<T>> YamlObject::getList() const\n>  }\n>\n>  template std::optional<std::vector<bool>> YamlObject::getList<bool>() const;\n> +template std::optional<std::vector<float>> YamlObject::getList<float>() const;\n>  template std::optional<std::vector<double>> YamlObject::getList<double>() const;\n>  template std::optional<std::vector<int8_t>> YamlObject::getList<int8_t>() const;\n>  template std::optional<std::vector<uint8_t>> YamlObject::getList<uint8_t>() const;\n> --\n> Regards,\n>\n> Laurent Pinchart\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 ADB43BE175\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 21 Jun 2024 13:13:50 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A41CF654A9;\n\tFri, 21 Jun 2024 15:13:49 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 437C6654A2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 21 Jun 2024 15:13:48 +0200 (CEST)","from ideasonboard.com (unknown\n\t[IPv6:2001:b07:5d2e:52c9:cc1e:e404:491f:e6ea])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 579B38E1;\n\tFri, 21 Jun 2024 15:13:28 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"SRtISjWL\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1718975608;\n\tbh=oVZkU8UAc/ln1pGKL5CvInARCawZzl/TXyn9WdzjVbU=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=SRtISjWLaOWgKj+gBnXWvOjanAdhz9TNUZtbHTYrtw3MxYeAg2bbvb36X8znlhsvT\n\t99+pjmg2ZvcJyo9kMIfEDSGX19C0Uz8HO005xE0DuPcsqIKati3ECUU6Qo/YWC7Ca8\n\tiZGoCVzBMJfaKhbea5Ur9AIbp+S6vnxs7wJ3rBxg=","Date":"Fri, 21 Jun 2024 15:13:45 +0200","From":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org, \n\tJacopo Mondi <jacopo.mondi@ideasonboard.com>","Subject":"Re: [PATCH] libcamera: yaml_parser: Add support for float types","Message-ID":"<mieylyts42nc7q33kbys4ozi5xtcaiia4ldlnbe4dqa6xi2qma@nhehzb63jwjb>","References":"<20240621120318.25851-1-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20240621120318.25851-1-laurent.pinchart@ideasonboard.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":30038,"web_url":"https://patchwork.libcamera.org/comment/30038/","msgid":"<hnvruvssyydxjythcxlrpeb47mgns5baat2xft7du4ppc24kqj@wnholrb4rkjr>","date":"2024-06-21T14:52:38","subject":"Re: [PATCH] libcamera: yaml_parser: Add support for float types","submitter":{"id":184,"url":"https://patchwork.libcamera.org/api/people/184/","name":"Stefan Klug","email":"stefan.klug@ideasonboard.com"},"content":"Hi Laurent,\n\nOn Fri, Jun 21, 2024 at 03:03:18PM +0300, Laurent Pinchart wrote:\n> The YamlObject::get<T>() function template has a specialization for\n> double but not for float. When used in an IPA module, the issue is\n> caught at module load time only, when dynamic links are resolved,\n> causing errors such as\n> \n> Failed to open IPA module shared object: /usr/lib/libcamera/ipa_rkisp1.so: undefined symbol: _ZNK9libcamera10YamlObject6GetterIfE3getERK_\n> \n> Fix it by adding a float specialization. The alternative would be to use\n> double only in IPA modules, but the lack of enforcement at compile time\n> makes this dangerous.\n> \n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nReviewed-by: Stefan Klug <stefan.klug@ideasonboard.com> \n\nCheers,\nStefam\n\n> ---\n> Jacopo, I think this may fix the issue you've experienced. Could you\n> test the patch ?\n> ---\n>  include/libcamera/internal/yaml_parser.h | 1 +\n>  src/libcamera/yaml_parser.cpp            | 9 +++++++++\n>  2 files changed, 10 insertions(+)\n> \n> diff --git a/include/libcamera/internal/yaml_parser.h b/include/libcamera/internal/yaml_parser.h\n> index 06a41146ad01..e38a2df9ae1d 100644\n> --- a/include/libcamera/internal/yaml_parser.h\n> +++ b/include/libcamera/internal/yaml_parser.h\n> @@ -177,6 +177,7 @@ public:\n>  \ttemplate<typename T,\n>  \t\t std::enable_if_t<\n>  \t\t\t std::is_same_v<bool, T> ||\n> +\t\t\t std::is_same_v<float, T> ||\n>  \t\t\t std::is_same_v<double, T> ||\n>  \t\t\t std::is_same_v<int8_t, T> ||\n>  \t\t\t std::is_same_v<uint8_t, T> ||\n> diff --git a/src/libcamera/yaml_parser.cpp b/src/libcamera/yaml_parser.cpp\n> index 56670ba7a584..025006bcdcdd 100644\n> --- a/src/libcamera/yaml_parser.cpp\n> +++ b/src/libcamera/yaml_parser.cpp\n> @@ -278,6 +278,13 @@ YamlObject::Getter<uint32_t>::get(const YamlObject &obj) const\n>  \treturn value;\n>  }\n>  \n> +template<>\n> +std::optional<float>\n> +YamlObject::Getter<float>::get(const YamlObject &obj) const\n> +{\n> +\treturn obj.get<double>();\n> +}\n> +\n>  template<>\n>  std::optional<double>\n>  YamlObject::Getter<double>::get(const YamlObject &obj) const\n> @@ -349,6 +356,7 @@ YamlObject::Getter<Size>::get(const YamlObject &obj) const\n>  template<typename T,\n>  \t std::enable_if_t<\n>  \t\t std::is_same_v<bool, T> ||\n> +\t\t std::is_same_v<float, T> ||\n>  \t\t std::is_same_v<double, T> ||\n>  \t\t std::is_same_v<int8_t, T> ||\n>  \t\t std::is_same_v<uint8_t, T> ||\n> @@ -377,6 +385,7 @@ std::optional<std::vector<T>> YamlObject::getList() const\n>  }\n>  \n>  template std::optional<std::vector<bool>> YamlObject::getList<bool>() const;\n> +template std::optional<std::vector<float>> YamlObject::getList<float>() const;\n>  template std::optional<std::vector<double>> YamlObject::getList<double>() const;\n>  template std::optional<std::vector<int8_t>> YamlObject::getList<int8_t>() const;\n>  template std::optional<std::vector<uint8_t>> YamlObject::getList<uint8_t>() const;\n> -- \n> Regards,\n> \n> Laurent Pinchart\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 88111BD87C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 21 Jun 2024 14:52:44 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id B1B18654A3;\n\tFri, 21 Jun 2024 16:52:43 +0200 (CEST)","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 DF1EF654A2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 21 Jun 2024 16:52:41 +0200 (CEST)","from ideasonboard.com (unknown\n\t[IPv6:2a01:599:b1d:3188:353c:d420:5123:5ad8])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id DC15E524;\n\tFri, 21 Jun 2024 16:52:21 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"jDOEXoEL\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1718981542;\n\tbh=jbk0NTGdXhfQgmTqsYHkSE2OKGoZN8CGlI3hUPK+75Y=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=jDOEXoELPvIbeCxWpKz2gMVTxb0kotVIQcDs5/JITVfGLrKqwicjHCgnooOAvTm/g\n\tZFQDsKMEy0RuqGcla9k0UotcAdqG1fPoLV8s8cHHTY4eNJZXCqRyryRIIwaO2mbZ1W\n\trrsWwj9D2a4suTcqYzLLfpZDSTZNhOdzaMcOhpwo=","Date":"Fri, 21 Jun 2024 16:52:38 +0200","From":"Stefan Klug <stefan.klug@ideasonboard.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org, \n\tJacopo Mondi <jacopo.mondi@ideasonboard.com>","Subject":"Re: [PATCH] libcamera: yaml_parser: Add support for float types","Message-ID":"<hnvruvssyydxjythcxlrpeb47mgns5baat2xft7du4ppc24kqj@wnholrb4rkjr>","References":"<20240621120318.25851-1-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20240621120318.25851-1-laurent.pinchart@ideasonboard.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":30065,"web_url":"https://patchwork.libcamera.org/comment/30065/","msgid":"<171926611159.625657.13534807151391794819@ping.linuxembedded.co.uk>","date":"2024-06-24T21:55:11","subject":"Re: [PATCH] libcamera: yaml_parser: Add support for float types","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Laurent Pinchart (2024-06-21 13:03:18)\n> The YamlObject::get<T>() function template has a specialization for\n> double but not for float. When used in an IPA module, the issue is\n> caught at module load time only, when dynamic links are resolved,\n> causing errors such as\n> \n> Failed to open IPA module shared object: /usr/lib/libcamera/ipa_rkisp1.so: undefined symbol: _ZNK9libcamera10YamlObject6GetterIfE3getERK_\n> \n> Fix it by adding a float specialization. The alternative would be to use\n> double only in IPA modules, but the lack of enforcement at compile time\n> makes this dangerous.\n> \n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n> Jacopo, I think this may fix the issue you've experienced. Could you\n> test the patch ?\n> ---\n>  include/libcamera/internal/yaml_parser.h | 1 +\n>  src/libcamera/yaml_parser.cpp            | 9 +++++++++\n>  2 files changed, 10 insertions(+)\n> \n> diff --git a/include/libcamera/internal/yaml_parser.h b/include/libcamera/internal/yaml_parser.h\n> index 06a41146ad01..e38a2df9ae1d 100644\n> --- a/include/libcamera/internal/yaml_parser.h\n> +++ b/include/libcamera/internal/yaml_parser.h\n> @@ -177,6 +177,7 @@ public:\n>         template<typename T,\n>                  std::enable_if_t<\n>                          std::is_same_v<bool, T> ||\n> +                        std::is_same_v<float, T> ||\n>                          std::is_same_v<double, T> ||\n>                          std::is_same_v<int8_t, T> ||\n>                          std::is_same_v<uint8_t, T> ||\n> diff --git a/src/libcamera/yaml_parser.cpp b/src/libcamera/yaml_parser.cpp\n> index 56670ba7a584..025006bcdcdd 100644\n> --- a/src/libcamera/yaml_parser.cpp\n> +++ b/src/libcamera/yaml_parser.cpp\n> @@ -278,6 +278,13 @@ YamlObject::Getter<uint32_t>::get(const YamlObject &obj) const\n>         return value;\n>  }\n>  \n> +template<>\n> +std::optional<float>\n> +YamlObject::Getter<float>::get(const YamlObject &obj) const\n> +{\n> +       return obj.get<double>();\n\nI guess there's not a lot of distinction in parsing a value from Yaml as\neither a float or a double... and the return/template type will\ndetermine what the call site requires.\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n> +}\n> +\n>  template<>\n>  std::optional<double>\n>  YamlObject::Getter<double>::get(const YamlObject &obj) const\n> @@ -349,6 +356,7 @@ YamlObject::Getter<Size>::get(const YamlObject &obj) const\n>  template<typename T,\n>          std::enable_if_t<\n>                  std::is_same_v<bool, T> ||\n> +                std::is_same_v<float, T> ||\n>                  std::is_same_v<double, T> ||\n>                  std::is_same_v<int8_t, T> ||\n>                  std::is_same_v<uint8_t, T> ||\n> @@ -377,6 +385,7 @@ std::optional<std::vector<T>> YamlObject::getList() const\n>  }\n>  \n>  template std::optional<std::vector<bool>> YamlObject::getList<bool>() const;\n> +template std::optional<std::vector<float>> YamlObject::getList<float>() const;\n>  template std::optional<std::vector<double>> YamlObject::getList<double>() const;\n>  template std::optional<std::vector<int8_t>> YamlObject::getList<int8_t>() const;\n>  template std::optional<std::vector<uint8_t>> YamlObject::getList<uint8_t>() const;\n> -- \n> Regards,\n> \n> Laurent Pinchart\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 EA13EBD87C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 24 Jun 2024 21:55:19 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 09E3A654A4;\n\tMon, 24 Jun 2024 23:55:19 +0200 (CEST)","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 5E8C9654A1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 24 Jun 2024 23:55:15 +0200 (CEST)","from pendragon.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust6594.18-1.cable.virginm.net [86.31.185.195])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 1B3C61650;\n\tMon, 24 Jun 2024 23:54:53 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"Vilkwho1\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1719266093;\n\tbh=Yhnc2UDaw/37e8qjwutJBsXLOxzCj43kkj6m9p+HN9o=;\n\th=In-Reply-To:References:Subject:From:To:Date:From;\n\tb=Vilkwho1ATUtGTBeW2JBMnNUs7jdJnEL93QZVrydcFR5IHMxcCAOYrp1Z9Vd2chAV\n\tWc/OzQRThCdGD6LH5MmDOkU+grOFJWkcsHM6JFZ9cPfS6U+vyBxeRVG47U/7qwAade\n\tvZQN406dZy5ZFRPcc94ApJ9p5nNHASDUXHpXzIEw=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20240621120318.25851-1-laurent.pinchart@ideasonboard.com>","References":"<20240621120318.25851-1-laurent.pinchart@ideasonboard.com>","Subject":"Re: [PATCH] libcamera: yaml_parser: Add support for float types","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","To":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>,\n\tLaurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Date":"Mon, 24 Jun 2024 22:55:11 +0100","Message-ID":"<171926611159.625657.13534807151391794819@ping.linuxembedded.co.uk>","User-Agent":"alot/0.10","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>"}}]