[{"id":38989,"web_url":"https://patchwork.libcamera.org/comment/38989/","msgid":"<20260603184834.GA941261@killaraus.ideasonboard.com>","date":"2026-06-03T21:04:17","subject":"Re: [PATCH] libcamera: software_isp: Probe EGL availability before\n\tcreating DebayerEGL","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"On Wed, Jun 03, 2026 at 07:25:34PM +0900, Qi Hou wrote:\n> When HAVE_DEBAYER_EGL is enabled, the SoftwareIsp constructor\n> unconditionally creates a DebayerEGL instance. The DebayerEGL\n> constructor always succeeds because it merely stores pointers without\n> initialising the EGL context. The actual EGL initialisation is deferred\n> to DebayerEGL::start(), which calls eGL::initEGLContext(). If the\n> platform lacks a surfaceless EGL display (e.g. i.MX8MM without Mesa\n> surfaceless support), eglGetPlatformDisplay(EGL_PLATFORM_SURFACELESS_MESA)\n> fails and start() returns -ENODEV. At that point, the SwStatsCpu\n> ownership has already been moved into the unusable DebayerEGL instance,\n> making a fallback to DebayerCpu impossible.\n> \n> Fix this by adding a static DebayerEGL::isEGLAvailable() method that\n> probes whether EGL surfaceless rendering can be initialised. It\n> attempts eglGetPlatformDisplay() + eglInitialize() and immediately\n> calls eglTerminate() to release resources. The SoftwareIsp constructor\n> now calls this probe before creating DebayerEGL. If EGL is not\n> available, DebayerEGL is not instantiated and the existing fallback\n> path naturally creates a DebayerCpu instance instead.\n\nThis duplicates code from eGL::initEGLContext(), which doesn't seem to\nbe a nice design.\n\n> Signed-off-by: Qi Hou <qi.hou@nxp.com>\n> ---\n>  src/libcamera/software_isp/debayer_egl.cpp  | 28 +++++++++++++++++++++\n>  src/libcamera/software_isp/debayer_egl.h    |  2 ++\n>  src/libcamera/software_isp/software_isp.cpp | 10 ++++++--\n>  3 files changed, 38 insertions(+), 2 deletions(-)\n> \n> diff --git a/src/libcamera/software_isp/debayer_egl.cpp b/src/libcamera/software_isp/debayer_egl.cpp\n> index 7b9e02d9..cfe41447 100644\n> --- a/src/libcamera/software_isp/debayer_egl.cpp\n> +++ b/src/libcamera/software_isp/debayer_egl.cpp\n> @@ -33,6 +33,34 @@ namespace libcamera {\n>   * Implements an EGL shader based debayering solution.\n>   */\n>  \n> +/**\n> + * \\brief Probe whether EGL surfaceless rendering is available\n> + *\n> + * Performs a lightweight check by attempting to obtain an EGL display using\n> + * EGL_PLATFORM_SURFACELESS_MESA and initialising it. The display is\n> + * immediately released so that no resources are leaked. This allows the\n> + * caller to decide at construction time whether to instantiate DebayerEGL\n> + * or fall back to DebayerCpu.\n> + *\n> + * \\return true if EGL surfaceless rendering is available, false otherwise\n> + */\n> +bool DebayerEGL::isEGLAvailable()\n> +{\n> +\tif (!eglBindAPI(EGL_OPENGL_ES_API))\n> +\t\treturn false;\n> +\n> +\tEGLDisplay display = eglGetPlatformDisplay(EGL_PLATFORM_SURFACELESS_MESA,\n> +\t\t\t\t\t\t    EGL_DEFAULT_DISPLAY,\n> +\t\t\t\t\t\t    nullptr);\n> +\tif (display == EGL_NO_DISPLAY)\n> +\t\treturn false;\n> +\n> +\tEGLBoolean ret = eglInitialize(display, nullptr, nullptr);\n> +\teglTerminate(display);\n> +\n> +\treturn ret == EGL_TRUE;\n> +}\n> +\n>  /**\n>   * \\brief Construct a DebayerEGL object\n>   * \\param[in] stats Statistics processing object\n> diff --git a/src/libcamera/software_isp/debayer_egl.h b/src/libcamera/software_isp/debayer_egl.h\n> index 141fb288..945125cd 100644\n> --- a/src/libcamera/software_isp/debayer_egl.h\n> +++ b/src/libcamera/software_isp/debayer_egl.h\n> @@ -39,6 +39,8 @@ class CameraManager;\n>  class DebayerEGL : public Debayer\n>  {\n>  public:\n> +\tstatic bool isEGLAvailable();\n> +\n>  \tDebayerEGL(std::unique_ptr<SwStatsCpu> stats, const CameraManager &cm);\n>  \t~DebayerEGL();\n>  \n> diff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp\n> index 781cf02f..403efbdb 100644\n> --- a/src/libcamera/software_isp/software_isp.cpp\n> +++ b/src/libcamera/software_isp/software_isp.cpp\n> @@ -119,8 +119,14 @@ SoftwareIsp::SoftwareIsp(PipelineHandler *pipe, const CameraSensor *sensor,\n>  \t\t}\n>  \t}\n>  \n> -\tif (!softISPMode || softISPMode == \"gpu\")\n> -\t\tdebayer_ = std::make_unique<DebayerEGL>(std::move(stats), cm);\n> +\tif (!softISPMode || softISPMode == \"gpu\") {\n> +\t\tif (DebayerEGL::isEGLAvailable()) {\n> +\t\t\tdebayer_ = std::make_unique<DebayerEGL>(std::move(stats), cm);\n> +\t\t} else {\n> +\t\t\tLOG(SoftwareIsp, Info)\n> +\t\t\t\t<< \"EGL not available, falling back to CPU debayer\";\n> +\t\t}\n> +\t}\n>  \n>  #endif\n>  \tif (!debayer_)","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 2BC32C328C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  3 Jun 2026 21:04:23 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 5195D63282;\n\tWed,  3 Jun 2026 23:04:22 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id DFF7B62FE1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  3 Jun 2026 23:04:19 +0200 (CEST)","from killaraus.ideasonboard.com (85-76-49-85-nat.elisa-mobile.fi\n\t[85.76.49.85])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 65F86929;\n\tWed,  3 Jun 2026 23:03:55 +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=\"qm9EmsX/\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1780520635;\n\tbh=oxK5qzXnqS3W7a6VdraLhlvOWG5huiv/EFesgImRrUs=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=qm9EmsX/Fb2YHjmR5RD1FNBY/kpddl10eHi9u63XgO0nc/+XsHpiMaEgT+hC8/4Rl\n\t8B8zh3rujgQYK8V1NxxCA2pC9JaZsNvJrUKZRXSLiJRxPlQvI8Xw/oXlzknWrBU5Ki\n\tgUDBPhTeL/nS2wbmXfgwrXqaY4+bTc+OvzR/3NX8=","Date":"Thu, 4 Jun 2026 00:04:17 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Qi Hou <qi.hou@nxp.com>","Cc":"libcamera-devel@lists.libcamera.org, jared.hu@nxp.com,\n\tjulien.vuillaumier@nxp.com","Subject":"Re: [PATCH] libcamera: software_isp: Probe EGL availability before\n\tcreating DebayerEGL","Message-ID":"<20260603184834.GA941261@killaraus.ideasonboard.com>","References":"<20260603102534.3059900-1-qi.hou@nxp.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20260603102534.3059900-1-qi.hou@nxp.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":39023,"web_url":"https://patchwork.libcamera.org/comment/39023/","msgid":"<PAXPR04MB8285FEC8A6008BF99F26384F971A2@PAXPR04MB8285.eurprd04.prod.outlook.com>","date":"2026-06-10T09:38:56","subject":"RE: [EXT] Re: [PATCH] libcamera: software_isp: Probe EGL\n\tavailability before creating DebayerEGL","submitter":{"id":195,"url":"https://patchwork.libcamera.org/api/people/195/","name":"Qi Hou","email":"qi.hou@nxp.com"},"content":"Hi Laurent Pinchart,\n\nThanks for your review. I have sent out v2 to fix this issue.\n\nRegards,\nQi Hou\n\n-----Original Message-----\nFrom: Laurent Pinchart <laurent.pinchart@ideasonboard.com> \nSent: Thursday, June 4, 2026 5:04 AM\nTo: Qi Hou <qi.hou@nxp.com>\nCc: libcamera-devel@lists.libcamera.org; Jared Hu <jared.hu@nxp.com>; Julien Vuillaumier <julien.vuillaumier@nxp.com>\nSubject: [EXT] Re: [PATCH] libcamera: software_isp: Probe EGL availability before creating DebayerEGL\n\nCaution: This is an external email. Please take care when clicking links or opening attachments. When in doubt, report the message using the 'Report this email' button\n\n\nOn Wed, Jun 03, 2026 at 07:25:34PM +0900, Qi Hou wrote:\n> When HAVE_DEBAYER_EGL is enabled, the SoftwareIsp constructor \n> unconditionally creates a DebayerEGL instance. The DebayerEGL \n> constructor always succeeds because it merely stores pointers without \n> initialising the EGL context. The actual EGL initialisation is \n> deferred to DebayerEGL::start(), which calls eGL::initEGLContext(). If \n> the platform lacks a surfaceless EGL display (e.g. i.MX8MM without \n> Mesa surfaceless support), \n> eglGetPlatformDisplay(EGL_PLATFORM_SURFACELESS_MESA)\n> fails and start() returns -ENODEV. At that point, the SwStatsCpu \n> ownership has already been moved into the unusable DebayerEGL \n> instance, making a fallback to DebayerCpu impossible.\n>\n> Fix this by adding a static DebayerEGL::isEGLAvailable() method that \n> probes whether EGL surfaceless rendering can be initialised. It \n> attempts eglGetPlatformDisplay() + eglInitialize() and immediately \n> calls eglTerminate() to release resources. The SoftwareIsp constructor \n> now calls this probe before creating DebayerEGL. If EGL is not \n> available, DebayerEGL is not instantiated and the existing fallback \n> path naturally creates a DebayerCpu instance instead.\n\nThis duplicates code from eGL::initEGLContext(), which doesn't seem to be a nice design.\n\n> Signed-off-by: Qi Hou <qi.hou@nxp.com>\n> ---\n>  src/libcamera/software_isp/debayer_egl.cpp  | 28 +++++++++++++++++++++\n>  src/libcamera/software_isp/debayer_egl.h    |  2 ++\n>  src/libcamera/software_isp/software_isp.cpp | 10 ++++++--\n>  3 files changed, 38 insertions(+), 2 deletions(-)\n>\n> diff --git a/src/libcamera/software_isp/debayer_egl.cpp \n> b/src/libcamera/software_isp/debayer_egl.cpp\n> index 7b9e02d9..cfe41447 100644\n> --- a/src/libcamera/software_isp/debayer_egl.cpp\n> +++ b/src/libcamera/software_isp/debayer_egl.cpp\n> @@ -33,6 +33,34 @@ namespace libcamera {\n>   * Implements an EGL shader based debayering solution.\n>   */\n>\n> +/**\n> + * \\brief Probe whether EGL surfaceless rendering is available\n> + *\n> + * Performs a lightweight check by attempting to obtain an EGL \n> +display using\n> + * EGL_PLATFORM_SURFACELESS_MESA and initialising it. The display is\n> + * immediately released so that no resources are leaked. This allows \n> +the\n> + * caller to decide at construction time whether to instantiate \n> +DebayerEGL\n> + * or fall back to DebayerCpu.\n> + *\n> + * \\return true if EGL surfaceless rendering is available, false \n> +otherwise  */ bool DebayerEGL::isEGLAvailable() {\n> +     if (!eglBindAPI(EGL_OPENGL_ES_API))\n> +             return false;\n> +\n> +     EGLDisplay display = eglGetPlatformDisplay(EGL_PLATFORM_SURFACELESS_MESA,\n> +                                                 EGL_DEFAULT_DISPLAY,\n> +                                                 nullptr);\n> +     if (display == EGL_NO_DISPLAY)\n> +             return false;\n> +\n> +     EGLBoolean ret = eglInitialize(display, nullptr, nullptr);\n> +     eglTerminate(display);\n> +\n> +     return ret == EGL_TRUE;\n> +}\n> +\n>  /**\n>   * \\brief Construct a DebayerEGL object\n>   * \\param[in] stats Statistics processing object diff --git \n> a/src/libcamera/software_isp/debayer_egl.h \n> b/src/libcamera/software_isp/debayer_egl.h\n> index 141fb288..945125cd 100644\n> --- a/src/libcamera/software_isp/debayer_egl.h\n> +++ b/src/libcamera/software_isp/debayer_egl.h\n> @@ -39,6 +39,8 @@ class CameraManager;  class DebayerEGL : public \n> Debayer  {\n>  public:\n> +     static bool isEGLAvailable();\n> +\n>       DebayerEGL(std::unique_ptr<SwStatsCpu> stats, const CameraManager &cm);\n>       ~DebayerEGL();\n>\n> diff --git a/src/libcamera/software_isp/software_isp.cpp \n> b/src/libcamera/software_isp/software_isp.cpp\n> index 781cf02f..403efbdb 100644\n> --- a/src/libcamera/software_isp/software_isp.cpp\n> +++ b/src/libcamera/software_isp/software_isp.cpp\n> @@ -119,8 +119,14 @@ SoftwareIsp::SoftwareIsp(PipelineHandler *pipe, const CameraSensor *sensor,\n>               }\n>       }\n>\n> -     if (!softISPMode || softISPMode == \"gpu\")\n> -             debayer_ = std::make_unique<DebayerEGL>(std::move(stats), cm);\n> +     if (!softISPMode || softISPMode == \"gpu\") {\n> +             if (DebayerEGL::isEGLAvailable()) {\n> +                     debayer_ = std::make_unique<DebayerEGL>(std::move(stats), cm);\n> +             } else {\n> +                     LOG(SoftwareIsp, Info)\n> +                             << \"EGL not available, falling back to CPU debayer\";\n> +             }\n> +     }\n>\n>  #endif\n>       if (!debayer_)\n\n--\nRegards,\n\nLaurent Pinchart","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 9DAB3C328C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 10 Jun 2026 09:39:01 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 5C27161F01;\n\tWed, 10 Jun 2026 11:39:01 +0200 (CEST)","from DU2PR03CU002.outbound.protection.outlook.com\n\t(mail-northeuropeazlp170110003.outbound.protection.outlook.com\n\t[IPv6:2a01:111:f403:c200::3])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id B690E60989\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 10 Jun 2026 11:38:59 +0200 (CEST)","from PAXPR04MB8285.eurprd04.prod.outlook.com\n\t(2603:10a6:102:1ca::15)\n\tby GVXPR04MB11541.eurprd04.prod.outlook.com (2603:10a6:150:2c3::10)\n\twith Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.14;\n\tWed, 10 Jun 2026 09:38:56 +0000","from PAXPR04MB8285.eurprd04.prod.outlook.com\n\t([fe80::81d0:4221:c6e5:9b82]) by\n\tPAXPR04MB8285.eurprd04.prod.outlook.com\n\t([fe80::81d0:4221:c6e5:9b82%4]) with mapi id 15.21.0113.011;\n\tWed, 10 Jun 2026 09:38:56 +0000"],"Authentication-Results":["lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=nxp.com header.i=@nxp.com header.b=\"nozx4YDD\";\n\tdkim-atps=neutral","dkim=none (message not signed)\n\theader.d=none;dmarc=none action=none header.from=nxp.com;"],"ARC-Seal":"i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n\tb=VwEurr1Rk/mS7pq9ATKswEFlVqyXrhoD1LNad1KVXTpn/wlYqiwttUBKt5JVgYou9a60V0krPyj0KalW0t+GdBbjdn+QO+Lwl7mHBSVMwqZ2nwL+UuHwKL7U+xvAPPP4F9WTa8FlAxRoSga+yHHAeS+YBRhOJgDtbG1K9pkY/jkt3DdUtEs94AXYs3lm9/zXJtEFu/izOVJtLbMHlWzCdkDm2CpPtLefb+1LZwcfT7xt57dpI6MvWHDEzwBW/lIeTApNFrwy6CEsJNz/kRbBTKRo3Brzs79ebgRdPlvkiTop5y2iJyTJxEQ7AhJmZ2QN+ZgqEy/V6IGC2Q4glDmgdQ==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n\ts=arcselector10001;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n\tbh=b9PYOJI/tTBOgRQ0d+HvZA50fUnR9S0GGxQ7B+N6Xcg=;\n\tb=G77rzOw9rhjG2S/IRLZZMIofzRKzLN5q/KOkOTiNhhiWxFc5R3aw/6bZIJA++kIGFFo3WbRUH+dl80eIn4GPf5dl2bEFiPLzpn2rTttg/YWVwdWbpZZFyLE2BfQAqduatScWNa4pkXc9ykjen1wGOiFMD9F9wyuC10FWfLPe86J1Kd4LCYrFfXqXXMspAo63ZQWHJ8ehUmEjZT2LoHg7fBCdxIWlDFeFaXUrAMyFQ7rwfr6uw3KKnMgo2S+LtVJBjzZQ+YfHVUzO42zZWw7+Ye1z4GitJiCpwZpHeOl5rCujGaXL9GJ84DeTTitxclA4H7n/d/pFwkNZ52BvcXWuag==","ARC-Authentication-Results":"i=1; mx.microsoft.com 1; spf=pass\n\tsmtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com;\n\tdkim=pass header.d=nxp.com; arc=none","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n\tbh=b9PYOJI/tTBOgRQ0d+HvZA50fUnR9S0GGxQ7B+N6Xcg=;\n\tb=nozx4YDDYCjBC+H7Ohr81tMYxdIcGJJz9MgTr+MCXG3cwTIk6Q3asiyqMpKYrvgKZ+IMSioG2+iWhjCOmAfjEqsvRFCEtXwqZtVmIJWGfgMnsk6Lmqv4icu9q27dpzi8QkhUo3rH/3jcuX1Oy9rSZPLTLQsmDt0ULMCJL47WYB6YUGn4V28bhAEO+TWnlsFCoQ48a0SSAq5Q6HL3xgg4mYCsm8tEjVszEsrtMjpUCuJBMU7nPKLntZaBeR0Lq08EpK0gPJQDvuJdflWpRiSoszjYsIWwsz21dp4pkauAcu9940s5E/fYRLVuHYw7yBZvU+7puTS9lrrsqp4hb/nWcg==","From":"Qi Hou <qi.hou@nxp.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","CC":"\"libcamera-devel@lists.libcamera.org\"\n\t<libcamera-devel@lists.libcamera.org>, Jared Hu <jared.hu@nxp.com>,\n\tJulien Vuillaumier <julien.vuillaumier@nxp.com>","Subject":"RE: [EXT] Re: [PATCH] libcamera: software_isp: Probe EGL\n\tavailability before creating DebayerEGL","Thread-Topic":"[EXT] Re: [PATCH] libcamera: software_isp: Probe EGL\n\tavailability before creating DebayerEGL","Thread-Index":"AQHc80Nn1gsFh2F0hEaUS937UOqqJbYtUo2AgApArCA=","Date":"Wed, 10 Jun 2026 09:38:56 +0000","Message-ID":"<PAXPR04MB8285FEC8A6008BF99F26384F971A2@PAXPR04MB8285.eurprd04.prod.outlook.com>","References":"<20260603102534.3059900-1-qi.hou@nxp.com>\n\t<20260603184834.GA941261@killaraus.ideasonboard.com>","In-Reply-To":"<20260603184834.GA941261@killaraus.ideasonboard.com>","Accept-Language":"zh-CN, en-US","Content-Language":"en-US","X-MS-Has-Attach":"","X-MS-TNEF-Correlator":"","authentication-results":["lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=nxp.com header.i=@nxp.com header.b=\"nozx4YDD\";\n\tdkim-atps=neutral","dkim=none (message not signed)\n\theader.d=none;dmarc=none action=none header.from=nxp.com;"],"x-ms-publictraffictype":"Email","x-ms-traffictypediagnostic":"PAXPR04MB8285:EE_|GVXPR04MB11541:EE_","x-ms-office365-filtering-correlation-id":"a080dfcd-3c9f-4425-8467-08dec6d417c9","x-ld-processed":"686ea1d3-bc2b-4c6f-a92c-d99c5c301635,ExtAddr","x-ms-exchange-senderadcheck":"1","x-ms-exchange-antispam-relay":"0","x-microsoft-antispam":"BCL:0;\n\tARA:13230040|23010399003|42112799006|19092799006|1800799024|376014|366016|38070700021|18002099003|22082099003|56012099006|4143699003|11063799006;","x-microsoft-antispam-message-info":"Mr3nN1JiKMRfGuwaQ6MTreSoi01RqdMQDwMHyqoWELapWaZkGpMEeDwkoG2g+H5KHPQ2+z7mbsvZ9Yxs0bU4T6GxXteuEBJf2E+vxYxrpKwZ+pnuJ1ZArgtzjn0gERa743rxt3hIDegN23HPlODF3j4wbjE1dQqB8Q4GGOo4UbRJwcXZ3m4KQvTUKGvqzaVkiRMc2TzV8mlhdUe1EK5l2ERwZerAqfDNwyIaB8Z31bldp9Ds2XEdK2Xi48GxdR2uMalXSb8Hpg8NOsj2QGbO2J6TKTy+XlIEDpsYN7DK7vOmCJaeaxbHxYy+DOCFnja2ht/VG7luVtvug4vTdubRdmettAEIu3NAEYduh5JrBZ3lNtcyJ9rN4bidHPjub59xTX+S+6CPLX8dvad5S1YD3+BqRNEYLo9weDtcit2+01fvVu5AEU+UWQjMp/yA5d+UHaiX2LXkO7YXLf99n32lb7TL0uReJ5k/0XIoA+dUN20Y8MnYH3fg83rhnOTzO8GmDKg0gN/zRju8AQmcFVS61TM0PMwPZpeQaKTYrR/d3t3qz1PhGyzs2solghZasn80ISsZvM0BLvGrSlwj3PC55qESjXW5lYUHHiCD/7/zju03dQe1dlMH7wHmH4OWi5nxhSIiHmBCbsv5xDF7hk7D3IhdllMMgkiB4SkiD7gkRYvx6AbIOsnmVgY7IQVgs5gAaU+DXfpGIIq8vKVUSbIw4vdHF2btQ00mhvDflkXA5glmbVgfSDIrpi7UcI22JQmd","x-forefront-antispam-report":"CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n\tIPV:NLI; SFV:NSPM; H:PAXPR04MB8285.eurprd04.prod.outlook.com; PTR:;\n\tCAT:NONE; \n\tSFS:(13230040)(23010399003)(42112799006)(19092799006)(1800799024)(376014)(366016)(38070700021)(18002099003)(22082099003)(56012099006)(4143699003)(11063799006);\n\tDIR:OUT; SFP:1101; ","x-ms-exchange-antispam-messagedata-chunkcount":"1","x-ms-exchange-antispam-messagedata-0":"=?utf-8?q?U2y1VEHxCI3g5coFVLc9uHPTp?=\n\t=?utf-8?q?bAqCc1YAVvQoD00dcjkwP96Te8uH/eO4pKTfTf35jw2BGRpES2AQn3r4?=\n\t=?utf-8?q?M1EBh8paJffezNLPkd1xtnukl7IjWeMoiGJASwPLNB0IPBPfWx/JwuX1?=\n\t=?utf-8?q?ZqS5o7mADzMNdAWOt8yESu222TrR5eLDm0Nhe1O2saQXhNNzDbxlt5gC?=\n\t=?utf-8?q?S0zN/dTek+shK4mUrM9PMDYdoIYUj8vxw9Vho4pqoTSg9B3zC6w2Pw4d?=\n\t=?utf-8?q?LGykg3yQARRQctRbm0VLLXSHfIj97C+xZqsIsfx9lt2kBsgPbf0DQBEn?=\n\t=?utf-8?q?e+5zxFGIiyQbFC4+J+lDpx3z4mZzMI8hr9vjCHRaxhR6j7hZbDZt+ipy?=\n\t=?utf-8?q?oeVteLBv/UDTgE9S7+rcqt3OCUBMirFEwnYcX78q5hEiLstlIh4ligWw?=\n\t=?utf-8?q?mR/q1ul+ISyynUL9E9Laf5B+UZaCfHPWta12XIWECkCZg9tVZiJsk69i?=\n\t=?utf-8?q?RzohBPmuYLLHy2TWu/EuQno4ml5WDYDT3PDCOwEyVL/rd00YK2bFb8qw?=\n\t=?utf-8?q?Bp11nA2RD32buZI41/1iofwwX/ZNSz+DjkrH6mL2gXdbHVVHmGnGVo6t?=\n\t=?utf-8?q?Fym4ZWgcm2G8QqmQW9WdgvxeUlM59ucIP7bRSvtZCuZIpaMM8fV3ku/P?=\n\t=?utf-8?q?a24nnv9onPeWSERIQikq+lTgXPVvCV2NMp3EodDQVHWER7SROU5tHxMR?=\n\t=?utf-8?q?m9R0oW11+Pr0IEi3QTdlvwUTmoOf/w5ImEZAHcBtTqelL8nEdl0SWeRj?=\n\t=?utf-8?q?h8zbc1izsMbRK49QCRJA5H880aYVjsQsl3I/shE2oVHsjSVnDp8sIGRP?=\n\t=?utf-8?q?NZpjUdSsMQrpJSBVOgcCMeXIbgfDpjoTyuAmrrEjo0hmF9K9qA8fFfSe?=\n\t=?utf-8?q?x8Z++K6otENBcZ3pZVJ54Ui3HGqwwGrA0pdoFwN3L4uqrcVpSNADhg0h?=\n\t=?utf-8?q?9cfNr69TBxtOvCrv4vkpfw+z995y23Ugzm+T6pzoiVVuddQSWhKOc/ig?=\n\t=?utf-8?q?a+fUdeh9Fih8RneV5fKaExUks3j7yYyhafeqJSBitrgwmVOk3xd9vs3O?=\n\t=?utf-8?q?EdxI1PR+BBh+xEQ0FgqGi+T/QW6lE05HaLzHPH3Hyz8Yt5j798KMj1Fv?=\n\t=?utf-8?q?UENaeXy9ypD1Qp6K0q2iqBHwRqKE1xAwKaFfgyignmg/hu0hpDu0ZW0a?=\n\t=?utf-8?q?vBSjCjZhss1YHKqgWL5fUU0AE3ygj6lTy6VrJO7+hEqxNg2ZZYZu5vJY?=\n\t=?utf-8?q?70t2HTFkOvFXMf36l3yWA8gfTVLDebrX8yoZiisHrj19d7t3E7EQbEK/?=\n\t=?utf-8?q?k+zx+YcIi0dM8VLALYNp9gh5bggZ4iojC0tofnBRrZi5e/rxLzVcijze?=\n\t=?utf-8?q?T+amz9EWnHqTQ5IA0WsQRxxRWw9/uWUKON9wOorSZnVzb0aREjYpChq/?=\n\t=?utf-8?q?GtyY2R5R3J5NBLi30Y5ywS5lydY4ftLXfLMtQ8lgIm9bXeReKX2lBfHj?=\n\t=?utf-8?q?jRox28E7xECBh48DBIjY7QrGbDiQQCEZ4BOd9+IkStyrAfRwKeMWdGtR?=\n\t=?utf-8?q?ANw1ThDfaYD3KROu1VeWXonrGt/wTLoh8o3LUtmpsdpOI+bENBnGMgoO?=\n\t=?utf-8?q?LfxPk0y/XBEtV9Mx7AkPlxP1giZzAM+C4B3t5RbgD8fY2+8EPvrJhCzS?=\n\t=?utf-8?q?aSWsbOCXAUp1Kjdj1YszGdhhXPMvQHdaLw4nH+wEpOsTzCn0W+uNgViM?=\n\t=?utf-8?q?hcjDW376qf5ZE/iFGZz2h2IPPoF+huIIScGdTeJv6l1dV2tRa0ZVkFYx?=\n\t=?utf-8?q?oiHk2pm0aKfwNPwICd7VEev?=","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"base64","MIME-Version":"1.0","X-OriginatorOrg":"nxp.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-AuthSource":"PAXPR04MB8285.eurprd04.prod.outlook.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"a080dfcd-3c9f-4425-8467-08dec6d417c9","X-MS-Exchange-CrossTenant-originalarrivaltime":"10 Jun 2026 09:38:56.7577\n\t(UTC)","X-MS-Exchange-CrossTenant-fromentityheader":"Hosted","X-MS-Exchange-CrossTenant-id":"686ea1d3-bc2b-4c6f-a92c-d99c5c301635","X-MS-Exchange-CrossTenant-mailboxtype":"HOSTED","X-MS-Exchange-CrossTenant-userprincipalname":"q7lF9xO+4qomRJiee9JqjSxDZKK5HooHgPM56bsnmkwmXlkZbZQbM8WLUxrKykUB","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"GVXPR04MB11541","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>"}}]