[{"id":34514,"web_url":"https://patchwork.libcamera.org/comment/34514/","msgid":"<c116b993-34c8-4704-afd6-8f217fd12a4d@ideasonboard.com>","date":"2025-06-17T11:50:11","subject":"Re: [PATCH 18/35] meson: Automatically generate glsl_shaders.h from\n\tspecified shader programs","submitter":{"id":216,"url":"https://patchwork.libcamera.org/api/people/216/","name":"Barnabás Pőcze","email":"barnabas.pocze@ideasonboard.com"},"content":"Hi\n\n2025. 06. 11. 3:32 keltezéssel, Bryan O'Donoghue írta:\n> Encode the bayer shader files into a header as part of the build process.\n> Qcam already compiles the shader files down into a QT resource file which\n> it references internally.\n> \n> In order to share the debayering shader programs outside of qcam create a\n> generic header which both qcam and libcamera can operate from.\n> \n> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>\n> ---\n>   include/libcamera/internal/meson.build         | 10 ++++++++++\n>   include/libcamera/internal/shaders/meson.build | 10 ++++++++++\n>   utils/meson.build                              |  2 ++\n>   3 files changed, 22 insertions(+)\n>   create mode 100644 include/libcamera/internal/shaders/meson.build\n> \n> diff --git a/include/libcamera/internal/meson.build b/include/libcamera/internal/meson.build\n> index 33f318b2..c0b593bf 100644\n> --- a/include/libcamera/internal/meson.build\n> +++ b/include/libcamera/internal/meson.build\n> @@ -1,6 +1,7 @@\n>   # SPDX-License-Identifier: CC0-1.0\n>   \n>   subdir('tracepoints')\n> +subdir('shaders')\n>   \n>   libcamera_internal_headers = files([\n>       'bayer_format.h',\n> @@ -57,5 +58,14 @@ tracepoints_h = custom_target(\n>   \n>   libcamera_internal_headers += tracepoints_h\n>   \n> +libcamera_shader_headers = custom_target(\n> +    'gen-shader-headers',\n> +    input : [shader_files],\n> +    output : 'glsl_shaders.h',\n> +    command : [gen_shader_headers, meson.project_source_root(), meson.project_build_root(), '@OUTPUT@', '@INPUT@'],\n\nI think `@OUTPUT@` should expand to an absolute path, so is passing\n`meson.project_build_root()` needed?\n\nOr could we maybe replace both with a single `files('gen-shader-header.py')`?\n\nOr maybe better, could be use just a single python script that takes a list\nof files and generates the header file? E.g. currently changing the python\nscript will not trigger a rebuild.\n\n\nRegards,\nBarnabás Pőcze\n\n> +)\n> +\n> +libcamera_internal_headers += libcamera_shader_headers\n> +\n>   subdir('converter')\n>   subdir('software_isp')\n> diff --git a/include/libcamera/internal/shaders/meson.build b/include/libcamera/internal/shaders/meson.build\n> new file mode 100644\n> index 00000000..386b342d\n> --- /dev/null\n> +++ b/include/libcamera/internal/shaders/meson.build\n> @@ -0,0 +1,10 @@\n> +# SPDX-License-Identifier: CC0-1.0\n> +\n> +# List of shader files to convert to header hex\n> +# for the purposes of inclusion in OpenGL debayering\n> +shader_files = files([\n> +    'bayer_1x_packed.frag',\n> +    'bayer_8.frag',\n> +    'bayer_8.vert',\n> +    'identity.vert',\n> +])\n> diff --git a/utils/meson.build b/utils/meson.build\n> index 95d657ac..3deed8ad 100644\n> --- a/utils/meson.build\n> +++ b/utils/meson.build\n> @@ -3,5 +3,7 @@\n>   subdir('codegen')\n>   subdir('ipu3')\n>   \n> +gen_shader_headers = files('gen-shader-headers.sh')\n> +\n>   ## Module signing\n>   gen_ipa_priv_key = files('gen-ipa-priv-key.sh')","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 71780BDE6B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 17 Jun 2025 11:50:18 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D8A1668DC3;\n\tTue, 17 Jun 2025 13:50:17 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id CDA1768DB1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 17 Jun 2025 13:50:15 +0200 (CEST)","from [192.168.33.11] (185.221.143.107.nat.pool.zt.hu\n\t[185.221.143.107])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 208C17E1;\n\tTue, 17 Jun 2025 13:50:03 +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=\"GWvkBFq1\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1750161003;\n\tbh=LKCokiqBvTKiobCfvFgIZcM/t89ANS0+5rV+wwpYVKA=;\n\th=Date:Subject:To:References:From:In-Reply-To:From;\n\tb=GWvkBFq1HrsIS0o1mjY2OiR+gmFHLEOTZGKjd66ClVBJS4jjnW4gNzelFUi37NPVK\n\tligetq76fnIsppYQ2O6glzBJljPgNtUCMHw1JLxBtMT+TclTivAmVNxyJwdEgCdCBx\n\tTXxQAli+5c70ZoeMvJ5TtJdMT6qngVJBHoMvx1Hw=","Message-ID":"<c116b993-34c8-4704-afd6-8f217fd12a4d@ideasonboard.com>","Date":"Tue, 17 Jun 2025 13:50:11 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH 18/35] meson: Automatically generate glsl_shaders.h from\n\tspecified shader programs","To":"Bryan O'Donoghue <bryan.odonoghue@linaro.org>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20250611013245.133785-1-bryan.odonoghue@linaro.org>\n\t<20250611013245.133785-19-bryan.odonoghue@linaro.org>","From":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Content-Language":"en-US, hu-HU","In-Reply-To":"<20250611013245.133785-19-bryan.odonoghue@linaro.org>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"8bit","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":34517,"web_url":"https://patchwork.libcamera.org/comment/34517/","msgid":"<864e0ba1-27ef-45b9-9c31-57ae1ff3e78d@linaro.org>","date":"2025-06-17T11:58:11","subject":"Re: [PATCH 18/35] meson: Automatically generate glsl_shaders.h from\n\tspecified shader programs","submitter":{"id":175,"url":"https://patchwork.libcamera.org/api/people/175/","name":"Bryan O'Donoghue","email":"bryan.odonoghue@linaro.org"},"content":"On 17/06/2025 12:50, Barnabás Pőcze wrote:\n>> +    command : [gen_shader_headers, meson.project_source_root(), \n>> meson.project_build_root(), '@OUTPUT@', '@INPUT@'],\n> \n> I think `@OUTPUT@` should expand to an absolute path, so is passing\n> `meson.project_build_root()` needed?\n\nI can look at that.\n\n\n> Or could we maybe replace both with a single `files('gen-shader- \n> header.py')`?\n> \n> Or maybe better, could be use just a single python script that takes a list\n> of files and generates the header file? E.g. currently changing the python\n> script will not trigger a rebuild.\n\nWhat I like personally about having a python script is it does one job, \ntranslating an input file into a C array - directly replacing xxd which \nI was previously using but, we agreed at some stage to replace with a \nscript.\n\nIs having everything in one script important to you ?\n\n---\nbod","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 527DFBDE6B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 17 Jun 2025 11:58:14 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 0698668DD0;\n\tTue, 17 Jun 2025 13:58:14 +0200 (CEST)","from mail-wm1-x32e.google.com (mail-wm1-x32e.google.com\n\t[IPv6:2a00:1450:4864:20::32e])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 3853868DB1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 17 Jun 2025 13:58:13 +0200 (CEST)","by mail-wm1-x32e.google.com with SMTP id\n\t5b1f17b1804b1-450cf0120cdso46174835e9.2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 17 Jun 2025 04:58:13 -0700 (PDT)","from [192.168.0.35] (188-141-3-146.dynamic.upc.ie. [188.141.3.146])\n\tby smtp.gmail.com with ESMTPSA id\n\t5b1f17b1804b1-4532e09c2ffsm171845465e9.18.2025.06.17.04.58.12\n\t(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n\tTue, 17 Jun 2025 04:58:12 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=linaro.org header.i=@linaro.org\n\theader.b=\"TAWiPdWd\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=linaro.org; s=google; t=1750161493; x=1750766293;\n\tdarn=lists.libcamera.org; \n\th=content-transfer-encoding:in-reply-to:from:content-language\n\t:references:to:subject:user-agent:mime-version:date:message-id:from\n\t:to:cc:subject:date:message-id:reply-to;\n\tbh=edkuZZdE2ejrstj9DOvyiJVZirAvLY1McVmJ5u72/Z4=;\n\tb=TAWiPdWdefQHttI2zYLvGwYwPXn9gr+ci7AMU0/JcTY+u2PeRaka3U4KMGXm5USk2Q\n\ts3IdTCcU0ICV3/2iDE+YAbTXEja8hAriL/2b2uNZRS4OCtSsunXf1/TiC5DmMz48n7mJ\n\tw9PyUb+xcHs3ArLDjLjnD/IdMKL0LOqt9gyGagwE7o0yw32XQiloU1ozWJcdLLKA0GQn\n\tB7N9e49Bhms3OPwTXEC5eogH9ArFUhnOX0tsGuzNhdfvHPRBX+so3rWMbCYvidm4bMZr\n\tiH+hpCez5BdgpDnPcqXU3/17tHXzD7QuV2KRwAd48Fv3CVF+6mxl9sUiuClPZWMm1WWO\n\ti67w==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1750161493; x=1750766293;\n\th=content-transfer-encoding:in-reply-to:from:content-language\n\t:references:to:subject:user-agent:mime-version:date:message-id\n\t:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;\n\tbh=edkuZZdE2ejrstj9DOvyiJVZirAvLY1McVmJ5u72/Z4=;\n\tb=cod1+emdQm9oBwmdgj8uIznBswsnj/ir+6Txgwx5EDXiEzmMcGxUCQ/J2yq+UYZ3U3\n\tp7uto9A16ys+vLy5ug/NESFSuJfqaVtAHzLONX5Je3Y209xdxkkPAaMir6tWpoY1pnoR\n\tWbwhsg005Rc6t0G/BbNcXzF/+NbmcSLNe5xf1TwkjOZ/tHZ7RywQkaxSdHrwacMIxWY0\n\tXK+M+r8g19bsSWat6UbzD1xPzwxqELTtp3wsXXZvgrPMvsT55GhQcjuiDBcJll7OUumk\n\tm6wgev3/X7I2ADqRzc9zJ6Fx7kmmwY+y2LWiijsUBrZ36uyK73xkUl6R0Mgea1clWKdF\n\tFw+A==","X-Forwarded-Encrypted":"i=1;\n\tAJvYcCWMOmz2tiXOS/rksa4MXaknubXsuWvx4QdW5Bt5oyyw7voJ1ZnO8izrsxC7eGTyTF5aEo1vxoKavLhBD/m3zfg=@lists.libcamera.org","X-Gm-Message-State":"AOJu0YzQwpcs1kXtAD8rNtq0N9AI6fdXSlBAHYW2wEsGSUSJzaQypJVz\n\t4WwZBOE8EUOVNIOxrWE9ForIOwYR0zqJWQH8OulXgGuLmUU5AAK6yrffVW/Ya84rpKSXmiv1rOz\n\tMtWgewnw=","X-Gm-Gg":"ASbGncuGtySRgwMi90mZlxX/oZEVqcdLFor+HcCzfZBYbZnSrw99uopXlRxztzaCQy5\n\t622QkN33IXX+Jzrh5cJMgZ1oEf9worIhVquVrMqp31fq4l6jnoiMkHISizLtG65hbayp1E56bcv\n\trtLwX/RvbZRV73DYCVejLExmhxcHm1rPPeoZcy5cEfoyP1exS30iwWt7abEtAY2h9qX5EfRbKB4\n\tO8PCFh+O5t3BsjWelHqQkc9Co3qe3JCsrEB7S6TEiq7U8nyuLqSynWOKiySR3/QR0t5h3rRogzc\n\teUcqsC3aFS01KBvjXDKKm8B9xhTLodDxPsREah5cu5bLCg3H0MbyaHLPe/xRly2JXL1CsWlgVnf\n\tfvAgJB6M7BuwfDOHdB+5gETJbYcE=","X-Google-Smtp-Source":"AGHT+IECcU6lFBqgtf0feX9zP6tOQ5bH1PFThXXC95PEFJ+i6zhTqzJ8A3SXNkrprLiItms++JyWWA==","X-Received":"by 2002:a05:600d:13:b0:453:c39:d0c6 with SMTP id\n\t5b1f17b1804b1-45344d8f6d6mr65931705e9.32.1750161492797; \n\tTue, 17 Jun 2025 04:58:12 -0700 (PDT)","Message-ID":"<864e0ba1-27ef-45b9-9c31-57ae1ff3e78d@linaro.org>","Date":"Tue, 17 Jun 2025 12:58:11 +0100","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH 18/35] meson: Automatically generate glsl_shaders.h from\n\tspecified shader programs","To":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20250611013245.133785-1-bryan.odonoghue@linaro.org>\n\t<20250611013245.133785-19-bryan.odonoghue@linaro.org>\n\t<c116b993-34c8-4704-afd6-8f217fd12a4d@ideasonboard.com>","Content-Language":"en-US","From":"Bryan O'Donoghue <bryan.odonoghue@linaro.org>","In-Reply-To":"<c116b993-34c8-4704-afd6-8f217fd12a4d@ideasonboard.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"8bit","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":34523,"web_url":"https://patchwork.libcamera.org/comment/34523/","msgid":"<2381ea72-88a9-4a3f-9322-251d2e4483af@ideasonboard.com>","date":"2025-06-17T12:38:12","subject":"Re: [PATCH 18/35] meson: Automatically generate glsl_shaders.h from\n\tspecified shader programs","submitter":{"id":216,"url":"https://patchwork.libcamera.org/api/people/216/","name":"Barnabás Pőcze","email":"barnabas.pocze@ideasonboard.com"},"content":"2025. 06. 17. 13:58 keltezéssel, Bryan O'Donoghue írta:\n> On 17/06/2025 12:50, Barnabás Pőcze wrote:\n>>> +    command : [gen_shader_headers, meson.project_source_root(), meson.project_build_root(), '@OUTPUT@', '@INPUT@'],\n>>\n>> I think `@OUTPUT@` should expand to an absolute path, so is passing\n>> `meson.project_build_root()` needed?\n> \n> I can look at that.\n> \n> \n>> Or could we maybe replace both with a single `files('gen-shader- header.py')`?\n>>\n>> Or maybe better, could be use just a single python script that takes a list\n>> of files and generates the header file? E.g. currently changing the python\n>> script will not trigger a rebuild.\n> \n> What I like personally about having a python script is it does one job, translating an input file into a C array - directly replacing xxd which I was previously using but, we agreed at some stage to replace with a script.\n> \n> Is having everything in one script important to you ?\n\nThe current setup seems more complicated to me than having a single that does just\nwhat is needed. But either seems acceptable to me, let's see what others think.\nBut for the two script solution, please add `depend_files: [ ... ]` on the\n`custom_target()` to consider the python script as well.\n\n\nRegards,\nBarnabás Pőcze\n\n> \n> ---\n> bod","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 3B5C5C3237\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 17 Jun 2025 12:38:21 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id CD59068DCE;\n\tTue, 17 Jun 2025 14:38: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 F39E868DB1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 17 Jun 2025 14:38:17 +0200 (CEST)","from [192.168.33.11] (185.221.143.107.nat.pool.zt.hu\n\t[185.221.143.107])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id C754C7E1;\n\tTue, 17 Jun 2025 14:38:04 +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=\"sCShbjub\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1750163885;\n\tbh=VBy6cu85NImogSPzrONdK2XDjwnK1vI1pc2iHdy7mao=;\n\th=Date:Subject:To:References:From:In-Reply-To:From;\n\tb=sCShbjubNnbzm7IqsGYUxzg8Uv7/mC//vawr/mDUB40PKTm0bXeHQtPl7ABme4Vqf\n\t9YuJZG1L2ZKFAPB4zAI3y3mtYPDTCRTSPNDvru5B8oFfBsn1jq04iPwqx+EepH2zM/\n\tPhthX7nLKNs803rMTix4TG9g/bXdP1dIKrZzfz/A=","Message-ID":"<2381ea72-88a9-4a3f-9322-251d2e4483af@ideasonboard.com>","Date":"Tue, 17 Jun 2025 14:38:12 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH 18/35] meson: Automatically generate glsl_shaders.h from\n\tspecified shader programs","To":"Bryan O'Donoghue <bryan.odonoghue@linaro.org>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20250611013245.133785-1-bryan.odonoghue@linaro.org>\n\t<20250611013245.133785-19-bryan.odonoghue@linaro.org>\n\t<c116b993-34c8-4704-afd6-8f217fd12a4d@ideasonboard.com>\n\t<864e0ba1-27ef-45b9-9c31-57ae1ff3e78d@linaro.org>","From":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Content-Language":"en-US, hu-HU","In-Reply-To":"<864e0ba1-27ef-45b9-9c31-57ae1ff3e78d@linaro.org>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"8bit","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>"}}]