[{"id":39377,"web_url":"https://patchwork.libcamera.org/comment/39377/","msgid":"<e261a5cf-dfd5-44ea-8599-ed9bf2522bab@collabora.com>","date":"2026-06-24T11:49:31","subject":"Re: [PATCH 02/10] libcamera: egl: Add new helper attachTextureToFBO","submitter":{"id":140,"url":"https://patchwork.libcamera.org/api/people/140/","name":"Robert Mader","email":"robert.mader@collabora.com"},"content":"On 24.06.26 10:58, Bryan O'Donoghue wrote:\n> This method does what it says on the tin. It attaches a texture to a\n> framebuffer object, splitting existing code into a helper function which we\n> will use in subsequent patches.\n>\n> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>\n\nLGTM.\n\nReviewed-by: Robert Mader <robert.mader@collabora.com>\n\n> ---\n>   include/libcamera/internal/egl.h |  2 ++\n>   src/libcamera/egl.cpp            | 42 +++++++++++++++++++++++---------\n>   2 files changed, 32 insertions(+), 12 deletions(-)\n>\n> diff --git a/include/libcamera/internal/egl.h b/include/libcamera/internal/egl.h\n> index f7bfb28d4..4b0757afd 100644\n> --- a/include/libcamera/internal/egl.h\n> +++ b/include/libcamera/internal/egl.h\n> @@ -109,6 +109,8 @@ public:\n>   \tint createOutputDMABufTexture2D(eGLImage &eglImage, int fd);\n>   \tvoid createTexture2D(eGLImage &eglImage, void *data);\n>   \n> +\tint attachTextureToFBO(eGLImage &eglImage);\n> +\n>   \tvoid pushEnv(std::vector<std::string> &shaderEnv, const char *str);\n>   \tvoid makeCurrent();\n>   \n> diff --git a/src/libcamera/egl.cpp b/src/libcamera/egl.cpp\n> index f03abb8ae..e83e24606 100644\n> --- a/src/libcamera/egl.cpp\n> +++ b/src/libcamera/egl.cpp\n> @@ -112,6 +112,32 @@ void eGL::flushOutput()\n>   \tglFlush();\n>   }\n>   \n> +/**\n> + * \\brief Attach a texture to a frame-buffer-object\n> + *\n> + * \\param[in,out] eglImage EGL image containing texture to attach to FBO\n> + *\n> + * Helper function to make attachment of texture to FBO easy to reuse.\n> + *\n> + * \\return 0 on success, or -ENODEV on failure\n> + */\n> +int eGL::attachTextureToFBO(eGLImage &eglImage)\n> +{\n> +\tint ret = 0;\n> +\n> +\t// Generate a framebuffer from our texture direct to dma-buf handle buffer\n> +\tglBindFramebuffer(GL_FRAMEBUFFER, eglImage.fbo_);\n> +\tglFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, eglImage.texture_, 0);\n> +\n> +\tGLenum err = glCheckFramebufferStatus(GL_FRAMEBUFFER);\n> +\tif (err != GL_FRAMEBUFFER_COMPLETE) {\n> +\t\tLOG(eGL, Error) << \"glFrameBufferTexture2D error \" << err;\n> +\t\tret = -ENODEV;\n> +\t}\n> +\n> +\treturn ret;\n> +}\n> +\n>   /**\n>    * \\brief Create a DMA-BUF backed 2D texture\n>    * \\param[in,out] eglImage EGL image to associate with the DMA-BUF\n> @@ -127,6 +153,7 @@ void eGL::flushOutput()\n>   int eGL::createDMABufTexture2D(eGLImage &eglImage, int fd, bool output)\n>   {\n>   \tEGLint drm_format;\n> +\tint ret = 0;\n>   \n>   \tASSERT(tid_ == Thread::currentId());\n>   \n> @@ -186,19 +213,10 @@ int eGL::createDMABufTexture2D(eGLImage &eglImage, int fd, bool output)\n>   \tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);\n>   \tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);\n>   \n> -\tif (output) {\n> -\t\t// Generate a framebuffer from our texture direct to dma-buf handle buffer\n> -\t\tglBindFramebuffer(GL_FRAMEBUFFER, eglImage.fbo_);\n> -\t\tglFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, eglImage.texture_, 0);\n> +\tif (output)\n> +\t\tret = attachTextureToFBO(eglImage);\n>   \n> -\t\tGLenum err = glCheckFramebufferStatus(GL_FRAMEBUFFER);\n> -\t\tif (err != GL_FRAMEBUFFER_COMPLETE) {\n> -\t\t\tLOG(eGL, Error) << \"glFrameBufferTexture2D error \" << err;\n> -\t\t\treturn -ENODEV;\n> -\t\t}\n> -\t}\n> -\n> -\treturn 0;\n> +\treturn ret;\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 E68CFC3308\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 24 Jun 2026 11:49:39 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 9C20D65896;\n\tWed, 24 Jun 2026 13:49:39 +0200 (CEST)","from sender4-op-o12.zoho.com (sender4-op-o12.zoho.com\n\t[136.143.188.12])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 665FA65891\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 24 Jun 2026 13:49:38 +0200 (CEST)","by mx.zohomail.com with SMTPS id 178230177387696.07104892572931;\n\tWed, 24 Jun 2026 04:49:33 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=collabora.com\n\theader.i=robert.mader@collabora.com header.b=\"FS2rA9Xb\"; \n\tdkim-atps=neutral","ARC-Seal":"i=1; a=rsa-sha256; t=1782301775; cv=none; \n\td=zohomail.com; s=zohoarc; \n\tb=BsMVEg6OnOATgElx65YQ1hSqlW1QS+1cXWD3cn+rxVFpMUZSlE0kj+fvWaWG4O7sfBDN94UH+eSfofNwk8vVOP8adN7/xJpZU3Hq3Q1pcaOaUBppgmn1lC7FDTK2RVTvM94s0FiCimMgttxjJt+kv3Sbw3A6YnExmGNg8nIBvdQ=","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; \n\ts=zohoarc; t=1782301775;\n\th=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To:Cc;\n\tbh=vflwVWF4sbn3jFOQ4gs203U/EfE7ncTP5I9b7e0Ewe0=; \n\tb=egV+72kuEsBaVdzh3H9bvp7tJjCeVFut2S4R/v+dmfKxWFUAtMQRMrnyR7b02skJmiORiZxfZI5xG316PB8FY2nHKvTj4807rzINqDjkDV35i5g86rHx2JfkCuXzEH0O5gg7z3MAsZ0Fz0g502uznwXgM3RA9ImLNhp5SplpnMY=","ARC-Authentication-Results":"i=1; mx.zohomail.com;\n\tdkim=pass  header.i=collabora.com;\n\tspf=pass  smtp.mailfrom=robert.mader@collabora.com;\n\tdmarc=pass header.from=<robert.mader@collabora.com>","DKIM-Signature":"v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1782301775;\n\ts=zohomail; d=collabora.com; i=robert.mader@collabora.com;\n\th=Message-ID:Date:Date:MIME-Version:Subject:Subject:To:To:References:From:From:In-Reply-To:Content-Type:Content-Transfer-Encoding:Message-Id:Reply-To:Cc;\n\tbh=vflwVWF4sbn3jFOQ4gs203U/EfE7ncTP5I9b7e0Ewe0=;\n\tb=FS2rA9Xbp2EVemNz0MSLfAm4L0hGh8HGbYJC2EKA6GzxXHrQiiGX0cMG8tBlUw1R\n\tyc735mn1O+EWdmKCTt5mk+jf7S4ezhLqa/UANCHumdGnIuvv+biGAj3xdN/gdFiJNFs\n\tbtbw4uiivxuswRJoq/Ay1PEKBSaB0NyG32FUtN+M=","Message-ID":"<e261a5cf-dfd5-44ea-8599-ed9bf2522bab@collabora.com>","Date":"Wed, 24 Jun 2026 13:49:31 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH 02/10] libcamera: egl: Add new helper attachTextureToFBO","To":"libcamera-devel@lists.libcamera.org","References":"<20260624085849.873784-1-bryan.odonoghue@linaro.org>\n\t<20260624085849.873784-3-bryan.odonoghue@linaro.org>","Content-Language":"en-US, de-DE, en-GB","From":"Robert Mader <robert.mader@collabora.com>","In-Reply-To":"<20260624085849.873784-3-bryan.odonoghue@linaro.org>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"7bit","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":39436,"web_url":"https://patchwork.libcamera.org/comment/39436/","msgid":"<85zf0hlh2z.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","date":"2026-06-26T10:41:08","subject":"Re: [PATCH 02/10] libcamera: egl: Add new helper attachTextureToFBO","submitter":{"id":177,"url":"https://patchwork.libcamera.org/api/people/177/","name":"Milan Zamazal","email":"mzamazal@redhat.com"},"content":"Bryan O'Donoghue <bryan.odonoghue@linaro.org> writes:\n\n> This method does what it says on the tin. It attaches a texture to a\n> framebuffer object, splitting existing code into a helper function which we\n> will use in subsequent patches.\n>\n> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>\n\nReviewed-by: Milan Zamazal <mzamazal@redhat.com>\n\n> ---\n>  include/libcamera/internal/egl.h |  2 ++\n>  src/libcamera/egl.cpp            | 42 +++++++++++++++++++++++---------\n>  2 files changed, 32 insertions(+), 12 deletions(-)\n>\n> diff --git a/include/libcamera/internal/egl.h b/include/libcamera/internal/egl.h\n> index f7bfb28d4..4b0757afd 100644\n> --- a/include/libcamera/internal/egl.h\n> +++ b/include/libcamera/internal/egl.h\n> @@ -109,6 +109,8 @@ public:\n>  \tint createOutputDMABufTexture2D(eGLImage &eglImage, int fd);\n>  \tvoid createTexture2D(eGLImage &eglImage, void *data);\n>  \n> +\tint attachTextureToFBO(eGLImage &eglImage);\n> +\n>  \tvoid pushEnv(std::vector<std::string> &shaderEnv, const char *str);\n>  \tvoid makeCurrent();\n>  \n> diff --git a/src/libcamera/egl.cpp b/src/libcamera/egl.cpp\n> index f03abb8ae..e83e24606 100644\n> --- a/src/libcamera/egl.cpp\n> +++ b/src/libcamera/egl.cpp\n> @@ -112,6 +112,32 @@ void eGL::flushOutput()\n>  \tglFlush();\n>  }\n>  \n> +/**\n> + * \\brief Attach a texture to a frame-buffer-object\n> + *\n> + * \\param[in,out] eglImage EGL image containing texture to attach to FBO\n> + *\n> + * Helper function to make attachment of texture to FBO easy to reuse.\n> + *\n> + * \\return 0 on success, or -ENODEV on failure\n> + */\n> +int eGL::attachTextureToFBO(eGLImage &eglImage)\n> +{\n> +\tint ret = 0;\n> +\n> +\t// Generate a framebuffer from our texture direct to dma-buf handle buffer\n> +\tglBindFramebuffer(GL_FRAMEBUFFER, eglImage.fbo_);\n> +\tglFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, eglImage.texture_, 0);\n> +\n> +\tGLenum err = glCheckFramebufferStatus(GL_FRAMEBUFFER);\n> +\tif (err != GL_FRAMEBUFFER_COMPLETE) {\n> +\t\tLOG(eGL, Error) << \"glFrameBufferTexture2D error \" << err;\n> +\t\tret = -ENODEV;\n> +\t}\n> +\n> +\treturn ret;\n> +}\n> +\n>  /**\n>   * \\brief Create a DMA-BUF backed 2D texture\n>   * \\param[in,out] eglImage EGL image to associate with the DMA-BUF\n> @@ -127,6 +153,7 @@ void eGL::flushOutput()\n>  int eGL::createDMABufTexture2D(eGLImage &eglImage, int fd, bool output)\n>  {\n>  \tEGLint drm_format;\n> +\tint ret = 0;\n>  \n>  \tASSERT(tid_ == Thread::currentId());\n>  \n> @@ -186,19 +213,10 @@ int eGL::createDMABufTexture2D(eGLImage &eglImage, int fd, bool output)\n>  \tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);\n>  \tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);\n>  \n> -\tif (output) {\n> -\t\t// Generate a framebuffer from our texture direct to dma-buf handle buffer\n> -\t\tglBindFramebuffer(GL_FRAMEBUFFER, eglImage.fbo_);\n> -\t\tglFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, eglImage.texture_, 0);\n> +\tif (output)\n> +\t\tret = attachTextureToFBO(eglImage);\n>  \n> -\t\tGLenum err = glCheckFramebufferStatus(GL_FRAMEBUFFER);\n> -\t\tif (err != GL_FRAMEBUFFER_COMPLETE) {\n> -\t\t\tLOG(eGL, Error) << \"glFrameBufferTexture2D error \" << err;\n> -\t\t\treturn -ENODEV;\n> -\t\t}\n> -\t}\n> -\n> -\treturn 0;\n> +\treturn ret;\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 8F10ABF415\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 26 Jun 2026 10:41:17 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A9E2D658E5;\n\tFri, 26 Jun 2026 12:41:16 +0200 (CEST)","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 8CC4C65878\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 26 Jun 2026 12:41:14 +0200 (CEST)","from mail-wm1-f71.google.com (mail-wm1-f71.google.com\n\t[209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS\n\t(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n\tus-mta-640-qVARxaeXN4CEQPC_juonJg-1; Fri, 26 Jun 2026 06:41:11 -0400","by mail-wm1-f71.google.com with SMTP id\n\t5b1f17b1804b1-49221de4ed4so5688785e9.0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 26 Jun 2026 03:41:11 -0700 (PDT)","from mzamazal-thinkpadp1gen7.tpbc.csb\n\t(ip-77-48-47-4.net.vodafone.cz. [77.48.47.4])\n\tby smtp.gmail.com with ESMTPSA id\n\tffacd0b85a97d-46c1ee0189esm24734345f8f.9.2026.06.26.03.41.09\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tFri, 26 Jun 2026 03:41:09 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=redhat.com header.i=@redhat.com\n\theader.b=\"Es02QSLo\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1782470473;\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=/BGqTEBh3T0kgZ7Jf7OCeOz0WkslqcK0IpIEHBlZ/Co=;\n\tb=Es02QSLoZpdJdcBcjL3Cqkn1QPhvN9Xw4T4IWlKW5TCdq8gNWRQiUE81onthDJ/hjpnJIj\n\tzHF/X1bomf+wqd/b4jY9fyDd1qckbxVwiGRonAIwRuJLUF9L1WjgoIVWnHabGULBHvJq2T\n\tGD0hWIVhgD8VDw0lfjw+PbmY0Pj5/lQ=","X-MC-Unique":"qVARxaeXN4CEQPC_juonJg-1","X-Mimecast-MFC-AGG-ID":"qVARxaeXN4CEQPC_juonJg_1782470471","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20251104; t=1782470470; x=1783075270;\n\th=mime-version:user-agent:message-id:date:references:in-reply-to\n\t:subject:cc:to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject\n\t:date:message-id:reply-to;\n\tbh=/BGqTEBh3T0kgZ7Jf7OCeOz0WkslqcK0IpIEHBlZ/Co=;\n\tb=RUoTqBDPa2OQFNZBjyuLGKTCa9h4zFjgibS3PhWn3DtnWIZRWa493WT3HmHrKVPKs+\n\tWPqCD3040RsrY+ncIco39/VGsA5anBaMg0glUeAJfAHFpsQbiBwKg+UiRt5mPs7UdgSA\n\tGhVimUyRycmAnRYZlpnQ/AsQHaiPk8DahK3q+NT/HYFEzi6XhaVxJ8sCCvJo8G7FFVGm\n\tei+ek1Ar5aGDJT5+zyRLvtuu/v9srruWtZQ7vYWUA0ogEMB15n/3IyxRFIsiGSqkXOEj\n\tG0gMaAEUayLdkWsX1VUKVqXuWVT2Dro+AOqXMViemEIcypKFOf4aWI8sa7yTPU/yzNI0\n\t+blQ==","X-Gm-Message-State":"AOJu0YxrL2z2JfIMbQRqMPp19b2c6WxDmmk0Sa60sgrV1gY/F9gUGEBk\n\tgvQguvUkd+APMtxGIV+74aQ1TJfcHZAzB7pam4BvV+iz+wjdVOgovc4p9n8ZQFua58afwyNrrmE\n\tWqDXQup8TwKofyHGZU3hK2AEcV8iVgVShTi8cyRuCMifRq++8SuX4XtHnKoP8f0UGrbBb2otNH2\n\t8=","X-Gm-Gg":"AfdE7cn5iAv5njYM86W6LTZJ3JanJN4Zm4DeGEoJjDq9fhc17XrFFuYZ6zVxwMl8xnx\n\tC+3c+DkfyLjJEYEpcCVgS2REKzT7ztBklfOx2kjAY7oS4SP8YGmLzFz38dc7JEektmkVkSwUCGY\n\tsvd/HBgp72d+DQdFFzlno8pxvGGam+08bumtrm9RR6uunpOhUkJpTIKlyAzJFbB5IbmBDcTGc87\n\txupaN7CQTK0BC/82j+IfTKk0mvMqyG+EtXuB1WVUMqXfPmBfIMbnUAS/4xaKEC0Wn2HEn3m85Gm\n\tHT2aW5/R45ehcgHKkkEpkfIVzSlMVYOvzzePiVSXU9pVfEQdOfl1qZpeOrRByBpvfAlhAsyouMi\n\tc/5vJkllwZXZEVX5BAfWmrbbsF7G1Due0LE4CbNtPfDB4KozOpUtCJPEozOPYW1+u","X-Received":["by 2002:a05:600c:3492:b0:490:be9e:fd03 with SMTP id\n\t5b1f17b1804b1-49266838803mr86895365e9.7.1782470470517; \n\tFri, 26 Jun 2026 03:41:10 -0700 (PDT)","by 2002:a05:600c:3492:b0:490:be9e:fd03 with SMTP id\n\t5b1f17b1804b1-49266838803mr86894835e9.7.1782470469951; \n\tFri, 26 Jun 2026 03:41:09 -0700 (PDT)"],"From":"Milan Zamazal <mzamazal@redhat.com>","To":"Bryan O'Donoghue <bryan.odonoghue@linaro.org>","Cc":"libcamera-devel@lists.libcamera.org,  pavel@ucw.cz","Subject":"Re: [PATCH 02/10] libcamera: egl: Add new helper attachTextureToFBO","In-Reply-To":"<20260624085849.873784-3-bryan.odonoghue@linaro.org> (Bryan\n\tO'Donoghue's message of \"Wed, 24 Jun 2026 09:58:41 +0100\")","References":"<20260624085849.873784-1-bryan.odonoghue@linaro.org>\n\t<20260624085849.873784-3-bryan.odonoghue@linaro.org>","Date":"Fri, 26 Jun 2026 12:41:08 +0200","Message-ID":"<85zf0hlh2z.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","User-Agent":"Gnus/5.13 (Gnus v5.13)","MIME-Version":"1.0","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"6RVL5qNlstQj_tSuEXl_ulMR8R4U7cY5QuQJ9QwO33k_1782470471","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>"}}]