[{"id":39457,"web_url":"https://patchwork.libcamera.org/comment/39457/","msgid":"<206c4785-2425-431f-aee6-3ecc6cbc9aa9@collabora.com>","date":"2026-06-26T12:09:58","subject":"Re: [PATCH v3 5/8] libcamera: egl: Add updateTexture2D","submitter":{"id":140,"url":"https://patchwork.libcamera.org/api/people/140/","name":"Robert Mader","email":"robert.mader@collabora.com"},"content":"On 26.06.26 13:33, Bryan O'Donoghue wrote:\n> The internet box tells me that glTextSubImage2D lets us update a texture's\n> data only, instead of recreating the texture and uploading data.\n>\n> This is a smallish optimisation but we are hunting for every possible cycle\n> and watt so add the routine as precursor to using it in-place of\n> createTexture2D on every upload cycle.\n>\n> Reviewed-by: Robert Mader <robert.mader@collabora.com>\n> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>\n> ---\n>   include/libcamera/internal/egl.h |  1 +\n>   src/libcamera/egl.cpp            | 35 ++++++++++++++++++++++++++++++++\n>   2 files changed, 36 insertions(+)\n>\n> diff --git a/include/libcamera/internal/egl.h b/include/libcamera/internal/egl.h\n> index e24a726dc..9b679332c 100644\n> --- a/include/libcamera/internal/egl.h\n> +++ b/include/libcamera/internal/egl.h\n> @@ -108,6 +108,7 @@ public:\n>   \tint createInputDMABufTexture2D(eGLImage &eglImage, int fd);\n>   \tint createOutputDMABufTexture2D(eGLImage &eglImage, int fd);\n>   \tvoid createTexture2D(eGLImage &eglImage, void *data);\n> +\tvoid updateTexture2D(eGLImage &eglImage, void *data);\n>   \tvoid createOutputTexture2D(eGLImage &eglImage);\n>   \n>   \tint attachTextureToFBO(eGLImage &eglImage);\n> diff --git a/src/libcamera/egl.cpp b/src/libcamera/egl.cpp\n> index 8e8d61813..22f46e92a 100644\n> --- a/src/libcamera/egl.cpp\n> +++ b/src/libcamera/egl.cpp\n> @@ -329,6 +329,41 @@ bool eGL::isAvailable()\n>   \treturn true;\n>   }\n>   \n> +/**\n> + * \\brief Update a 2D texture already created\n> + * \\param[in,out] eglImage EGL image to associate with the texture\n> + * \\param[data] Data to update the texture with\n> + *\n> + * Updates a 2D texture in VRAM.\n> + */\n> +void eGL::updateTexture2D(eGLImage &eglImage, void *data)\n> +{\n> +\tGLenum format;\n> +\tGLenum type = GL_UNSIGNED_BYTE;\n> +\n> +\tASSERT(tid_ == Thread::currentId());\n> +\n> +\tglActiveTexture(eglImage.texture_unit_);\n> +\tglBindTexture(GL_TEXTURE_2D, eglImage.texture_);\nAs mentioned before I think it would be better to move this commit after \nthe next so you can use \"activateBindTexture()\" here.\n> +\n> +\tswitch (eglImage.format_) {\n> +\tcase GL_R16F:\n> +\t\tformat = GL_RED;\n> +\t\ttype = GL_HALF_FLOAT;\n> +\t\tbreak;\n> +\tcase GL_RG8:\n> +\t\tformat = GL_RG;\n> +\t\tbreak;\n> +\tcase GL_LUMINANCE:\n> +\tdefault:\n> +\t\tformat = GL_LUMINANCE;\n> +\t\tbreak;\n> +\t}\nThis should be removed now as well.\n> +\n> +\t// Update an already exsiting texture\n> +\tglTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, eglImage.width_, eglImage.height_, format, type, data);\n> +}\n> +\n>   /**\n>    * \\brief Create a 2D texture attached to an FBO for render-to-texture\n>    * \\param[in,out] eglImage EGL image to associate with the texture\nJust some suggestions for cleanups - my R-B still holds.","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 58952BF415\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 26 Jun 2026 12:10:09 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C6BC665EDE;\n\tFri, 26 Jun 2026 14:10:08 +0200 (CEST)","from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com\n\t[136.143.188.112])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 41F9D658FC\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 26 Jun 2026 14:10:06 +0200 (CEST)","by mx.zohomail.com with SMTPS id 1782475800480478.5405261681566;\n\tFri, 26 Jun 2026 05:10:00 -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=\"cM/3WmQY\"; \n\tdkim-atps=neutral","ARC-Seal":"i=1; a=rsa-sha256; t=1782475802; cv=none; \n\td=zohomail.com; s=zohoarc; \n\tb=nO/53735h9PEgjIsMGgwE4MqY9Ly6Vy9NiM199TU6mimcgrUaVFf6CQ/ej8liNDdLEeiyRdzAULWLp+cQ6wTPL/CERJVYYo8x+6tDx+YS+OxIaYxc7lPjdKljdctcxhNM95CZInRLBNSb/OeVMamWEPdvv1fnMtApUV91lK8j/A=","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; \n\ts=zohoarc; t=1782475802;\n\th=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To;\n\tbh=evbwDNG3kmV6AQsmffxXDeRB0gC5MHznsQJt5V1D/AI=; \n\tb=i3zBVOkL2vEmp0P24IsoTFcX+F4mgRwmkNLMhc2R41XUCygaMtCSZaVlopJdnHZeOXkylM2m/7DT+Txe/+67s+E5JEB8ZAOEdFyikrvHgQDWTu3TuFtXl5i6v/P9hBG+MJvUQbcO8DX9grTQb/fSj8mj4UzcZGow9IK4DGYvSto=","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=1782475802;\n\ts=zohomail; d=collabora.com; i=robert.mader@collabora.com;\n\th=Message-ID:Date:Date:MIME-Version:Subject:Subject:To:To:Cc:Cc:References:From:From:In-Reply-To:Content-Type:Content-Transfer-Encoding:Message-Id:Reply-To;\n\tbh=evbwDNG3kmV6AQsmffxXDeRB0gC5MHznsQJt5V1D/AI=;\n\tb=cM/3WmQYuvAryg1yl0o1aayM97udH7lNKrCOvN9q74RfL/5/ttkz/nP9r7gDZiF0\n\tzOsH5m/hwP95a+kpkJuZduSFz9Y0gzOZoweJtvV+jcbWc7COCq29tvcSr9sf7+/WiLg\n\tZcuaEMgrx3OFnXmm5VT8AQErBfGVL43EuXGw1rdk=","Message-ID":"<206c4785-2425-431f-aee6-3ecc6cbc9aa9@collabora.com>","Date":"Fri, 26 Jun 2026 14:09:58 +0200","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH v3 5/8] libcamera: egl: Add updateTexture2D","To":"Bryan O'Donoghue <bryan.odonoghue@linaro.org>,\n\tlibcamera-devel@lists.libcamera.org","Cc":"pavel@ucw.cz","References":"<20260626113325.3218045-1-bryan.odonoghue@linaro.org>\n\t<20260626113325.3218045-6-bryan.odonoghue@linaro.org>","Content-Language":"en-US, de-DE, en-GB","From":"Robert Mader <robert.mader@collabora.com>","In-Reply-To":"<20260626113325.3218045-6-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":39459,"web_url":"https://patchwork.libcamera.org/comment/39459/","msgid":"<ce7819d6-74d3-4123-ae1d-e8b8e4cd20e7@linaro.org>","date":"2026-06-26T12:13:44","subject":"Re: [PATCH v3 5/8] libcamera: egl: Add updateTexture2D","submitter":{"id":175,"url":"https://patchwork.libcamera.org/api/people/175/","name":"Bryan O'Donoghue","email":"bryan.odonoghue@linaro.org"},"content":"On 26/06/2026 13:09, Robert Mader wrote:\n> On 26.06.26 13:33, Bryan O'Donoghue wrote:\n>> The internet box tells me that glTextSubImage2D lets us update a \n>> texture's\n>> data only, instead of recreating the texture and uploading data.\n>>\n>> This is a smallish optimisation but we are hunting for every possible \n>> cycle\n>> and watt so add the routine as precursor to using it in-place of\n>> createTexture2D on every upload cycle.\n>>\n>> Reviewed-by: Robert Mader <robert.mader@collabora.com>\n>> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>\n>> ---\n>>   include/libcamera/internal/egl.h |  1 +\n>>   src/libcamera/egl.cpp            | 35 ++++++++++++++++++++++++++++++++\n>>   2 files changed, 36 insertions(+)\n>>\n>> diff --git a/include/libcamera/internal/egl.h b/include/libcamera/ \n>> internal/egl.h\n>> index e24a726dc..9b679332c 100644\n>> --- a/include/libcamera/internal/egl.h\n>> +++ b/include/libcamera/internal/egl.h\n>> @@ -108,6 +108,7 @@ public:\n>>       int createInputDMABufTexture2D(eGLImage &eglImage, int fd);\n>>       int createOutputDMABufTexture2D(eGLImage &eglImage, int fd);\n>>       void createTexture2D(eGLImage &eglImage, void *data);\n>> +    void updateTexture2D(eGLImage &eglImage, void *data);\n>>       void createOutputTexture2D(eGLImage &eglImage);\n>>       int attachTextureToFBO(eGLImage &eglImage);\n>> diff --git a/src/libcamera/egl.cpp b/src/libcamera/egl.cpp\n>> index 8e8d61813..22f46e92a 100644\n>> --- a/src/libcamera/egl.cpp\n>> +++ b/src/libcamera/egl.cpp\n>> @@ -329,6 +329,41 @@ bool eGL::isAvailable()\n>>       return true;\n>>   }\n>> +/**\n>> + * \\brief Update a 2D texture already created\n>> + * \\param[in,out] eglImage EGL image to associate with the texture\n>> + * \\param[data] Data to update the texture with\n>> + *\n>> + * Updates a 2D texture in VRAM.\n>> + */\n>> +void eGL::updateTexture2D(eGLImage &eglImage, void *data)\n>> +{\n>> +    GLenum format;\n>> +    GLenum type = GL_UNSIGNED_BYTE;\n>> +\n>> +    ASSERT(tid_ == Thread::currentId());\n>> +\n>> +    glActiveTexture(eglImage.texture_unit_);\n>> +    glBindTexture(GL_TEXTURE_2D, eglImage.texture_);\n> As mentioned before I think it would be better to move this commit after \n> the next so you can use \"activateBindTexture()\" here.\n\nAh, now I get what you said.\n\nMy brain runs hiberno-english and said `no comprendo` at the last \niteration..\n\n\n>> +\n>> +    switch (eglImage.format_) {\n>> +    case GL_R16F:\n>> +        format = GL_RED;\n>> +        type = GL_HALF_FLOAT;\n>> +        break;\n>> +    case GL_RG8:\n>> +        format = GL_RG;\n>> +        break;\n>> +    case GL_LUMINANCE:\n>> +    default:\n>> +        format = GL_LUMINANCE;\n>> +        break;\n>> +    }\n> This should be removed now as well.\n\neh.  yes\n\n>> +\n>> +    // Update an already exsiting texture\n>> +    glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, eglImage.width_, \n>> eglImage.height_, format, type, data);\n>> +}\n>> +\n>>   /**\n>>    * \\brief Create a 2D texture attached to an FBO for render-to-texture\n>>    * \\param[in,out] eglImage EGL image to associate with the texture\n> Just some suggestions for cleanups - my R-B still holds.","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 4D692BF415\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 26 Jun 2026 12:13:49 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 0A87565EE1;\n\tFri, 26 Jun 2026 14:13:49 +0200 (CEST)","from mail-wm1-x331.google.com (mail-wm1-x331.google.com\n\t[IPv6:2a00:1450:4864:20::331])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 098B4658FC\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 26 Jun 2026 14:13:47 +0200 (CEST)","by mail-wm1-x331.google.com with SMTP id\n\t5b1f17b1804b1-4921eed3fa2so6336865e9.0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 26 Jun 2026 05:13:47 -0700 (PDT)","from [192.168.0.101] ([109.76.78.98])\n\tby smtp.gmail.com with ESMTPSA id\n\t5b1f17b1804b1-49269002511sm73477375e9.8.2026.06.26.05.13.45\n\t(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n\tFri, 26 Jun 2026 05:13:45 -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=\"Q59NenlA\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=linaro.org; s=google; t=1782476026; x=1783080826;\n\tdarn=lists.libcamera.org; \n\th=content-transfer-encoding:in-reply-to:content-language:from\n\t:references:cc:to:subject:user-agent:mime-version:date:message-id\n\t:from:to:cc:subject:date:message-id:reply-to;\n\tbh=3jACEvlW5BW0UdPXvAl0sC65lb7a9dxIxjcDiXHNwcU=;\n\tb=Q59NenlA+facjcoAYLyVc6vopQ3Xjx8VEXHdMN08xISvGprbPja4TkYTHFpw0p88+G\n\tcGy9IDVEVVWR/EFoZfCy9nBN5GCjefUP6oSjerwBCTxaCsMr2SvI1Dx67bibqo7BIH9q\n\t378FOl79R1kLrkmdAtSvxBp5fI4+kOMOUMnkM3zktKT7M94c0VP4AAefXLoIES9rK/fO\n\tAMjZ6BGk592lLMCQwYNvy4PlM8xvzgEDVUQpwiDdeRWL0+CcENwsksGPZ4nATY8kv8kk\n\tlQV8l6r7ecHRvhF2oEkE86YxACXjUSY+Xu4CNrVAzDQqZVc+dWhcJoqhlcCa209zuLm8\n\tXx5A==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20251104; t=1782476026; x=1783080826;\n\th=content-transfer-encoding:in-reply-to:content-language:from\n\t:references:cc:to:subject:user-agent:mime-version:date:message-id\n\t:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id\n\t:reply-to;\n\tbh=3jACEvlW5BW0UdPXvAl0sC65lb7a9dxIxjcDiXHNwcU=;\n\tb=ZQ1YGXKHBk9ZbUTNyModpUmLyKrtIRtPNqE4DmQ1se+/tt6cM4k8QSkRnRrZbyvfJK\n\tPnKF1VvTdBDd1G9eKCY77Wi8mnHqT4syWP32aMOVi7jL8mZvzar43jUVHKn9f8mTyGWb\n\tYNnqPCaZ9A+jfbnbmeDs1XRtP/q4iuFLL75j+L3umRbTgCamB6yfzuv6cKsHcSqCQBtB\n\tfwcIUtKHitsUHw4lHeUjt1kOYJ0jMFs5+lxQTgqtrfAh8+vgye00KryWGHDjBRly1c0F\n\tjU/9lDbDKArc0W2gFX4FN1vWgFkMTbBniSux23i7Q9lUdpUTyyurBl4+Mtn6hekKdGvz\n\tg7hw==","X-Forwarded-Encrypted":"i=1;\n\tAFNElJ9k4rWI6wQniljxo7pN3nY4YnFsn6GhZbZqDzgU6epGSVXMkIxfPeRDh7QmdQraiKMWT6B8Jp9vGoLJitHzkpo=@lists.libcamera.org","X-Gm-Message-State":"AOJu0Yw0FbHr+sFE1luJRR1L/fajclB1HKZKP7K0uIMQXDtLbBM2A2Vb\n\tYz5ILMktpFghpGOTzLOF0NYYult9Hd7XA13T03SfmnyYjcckmKswrMvw7autZ7IeKI0=","X-Gm-Gg":"AfdE7cn9AvxH7/kh66gzTIrRUDcp5hM7s+tyWGHIyllaMYkvYAxSjtP76RHjW9NtCYB\n\tfs5OssFOUnlaImQ2RmacI78kz97Cgp5R9cNuIMiqDHqHpMSrk93w8UTiz+qbhtbs1ZebhWhVY5X\n\tcT3NRQmKMKRN01IL/IbkwHGWmPJTcXFx3JGCjxZrs0zmZQQROe30iXoL+pWWSxgNfxe5oRHVHi4\n\tSiY01zHAoQZGjaO9ExcJJxe+zAyMEkXhKv/EMdslwwfqk65Nlla78ZPY436ZEZyoGdDq1KDQgmq\n\t4ErH3FUTqT7xn3GBIe8j+JIgZXzi5QObrK/u05shmVy97tevoElMQi1TNWq9rSPyLmvCKKm9Cnq\n\tIXp86dnRt4rEtB6Q5/VjFqkkuOsK0Kk8Epuo/2Np8J4QzR28fTTK6EttnlF9cI1fpY+igGc40ix\n\tGgzMAYcHToEeGaYiGelvy7UHc=","X-Received":"by 2002:a05:600c:3483:b0:490:b58a:dcc1 with SMTP id\n\t5b1f17b1804b1-492668ac06dmr88134025e9.29.1782476026474; \n\tFri, 26 Jun 2026 05:13:46 -0700 (PDT)","Message-ID":"<ce7819d6-74d3-4123-ae1d-e8b8e4cd20e7@linaro.org>","Date":"Fri, 26 Jun 2026 13:13:44 +0100","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH v3 5/8] libcamera: egl: Add updateTexture2D","To":"Robert Mader <robert.mader@collabora.com>,\n\tlibcamera-devel@lists.libcamera.org","Cc":"pavel@ucw.cz","References":"<20260626113325.3218045-1-bryan.odonoghue@linaro.org>\n\t<20260626113325.3218045-6-bryan.odonoghue@linaro.org>\n\t<206c4785-2425-431f-aee6-3ecc6cbc9aa9@collabora.com>","From":"Bryan O'Donoghue <bryan.odonoghue@linaro.org>","Content-Language":"en-US","In-Reply-To":"<206c4785-2425-431f-aee6-3ecc6cbc9aa9@collabora.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":39462,"web_url":"https://patchwork.libcamera.org/comment/39462/","msgid":"<851pdtlc7w.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","date":"2026-06-26T12:26:11","subject":"Re: [PATCH v3 5/8] libcamera: egl: Add updateTexture2D","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> The internet box tells me that glTextSubImage2D lets us update a texture's\n> data only, instead of recreating the texture and uploading data.\n>\n> This is a smallish optimisation but we are hunting for every possible cycle\n> and watt so add the routine as precursor to using it in-place of\n> createTexture2D on every upload cycle.\n>\n> Reviewed-by: Robert Mader <robert.mader@collabora.com>\n> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>\n> ---\n>  include/libcamera/internal/egl.h |  1 +\n>  src/libcamera/egl.cpp            | 35 ++++++++++++++++++++++++++++++++\n>  2 files changed, 36 insertions(+)\n>\n> diff --git a/include/libcamera/internal/egl.h b/include/libcamera/internal/egl.h\n> index e24a726dc..9b679332c 100644\n> --- a/include/libcamera/internal/egl.h\n> +++ b/include/libcamera/internal/egl.h\n> @@ -108,6 +108,7 @@ public:\n>  \tint createInputDMABufTexture2D(eGLImage &eglImage, int fd);\n>  \tint createOutputDMABufTexture2D(eGLImage &eglImage, int fd);\n>  \tvoid createTexture2D(eGLImage &eglImage, void *data);\n> +\tvoid updateTexture2D(eGLImage &eglImage, void *data);\n>  \tvoid createOutputTexture2D(eGLImage &eglImage);\n>  \n>  \tint attachTextureToFBO(eGLImage &eglImage);\n> diff --git a/src/libcamera/egl.cpp b/src/libcamera/egl.cpp\n> index 8e8d61813..22f46e92a 100644\n> --- a/src/libcamera/egl.cpp\n> +++ b/src/libcamera/egl.cpp\n> @@ -329,6 +329,41 @@ bool eGL::isAvailable()\n>  \treturn true;\n>  }\n>  \n> +/**\n> + * \\brief Update a 2D texture already created\n> + * \\param[in,out] eglImage EGL image to associate with the texture\n> + * \\param[data] Data to update the texture with\n> + *\n> + * Updates a 2D texture in VRAM.\n> + */\n> +void eGL::updateTexture2D(eGLImage &eglImage, void *data)\n> +{\n> +\tGLenum format;\n\nUninitialised.\n\n> +\tGLenum type = GL_UNSIGNED_BYTE;\n> +\n> +\tASSERT(tid_ == Thread::currentId());\n> +\n> +\tglActiveTexture(eglImage.texture_unit_);\n> +\tglBindTexture(GL_TEXTURE_2D, eglImage.texture_);\n> +\n> +\tswitch (eglImage.format_) {\n> +\tcase GL_R16F:\n> +\t\tformat = GL_RED;\n> +\t\ttype = GL_HALF_FLOAT;\n> +\t\tbreak;\n> +\tcase GL_RG8:\n> +\t\tformat = GL_RG;\n> +\t\tbreak;\n> +\tcase GL_LUMINANCE:\n> +\tdefault:\n> +\t\tformat = GL_LUMINANCE;\n> +\t\tbreak;\n> +\t}\n> +\n> +\t// Update an already exsiting texture\n\nC-style\n\ns/exsiting/existing/\n\n> +\tglTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, eglImage.width_, eglImage.height_, format, type, data);\n> +}\n> +\n>  /**\n>   * \\brief Create a 2D texture attached to an FBO for render-to-texture\n>   * \\param[in,out] eglImage EGL image to associate with the texture","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 E9AB7C3264\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 26 Jun 2026 12:26:19 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 13CB165EE1;\n\tFri, 26 Jun 2026 14:26:19 +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 4BB9D658FA\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 26 Jun 2026 14:26:17 +0200 (CEST)","from mail-wr1-f69.google.com (mail-wr1-f69.google.com\n\t[209.85.221.69]) by relay.mimecast.com with ESMTP with STARTTLS\n\t(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n\tus-mta-124-6GhqdVDHOGeKaWiJU3wqaw-1; Fri, 26 Jun 2026 08:26:14 -0400","by mail-wr1-f69.google.com with SMTP id\n\tffacd0b85a97d-46cfd1fe676so479049f8f.0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 26 Jun 2026 05:26:14 -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-46d3ba68d8dsm18556403f8f.27.2026.06.26.05.26.12\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tFri, 26 Jun 2026 05:26:12 -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=\"bHMZagCg\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1782476776;\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=gdPKXpLg41XvN+Y1IiXzun2qN1oC5CTp2RYe0lGmSUA=;\n\tb=bHMZagCgiaeywNFevxqul224biun8mOZXltt+I0Q1zx3C7ZLyaetkbT8V0NKS+JSODWU6y\n\t+uccIjGyBSKA/xpxq2Rs3iejji7yhbTDkib7lqUGunMQdShS7VOXV1mCgLe35mqZ/UKWsu\n\tMX39VgTEpb9eruhCuRaNzgrJ0i4338Q=","X-MC-Unique":"6GhqdVDHOGeKaWiJU3wqaw-1","X-Mimecast-MFC-AGG-ID":"6GhqdVDHOGeKaWiJU3wqaw_1782476773","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20251104; t=1782476773; x=1783081573;\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=gdPKXpLg41XvN+Y1IiXzun2qN1oC5CTp2RYe0lGmSUA=;\n\tb=eE2NgAmFfZaPti01yuiBZYDLlLlJ6EZPFxiCwJKgIt41GQGkx0OIO96LyxTGl3DhZB\n\t2OSFZh8gKOEAL54nImxfkWXtittSRJVbqqzDDJ7eU2FFGEfGyhPXYDkfvbfgsO5IfR3U\n\tkM4JDbXVYqjNsHtcEf6mWTln+2L5QnnOWiTCW9LCA14wVTxqlJlqvA7+yfyXX3mGVcnY\n\t668g65sNsAbjcGQiIpHTutobMrpIvl7DaFNf3pV4HfNy3UOsGZ6AEIeiiqs1SsbJP0Ln\n\tj7vdf1TK/vcLs56NiHRe8yihRZgqlD63VGmwXqrBVMqcz+daJKjBXDsP93BJZU7DGWNa\n\tSqAQ==","X-Gm-Message-State":"AOJu0Yz0rjzhHCw0jPHrS3KZIXn91FD8SFf6Eg57xOSOAk0lDwylDiPN\n\txN0+NDRQoHSI/+LjDfjZPGUIZVt/JAbzGADnT4Nw/tYDh9rWZRQFe3UB2da0n+Tl9NirQaSO/hm\n\t5KPP14qxgp510A97JhHpr146ZYPzy1jeOkm7jdJOQ37ffYfsnc1DEYaaaQZmGJh05eR7ObojTZ4\n\tk=","X-Gm-Gg":"AfdE7ck9YyZQ+byIR0KA7SL71OYDL2D9hn4xACEUh0pqSfkSTwS12bOJbCDDQyt+1PX\n\ti4vRwNmoOajxyR2vNojwBzFRsdYPYfIJ6P1lzLFqbC4+cQsGeOqjN6KdWRJdyj9fW/gRF8iX2bq\n\tTVVnjko3q720OAeICbXsVioifZOy0FGUdkg7G57cQ8XXpiJLsJCXEovL2wctrzOd3Ei3xcsYs1/\n\tQrDb8OD/05FqeJQBjiBfvdYj42cbsYdjFmliORAFBUo4scJe+naTmE5oAX/Up+EOK2yGi+S2N0L\n\ta0VFz7YzmPVouPjp2tPc3g1PqKns7fCM+SjH2iqvOgg9W2SG6iA7DJRN3oPxLPqeQ7I0q8Y3NU/\n\tPvz5ji/jI+l4B7kGM5piVMz714XPuuL+c+k/bwMt2HJsVDP6eZ7YnuauLTbuCx5FA","X-Received":["by 2002:a5d:5f4c:0:b0:461:a161:8102 with SMTP id\n\tffacd0b85a97d-46dc11e3ce4mr10448474f8f.28.1782476773466; \n\tFri, 26 Jun 2026 05:26:13 -0700 (PDT)","by 2002:a5d:5f4c:0:b0:461:a161:8102 with SMTP id\n\tffacd0b85a97d-46dc11e3ce4mr10448428f8f.28.1782476773058; \n\tFri, 26 Jun 2026 05:26:13 -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,  Robert Mader\n\t<robert.mader@collabora.com>","Subject":"Re: [PATCH v3 5/8] libcamera: egl: Add updateTexture2D","In-Reply-To":"<20260626113325.3218045-6-bryan.odonoghue@linaro.org> (Bryan\n\tO'Donoghue's message of \"Fri, 26 Jun 2026 12:33:22 +0100\")","References":"<20260626113325.3218045-1-bryan.odonoghue@linaro.org>\n\t<20260626113325.3218045-6-bryan.odonoghue@linaro.org>","Date":"Fri, 26 Jun 2026 14:26:11 +0200","Message-ID":"<851pdtlc7w.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":"EVBC4obeBoYhsovCF7UzsL3KkwcYTwtCmHEhJIvUW7w_1782476773","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>"}},{"id":39472,"web_url":"https://patchwork.libcamera.org/comment/39472/","msgid":"<858q81jtc3.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","date":"2026-06-26T13:59:24","subject":"Re: [PATCH v3 5/8] libcamera: egl: Add updateTexture2D","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> The internet box tells me that glTextSubImage2D lets us update a texture's\n> data only, instead of recreating the texture and uploading data.\n>\n> This is a smallish optimisation but we are hunting for every possible cycle\n> and watt so add the routine as precursor to using it in-place of\n> createTexture2D on every upload cycle.\n>\n> Reviewed-by: Robert Mader <robert.mader@collabora.com>\n> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>\n> ---\n>  include/libcamera/internal/egl.h |  1 +\n>  src/libcamera/egl.cpp            | 35 ++++++++++++++++++++++++++++++++\n>  2 files changed, 36 insertions(+)\n>\n> diff --git a/include/libcamera/internal/egl.h b/include/libcamera/internal/egl.h\n> index e24a726dc..9b679332c 100644\n> --- a/include/libcamera/internal/egl.h\n> +++ b/include/libcamera/internal/egl.h\n> @@ -108,6 +108,7 @@ public:\n>  \tint createInputDMABufTexture2D(eGLImage &eglImage, int fd);\n>  \tint createOutputDMABufTexture2D(eGLImage &eglImage, int fd);\n>  \tvoid createTexture2D(eGLImage &eglImage, void *data);\n> +\tvoid updateTexture2D(eGLImage &eglImage, void *data);\n>  \tvoid createOutputTexture2D(eGLImage &eglImage);\n>  \n>  \tint attachTextureToFBO(eGLImage &eglImage);\n> diff --git a/src/libcamera/egl.cpp b/src/libcamera/egl.cpp\n> index 8e8d61813..22f46e92a 100644\n> --- a/src/libcamera/egl.cpp\n> +++ b/src/libcamera/egl.cpp\n> @@ -329,6 +329,41 @@ bool eGL::isAvailable()\n>  \treturn true;\n>  }\n>  \n> +/**\n> + * \\brief Update a 2D texture already created\n> + * \\param[in,out] eglImage EGL image to associate with the texture\n> + * \\param[data] Data to update the texture with\n> + *\n> + * Updates a 2D texture in VRAM.\n> + */\n> +void eGL::updateTexture2D(eGLImage &eglImage, void *data)\n> +{\n> +\tGLenum format;\n> +\tGLenum type = GL_UNSIGNED_BYTE;\n> +\n> +\tASSERT(tid_ == Thread::currentId());\n> +\n> +\tglActiveTexture(eglImage.texture_unit_);\n> +\tglBindTexture(GL_TEXTURE_2D, eglImage.texture_);\n> +\n> +\tswitch (eglImage.format_) {\n> +\tcase GL_R16F:\n> +\t\tformat = GL_RED;\n> +\t\ttype = GL_HALF_FLOAT;\n> +\t\tbreak;\n> +\tcase GL_RG8:\n> +\t\tformat = GL_RG;\n> +\t\tbreak;\n> +\tcase GL_LUMINANCE:\n> +\tdefault:\n> +\t\tformat = GL_LUMINANCE;\n> +\t\tbreak;\n> +\t}\n> +\n> +\t// Update an already exsiting texture\n> +\tglTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, eglImage.width_, eglImage.height_, format, type, data);\n\nThis fails in my environment with GL_INVALID_OPERATION.  Which means:\n\n  GL_INVALID_OPERATION is generated by glTextureSubImage2D if texture is\n  not the name of an existing texture object.\n\nWhich is misleading because the real cause seems to be that\neglImage.format_ is GL_RG, which is not represented in the switch.  When\nI use it instead GL_RG8, it works.\n\n> +}\n> +\n>  /**\n>   * \\brief Create a 2D texture attached to an FBO for render-to-texture\n>   * \\param[in,out] eglImage EGL image to associate with the texture","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 9054EBF415\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 26 Jun 2026 13:59:33 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id AEFE865EF6;\n\tFri, 26 Jun 2026 15:59:32 +0200 (CEST)","from us-smtp-delivery-124.mimecast.com\n\t(us-smtp-delivery-124.mimecast.com [170.10.129.124])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 5A35065BB8\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 26 Jun 2026 15:59:30 +0200 (CEST)","from mail-wr1-f71.google.com (mail-wr1-f71.google.com\n\t[209.85.221.71]) by relay.mimecast.com with ESMTP with STARTTLS\n\t(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n\tus-mta-605-oP27aoVMM7eGgP-3z3iaNA-1; Fri, 26 Jun 2026 09:59:27 -0400","by mail-wr1-f71.google.com with SMTP id\n\tffacd0b85a97d-4639f122c38so691459f8f.1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 26 Jun 2026 06:59:27 -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\t5b1f17b1804b1-49268fc0f32sm82439275e9.3.2026.06.26.06.59.24\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tFri, 26 Jun 2026 06:59:25 -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=\"h25Ha4o7\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1782482369;\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=VrM3SHtr/nXM1m2c/qwHTEzf5XsNd5hUbCwkNA6X43Y=;\n\tb=h25Ha4o7HLwkw313Car4MknSqEOIW4J400FeplCT//A3k1hIsC6g0osZ+zuXyp/J2qwEa4\n\tGAbJmOPAlYJ+58ya1oa31xJURkGmn9tR6ebIVyWU1F/wlxPRnHLReBFe4JXWhMTUXaNSF/\n\tArSIJJk0a+pwbNxbmqdcuHrGGskpsNE=","X-MC-Unique":"oP27aoVMM7eGgP-3z3iaNA-1","X-Mimecast-MFC-AGG-ID":"oP27aoVMM7eGgP-3z3iaNA_1782482367","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20251104; t=1782482366; x=1783087166;\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=VrM3SHtr/nXM1m2c/qwHTEzf5XsNd5hUbCwkNA6X43Y=;\n\tb=ER0ke/DqUi9i6r0RzkROg1BzhSuturtMOIdBUdASiTt1q9Vpp1WUHLe0M0gKjbvGkr\n\tzyQhp4JQRsqcCENU7VdWDUQq1NoqkCVKwoyl6uL4mbfDlBPpKyDOoyB7obT+0c5qT0Cf\n\t3AqHdxQMstHoHFudq9VBWM48a84ZFOSxlTp9X2RBZfd1aoW6uJgGrwDP1YXFhhcpICoC\n\tXSfspOYchLE2UzR08on5T6FnoBfrTI5NRDwDgEq3r0AXGsrwB1IKIyb4pq7tqYjpCZfi\n\tf3YWYcIY48vmJjIPsQ2YlWmmZ9fwLX7FSLOnbWQdAeE2C/ynk+rnGiIO0eCIt02Y/Sow\n\tIvxA==","X-Gm-Message-State":"AOJu0YxQNcOGawxuqyVVXzGhxxPFNV9DKgxuo6Ms9B7fS0uwqcVQXIe6\n\ttzqwmb4cxwISgrJmcxuXMFUs196tAtkhTDeZOiStlbLxtthsIyQpSMlyR7iHIofax7Sui2XV9c8\n\tOXx4XUMRzaaJ6xKyDgCXlmr87YpT7Ouuf7ZfSPi1/h9ZeojaR3eyQBV68/3iGvdY1UsgJVySY2d\n\tw=","X-Gm-Gg":"AfdE7cmMcspimSqYRCp1MBNF96mj4+GEfsa6cPrDOruqSBkk8JRHtwWz+tveD+NYbKq\n\tyhvActm0szIZvdMbojeUxFL5LGsv0sKeeWkYa81xxulo4ZRiVfDnw4Pjcf4UZ534VGZVWmZuBzF\n\t5edX7QfvQ6miV38mr1Rx1wu0wNN7TEQjXzRYSoUMbaSCGhZJ5+ZwmpRicwLb/ytTIX2628gDDtE\n\tkdE+C66D4+hhgVrZpFJsLPZ3EseOHMiszNv0EFkdxhn4p0Y4dRMux3sfULbqk4xy1qUMN3lo2g4\n\tNmTZz1TxYqt7P26gqOlXR1Sg95/jDW3/VBFnAr8QDkDSq/eZ7kLrT2cIZ6g1M8hv2rtRYqv9IUG\n\t1KrYTFz9JQuu56q/xKvZjL5p6d4/hjRthA6mJhVSE9FbINzfilTDH2ziM8AOvpsEe","X-Received":["by 2002:a05:600c:4443:b0:490:688b:f9f8 with SMTP id\n\t5b1f17b1804b1-4926fc8cd5fmr15680925e9.27.1782482366385; \n\tFri, 26 Jun 2026 06:59:26 -0700 (PDT)","by 2002:a05:600c:4443:b0:490:688b:f9f8 with SMTP id\n\t5b1f17b1804b1-4926fc8cd5fmr15680225e9.27.1782482365872; \n\tFri, 26 Jun 2026 06:59:25 -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,  Robert Mader\n\t<robert.mader@collabora.com>","Subject":"Re: [PATCH v3 5/8] libcamera: egl: Add updateTexture2D","In-Reply-To":"<20260626113325.3218045-6-bryan.odonoghue@linaro.org> (Bryan\n\tO'Donoghue's message of \"Fri, 26 Jun 2026 12:33:22 +0100\")","References":"<20260626113325.3218045-1-bryan.odonoghue@linaro.org>\n\t<20260626113325.3218045-6-bryan.odonoghue@linaro.org>","Date":"Fri, 26 Jun 2026 15:59:24 +0200","Message-ID":"<858q81jtc3.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":"NKPy2cRRymsZ1r6CbYONOb_karM5QshPNhwcbajmDCA_1782482367","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>"}}]