[{"id":24516,"web_url":"https://patchwork.libcamera.org/comment/24516/","msgid":"<20220810085145.2h7gwfdxu322nvkf@uno.localdomain>","date":"2022-08-10T08:51:45","subject":"Re: [libcamera-devel] [PATCH 4/4] ipa: raspberrypi: Remove unneeded\n\tSpan casts","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Laurent,\n\nOn Wed, Aug 10, 2022 at 03:29:06AM +0300, Laurent Pinchart via libcamera-devel wrote:\n> Commit 09c1b081baa2 (\"libcamera: controls: Generate and use fixed-sized\n> Span types\") added explicit Span casts for fixed extent spans that were\n> required due to the ControlList::set() function that takes an\n> std::initializer_list not being able to infer a control size from\n> template arguments. This has now been fixed, so the casts are not needed\n> anymore. Drop them.\n>\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nThat's certainly nicer!!\n\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n  j\n\n> ---\n>  src/ipa/raspberrypi/raspberrypi.cpp | 19 +++++++++----------\n>  1 file changed, 9 insertions(+), 10 deletions(-)\n>\n> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp\n> index 69c73f8c780a..6befdd71433d 100644\n> --- a/src/ipa/raspberrypi/raspberrypi.cpp\n> +++ b/src/ipa/raspberrypi/raspberrypi.cpp\n> @@ -567,19 +567,18 @@ void IPARPi::reportMetadata()\n>\n>  \tAwbStatus *awbStatus = rpiMetadata_.getLocked<AwbStatus>(\"awb.status\");\n>  \tif (awbStatus) {\n> -\t\tlibcameraMetadata_.set(controls::ColourGains,\n> -\t\t\t\t       Span<const float, 2>({ static_cast<float>(awbStatus->gainR),\n> -\t\t\t\t\t\t\t      static_cast<float>(awbStatus->gainB) }));\n> +\t\tlibcameraMetadata_.set(controls::ColourGains, { static_cast<float>(awbStatus->gainR),\n> +\t\t\t\t\t\t\t\tstatic_cast<float>(awbStatus->gainB) });\n>  \t\tlibcameraMetadata_.set(controls::ColourTemperature, awbStatus->temperatureK);\n>  \t}\n>\n>  \tBlackLevelStatus *blackLevelStatus = rpiMetadata_.getLocked<BlackLevelStatus>(\"black_level.status\");\n>  \tif (blackLevelStatus)\n>  \t\tlibcameraMetadata_.set(controls::SensorBlackLevels,\n> -\t\t\t\t       Span<const int32_t, 4>({ static_cast<int32_t>(blackLevelStatus->blackLevelR),\n> -\t\t\t\t\t\t\t\tstatic_cast<int32_t>(blackLevelStatus->blackLevelG),\n> -\t\t\t\t\t\t\t\tstatic_cast<int32_t>(blackLevelStatus->blackLevelG),\n> -\t\t\t\t\t\t\t\tstatic_cast<int32_t>(blackLevelStatus->blackLevelB) }));\n> +\t\t\t\t       { static_cast<int32_t>(blackLevelStatus->blackLevelR),\n> +\t\t\t\t\t static_cast<int32_t>(blackLevelStatus->blackLevelG),\n> +\t\t\t\t\t static_cast<int32_t>(blackLevelStatus->blackLevelG),\n> +\t\t\t\t\t static_cast<int32_t>(blackLevelStatus->blackLevelB) });\n>\n>  \tFocusStatus *focusStatus = rpiMetadata_.getLocked<FocusStatus>(\"focus.status\");\n>  \tif (focusStatus && focusStatus->num == 12) {\n> @@ -884,7 +883,7 @@ void IPARPi::queueRequest(const ControlList &controls)\n>  \t\t\tif (gains[0] != 0.0f && gains[1] != 0.0f)\n>  \t\t\t\t/* A gain of 0.0f will switch back to auto mode. */\n>  \t\t\t\tlibcameraMetadata_.set(controls::ColourGains,\n> -\t\t\t\t\t\t       Span<const float, 2>({ gains[0], gains[1] }));\n> +\t\t\t\t\t\t       { gains[0], gains[1] });\n>  \t\t\tbreak;\n>  \t\t}\n>\n> @@ -1168,8 +1167,8 @@ void IPARPi::applyFrameDurations(Duration minFrameDuration, Duration maxFrameDur\n>\n>  \t/* Return the validated limits via metadata. */\n>  \tlibcameraMetadata_.set(controls::FrameDurationLimits,\n> -\t\t\t       Span<const int64_t, 2>({ static_cast<int64_t>(minFrameDuration_.get<std::micro>()),\n> -\t\t\t\t\t\t\tstatic_cast<int64_t>(maxFrameDuration_.get<std::micro>()) }));\n> +\t\t\t       { static_cast<int64_t>(minFrameDuration_.get<std::micro>()),\n> +\t\t\t\t static_cast<int64_t>(maxFrameDuration_.get<std::micro>()) });\n>\n>  \t/*\n>  \t * Calculate the maximum exposure time possible for the AGC to use.\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 9435AC3272\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 10 Aug 2022 08:51:49 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 50DCD61FAB;\n\tWed, 10 Aug 2022 10:51:49 +0200 (CEST)","from relay8-d.mail.gandi.net (relay8-d.mail.gandi.net\n\t[IPv6:2001:4b98:dc4:8::228])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id E858061FAB\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 10 Aug 2022 10:51:47 +0200 (CEST)","(Authenticated sender: jacopo@jmondi.org)\n\tby mail.gandi.net (Postfix) with ESMTPSA id 38D2D1BF207;\n\tWed, 10 Aug 2022 08:51:46 +0000 (UTC)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1660121509;\n\tbh=nEQ1TK3jZJrbK2lQdUPlrPrrkCRWOS0mK89i9nI+Z80=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=x1vZBpjWTv+RrytYqdjA3pCHcG/Ry2EKuixRHqhRdbTGdkivYln9TS6kzpc/yBBz7\n\td2reERQ1CspwNUH52VOvTH4nRNmBY+1cWvcEIUFGcpOIcUNb69ezdlNS/WOTnzmxuE\n\tbuKysHufj4YN3TcMH0GuzxAsu7XLZCU7y1BLHwX0Lrq16LFmhHFyY5VydR3K+RifCH\n\tnRmo2t7ua23alDlCdYGdbLFviS5hM9TJy6VKxcTMniR4DwNyzBtisuca87qEmARVS/\n\tzzHtfSg1paBy4pInd6mnNMxobcqZLhWKJlooEdv99DwKD1U2GhchXFWjtBZq7GtRGZ\n\tcLqHTCblP+++w==","Date":"Wed, 10 Aug 2022 10:51:45 +0200","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Message-ID":"<20220810085145.2h7gwfdxu322nvkf@uno.localdomain>","References":"<20220810002906.5406-1-laurent.pinchart@ideasonboard.com>\n\t<20220810002906.5406-5-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20220810002906.5406-5-laurent.pinchart@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH 4/4] ipa: raspberrypi: Remove unneeded\n\tSpan casts","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>","From":"Jacopo Mondi via libcamera-devel <libcamera-devel@lists.libcamera.org>","Reply-To":"Jacopo Mondi <jacopo@jmondi.org>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":24563,"web_url":"https://patchwork.libcamera.org/comment/24563/","msgid":"<92dcb90c-d155-d110-9c18-46f9cb84330d@gmx.de>","date":"2022-08-13T22:59:09","subject":"Re: [libcamera-devel] [PATCH 4/4] ipa: raspberrypi: Remove unneeded\n\tSpan casts","submitter":{"id":111,"url":"https://patchwork.libcamera.org/api/people/111/","name":"Christian Rauch","email":"Rauch.Christian@gmx.de"},"content":"Hi Laurent,\n\nI also like this simplification of the API.\n\nReviewed-by: Christian Rauch <Rauch.Christian@gmx.de>\n\n\nAm 10.08.22 um 02:29 schrieb Laurent Pinchart:\n> Commit 09c1b081baa2 (\"libcamera: controls: Generate and use fixed-sized\n> Span types\") added explicit Span casts for fixed extent spans that were\n> required due to the ControlList::set() function that takes an\n> std::initializer_list not being able to infer a control size from\n> template arguments. This has now been fixed, so the casts are not needed\n> anymore. Drop them.\n>\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n>  src/ipa/raspberrypi/raspberrypi.cpp | 19 +++++++++----------\n>  1 file changed, 9 insertions(+), 10 deletions(-)\n>\n> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp\n> index 69c73f8c780a..6befdd71433d 100644\n> --- a/src/ipa/raspberrypi/raspberrypi.cpp\n> +++ b/src/ipa/raspberrypi/raspberrypi.cpp\n> @@ -567,19 +567,18 @@ void IPARPi::reportMetadata()\n>\n>  \tAwbStatus *awbStatus = rpiMetadata_.getLocked<AwbStatus>(\"awb.status\");\n>  \tif (awbStatus) {\n> -\t\tlibcameraMetadata_.set(controls::ColourGains,\n> -\t\t\t\t       Span<const float, 2>({ static_cast<float>(awbStatus->gainR),\n> -\t\t\t\t\t\t\t      static_cast<float>(awbStatus->gainB) }));\n> +\t\tlibcameraMetadata_.set(controls::ColourGains, { static_cast<float>(awbStatus->gainR),\n> +\t\t\t\t\t\t\t\tstatic_cast<float>(awbStatus->gainB) });\n>  \t\tlibcameraMetadata_.set(controls::ColourTemperature, awbStatus->temperatureK);\n>  \t}\n>\n>  \tBlackLevelStatus *blackLevelStatus = rpiMetadata_.getLocked<BlackLevelStatus>(\"black_level.status\");\n>  \tif (blackLevelStatus)\n>  \t\tlibcameraMetadata_.set(controls::SensorBlackLevels,\n> -\t\t\t\t       Span<const int32_t, 4>({ static_cast<int32_t>(blackLevelStatus->blackLevelR),\n> -\t\t\t\t\t\t\t\tstatic_cast<int32_t>(blackLevelStatus->blackLevelG),\n> -\t\t\t\t\t\t\t\tstatic_cast<int32_t>(blackLevelStatus->blackLevelG),\n> -\t\t\t\t\t\t\t\tstatic_cast<int32_t>(blackLevelStatus->blackLevelB) }));\n> +\t\t\t\t       { static_cast<int32_t>(blackLevelStatus->blackLevelR),\n> +\t\t\t\t\t static_cast<int32_t>(blackLevelStatus->blackLevelG),\n> +\t\t\t\t\t static_cast<int32_t>(blackLevelStatus->blackLevelG),\n> +\t\t\t\t\t static_cast<int32_t>(blackLevelStatus->blackLevelB) });\n>\n>  \tFocusStatus *focusStatus = rpiMetadata_.getLocked<FocusStatus>(\"focus.status\");\n>  \tif (focusStatus && focusStatus->num == 12) {\n> @@ -884,7 +883,7 @@ void IPARPi::queueRequest(const ControlList &controls)\n>  \t\t\tif (gains[0] != 0.0f && gains[1] != 0.0f)\n>  \t\t\t\t/* A gain of 0.0f will switch back to auto mode. */\n>  \t\t\t\tlibcameraMetadata_.set(controls::ColourGains,\n> -\t\t\t\t\t\t       Span<const float, 2>({ gains[0], gains[1] }));\n> +\t\t\t\t\t\t       { gains[0], gains[1] });\n>  \t\t\tbreak;\n>  \t\t}\n>\n> @@ -1168,8 +1167,8 @@ void IPARPi::applyFrameDurations(Duration minFrameDuration, Duration maxFrameDur\n>\n>  \t/* Return the validated limits via metadata. */\n>  \tlibcameraMetadata_.set(controls::FrameDurationLimits,\n> -\t\t\t       Span<const int64_t, 2>({ static_cast<int64_t>(minFrameDuration_.get<std::micro>()),\n> -\t\t\t\t\t\t\tstatic_cast<int64_t>(maxFrameDuration_.get<std::micro>()) }));\n> +\t\t\t       { static_cast<int64_t>(minFrameDuration_.get<std::micro>()),\n> +\t\t\t\t static_cast<int64_t>(maxFrameDuration_.get<std::micro>()) });\n>\n>  \t/*\n>  \t * Calculate the maximum exposure time possible for the AGC to use.","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 86580C3272\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSat, 13 Aug 2022 22:59:13 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 400F561FC0;\n\tSun, 14 Aug 2022 00:59:12 +0200 (CEST)","from mout.gmx.net (mout.gmx.net [212.227.15.19])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 296B461FA5\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 14 Aug 2022 00:59:10 +0200 (CEST)","from [192.168.0.158] ([88.152.184.103]) by mail.gmx.net (mrgmx004\n\t[212.227.17.190]) with ESMTPSA (Nemesis) id\n\t1N8GMk-1nJC3B2WQq-0148XD for\n\t<libcamera-devel@lists.libcamera.org>; Sun, 14 Aug 2022 00:59:09 +0200"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1660431552;\n\tbh=6zNOYfedm2fcKfmrjOKLFUSs16A+nWHFzczAberpjLo=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:\n\tFrom;\n\tb=O9AjJ57aNM4Hq0VvEyiopeEx/dY+stg1lU2NMnb8ny5gUbaz6jZXUbUyKXHyCldWV\n\tuTKBELOpZqEUCvcT+sc0zDAx7GxDbUNUqdNhKbxXubXWErhdSWv/NoZTXOtyR6JfrS\n\te0hWtM0JkCzdq5r0V3QS6eXCOnqXIHzZbSdwfZ4mMpERWhZCXczLFz18gCNKyd/qWA\n\tK84Sx9zZ+6+zTmmxj2/VddFTjI/ge4RAWUv7O7+VmFDHl+icgrvOp6Af9X9WJrjHUR\n\tcqMJbBNA68oUHO+2UONZRejmKpSh2HL07yEUHoG3oUdW1ahhwh3PbFwvyfiuzfIY1P\n\tuCPWeWa8qYS+w==","v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net;\n\ts=badeba3b8450; t=1660431549;\n\tbh=6zNOYfedm2fcKfmrjOKLFUSs16A+nWHFzczAberpjLo=;\n\th=X-UI-Sender-Class:Date:Subject:To:References:From:In-Reply-To;\n\tb=dbYmRjaP3lkQloXkvmLHX+GAItCQJ37w/DqwgdO/T6e2/6E51EUYoQwUajvtcld6S\n\tlqr0xUWRqmnWGa/TXcJuyKcnimivwSWha1D0PG8M76YTdlNxxwNEW7iJS1BpwBtbm0\n\tyX64+q0tb2vig1It5Ql0U4a65tuxybTKgMNFA/KM="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=gmx.net header.i=@gmx.net\n\theader.b=\"dbYmRjaP\"; dkim-atps=neutral","X-UI-Sender-Class":"01bb95c1-4bf8-414a-932a-4f6e2808ef9c","Message-ID":"<92dcb90c-d155-d110-9c18-46f9cb84330d@gmx.de>","Date":"Sun, 14 Aug 2022 00:59:09 +0200","MIME-Version":"1.0","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101\n\tThunderbird/91.11.0","Content-Language":"en-GB","To":"libcamera-devel@lists.libcamera.org","References":"<20220810002906.5406-1-laurent.pinchart@ideasonboard.com>\n\t<20220810002906.5406-5-laurent.pinchart@ideasonboard.com>","In-Reply-To":"<20220810002906.5406-5-laurent.pinchart@ideasonboard.com>","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"quoted-printable","X-Provags-ID":"V03:K1:zuhrpUhAX1j2RAOWo4HWh8mJxnBf53MzdAp2a6hgA+A7MwfIHOs\n\t+URg8XqhT89tHgbDya4Ql+BciMRGylkavlSyqKcJJJ/Da0bAwhMMnGbevoXjNXniQHr/ltu\n\teJ1GRQ3NcJbg5wNESkS9L7c8mddzt1/Co87fZOyofEte0lRpX0AZX1aNt1c3e6Lhwl5OcJI\n\tXA2qjgiJ7dIUi6Wn+HYZQ==","X-Spam-Flag":"NO","X-UI-Out-Filterresults":"notjunk:1; V03:K0:gvgBac4yi8k=:A6wS0bH8SCJ/a+bNFSKMr0\n\tqJL1Imie0huVe9bTu9BTwV95+FxiREAu+cGjxkbX9tCu4TV3h5FhLcR5XviWYnAZKE8bhzK8q\n\tAFzMPZOADQTUx5UjAK7eaNfGqOBJWuhjJcSbEcGerDhqGzf21zVcz7rmkFqsfzr5DZgpergyD\n\tH2H6fyc0mBG412o4Qm60nPEoS6ohEo0DKl8Awi68W8W1/tNDAj9NbFkzAtOWx7ym7oURDq9Ru\n\t9emxYRrTduZ/dJgeylIE97gnBopiUZl9KosoUXx8BxJFg7DvLnLWhEtSAlBwq//3b/bA9KX94\n\twtvcO5BNQq+/COnFcmmRtLI6p7fwqz2CQeYFSpRhH9YflNGxnJT/6EdCb3iNyO+YXlRdhngiM\n\tbX3PGO5Qng+yYoQMHVrLfQ8NV6XuYOjxUn6NMfLfYonTvS4UDTF/OiSb3wfo12tkSYWhxTp9u\n\tTBkDpxoY9CIoYHirBhMmRaQZYYEGNfo+q2RX/6t8QTqAluwocdJe/y+z0uwMlaZD1sOBWYMQs\n\tg+0n/6+i+IViyIo1L05M/ccqKcuORrEP5BV3To3mAjx01RHYS2xq0+k5vEq3SiGTqOUiV/S23\n\twatrQEWHFsrBVvUyQU2X3kD9ngVptzj6YUaQ1MeiqnWwIDnRrTFIYdBSxgF/7nVvdubSL6wl4\n\ttRxDj2yPoX63CDzjuttmFm/xcT9f/IbpK/7o8PDutbjTmsB2Tx2/bEMY0aPMCwy4UuyOjq2bR\n\twcjykS2vn8x37ZIhmDsFDu/NWvMtpfIt7Fpy//xK4LGzZY5mQ1Wea/Ff2u5kNa605Elp4mWVA\n\t0gYNyKeUpojvwhPe3ZdTjFAftGrbjicF0lWCyJKunHBwgsLZ0KG3XxD65WixiFBxVj8MHOMkK\n\ttxrEo4fbngi4dzDJP0VkASFIolGcs+Z7hj2WEviyGq7IsK/iWGV1PUC3dGtgwYtXsd3BjAahA\n\t0HdpAviZQzJNVYSFHN2qEUXCfVNiV5+4k55SAck12yc4k+eR5vCG8o3rsY0nR18J9TalqzRXO\n\tp/PPL0iM+cr0IT1jL1v2wla3CYIt2Pdc9iLlM0bX15zrK1RKo5nZOkX3Zbb9Y8TQRHem3T6pP\n\tH1LaiIj46b6MsOaSkhQIndrYYN+wmtnHp626myJEGC7J020GbyqUb0snA==","Subject":"Re: [libcamera-devel] [PATCH 4/4] ipa: raspberrypi: Remove unneeded\n\tSpan casts","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>","From":"Christian Rauch via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Christian Rauch <Rauch.Christian@gmx.de>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]