[{"id":39051,"web_url":"https://patchwork.libcamera.org/comment/39051/","msgid":"<85ik7oavyq.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","date":"2026-06-12T10:34:21","subject":"Re: [PATCH v3] libcamera: software_isp: Probe EGL availability\n\tbefore creating DebayerEGL","submitter":{"id":177,"url":"https://patchwork.libcamera.org/api/people/177/","name":"Milan Zamazal","email":"mzamazal@redhat.com"},"content":"Qi Hou <qi.hou@nxp.com> writes:\n\n> When HAVE_DEBAYER_EGL is enabled, the SoftwareIsp constructor\n> unconditionally creates a DebayerEGL instance. If the platform lacks\n> EGL surfaceless support, DebayerEGL::start() fails with -ENODEV after\n> SwStatsCpu ownership has already been moved, making fallback to\n> DebayerCpu impossible.\n>\n> Add a static eGL::isAvailable() method that probes whether EGL\n> surfaceless rendering can be initialised. Extract the common display\n> obtaining logic (eglBindAPI, eglGetPlatformDisplay, eglInitialize)\n> into a private eGL::probeDisplay() helper that is shared by both\n> isAvailable() and initEGLContext(), avoiding code duplication.\n>\n> The SoftwareIsp constructor now calls eGL::isAvailable() before\n> creating DebayerEGL. If EGL is not available, the existing fallback\n> path creates a DebayerCpu instance instead.\n>\n> Signed-off-by: Qi Hou <qi.hou@nxp.com>\n\nReviewed-by: Milan Zamazal <mzamazal@redhat.com>\n\n> ---\n>  include/libcamera/internal/egl.h            |  2 +\n>  src/libcamera/egl.cpp                       | 60 ++++++++++++++++-----\n>  src/libcamera/software_isp/software_isp.cpp | 10 +++-\n>  3 files changed, 56 insertions(+), 16 deletions(-)\n>\n> diff --git a/include/libcamera/internal/egl.h b/include/libcamera/internal/egl.h\n> index 57f90d93..f7bfb28d 100644\n> --- a/include/libcamera/internal/egl.h\n> +++ b/include/libcamera/internal/egl.h\n> @@ -103,6 +103,7 @@ public:\n>  \t~eGL();\n>  \n>  \tint initEGLContext();\n> +\tstatic bool isAvailable();\n>  \n>  \tint createInputDMABufTexture2D(eGLImage &eglImage, int fd);\n>  \tint createOutputDMABufTexture2D(eGLImage &eglImage, int fd);\n> @@ -133,6 +134,7 @@ private:\n>  \tEGLContext context_ = EGL_NO_CONTEXT;\n>  \tEGLSurface surface_ = EGL_NO_SURFACE;\n>  \n> +\tstatic EGLDisplay probeDisplay();\n>  \tint compileShader(int shaderType, GLuint &shaderId, const unsigned char *shaderData,\n>  \t\t\t  unsigned int shaderDataLen,\n>  \t\t\t  Span<const std::string> shaderEnv);\n> diff --git a/src/libcamera/egl.cpp b/src/libcamera/egl.cpp\n> index c185bb7a..860f18dd 100644\n> --- a/src/libcamera/egl.cpp\n> +++ b/src/libcamera/egl.cpp\n> @@ -267,6 +267,50 @@ void eGL::createTexture2D(eGLImage &eglImage, void *data)\n>  \tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);\n>  }\n>  \n> +EGLDisplay eGL::probeDisplay()\n> +{\n> +\tEGLDisplay display;\n> +\n> +\tif (!eglBindAPI(EGL_OPENGL_ES_API)) {\n> +\t\tLOG(eGL, Info) << \"API bind fail\";\n> +\t\treturn EGL_NO_DISPLAY;\n> +\t}\n> +\n> +\tdisplay = eglGetPlatformDisplay(EGL_PLATFORM_SURFACELESS_MESA,\n> +\t\t\t\t\t EGL_DEFAULT_DISPLAY,\n> +\t\t\t\t\t nullptr);\n> +\n> +\tif (display == EGL_NO_DISPLAY) {\n> +\t\tLOG(eGL, Info) << \"Unable to get EGL display\";\n> +\t\treturn EGL_NO_DISPLAY;\n> +\t}\n> +\n> +\tif (eglInitialize(display, nullptr, nullptr) != EGL_TRUE) {\n> +\t\tLOG(eGL, Error) << \"eglInitialize fail\";\n> +\t\treturn EGL_NO_DISPLAY;\n> +\t}\n> +\n> +\treturn display;\n> +}\n> +\n> +/**\n> + * \\brief Probe whether EGL surfaceless rendering is available\n> + *\n> + * Checks if an EGL surfaceless display can be obtained and initialised.\n> + * The display is immediately terminated so that no resources are leaked.\n> + *\n> + * \\return true if EGL surfaceless rendering is available, false otherwise\n> + */\n> +bool eGL::isAvailable()\n> +{\n> +\tEGLDisplay display = probeDisplay();\n> +\tif (display == EGL_NO_DISPLAY)\n> +\t\treturn false;\n> +\n> +\teglTerminate(display);\n> +\treturn true;\n> +}\n> +\n>  /**\n>   * \\brief Initialise the EGL context\n>   *\n> @@ -297,21 +341,9 @@ int eGL::initEGLContext()\n>  \tEGLint numConfigs;\n>  \tEGLConfig config;\n>  \n> -\tif (!eglBindAPI(EGL_OPENGL_ES_API)) {\n> -\t\tLOG(eGL, Error) << \"API bind fail\";\n> -\t\tgoto fail;\n> -\t}\n> -\n> -\tdisplay_ = eglGetPlatformDisplay(EGL_PLATFORM_SURFACELESS_MESA,\n> -\t\t\t\t\t EGL_DEFAULT_DISPLAY,\n> -\t\t\t\t\t nullptr);\n> +\tdisplay_ = probeDisplay();\n>  \tif (display_ == EGL_NO_DISPLAY) {\n> -\t\tLOG(eGL, Error) << \"Unable to get EGL display\";\n> -\t\tgoto fail;\n> -\t}\n> -\n> -\tif (eglInitialize(display_, nullptr, nullptr) != EGL_TRUE) {\n> -\t\tLOG(eGL, Error) << \"eglInitialize fail\";\n> +\t\tLOG(eGL, Error) << \"Unable to probe display\";\n>  \t\tgoto fail;\n>  \t}\n>  \n> diff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp\n> index 781cf02f..ff8c3465 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 (eGL::isAvailable()) {\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 7B47DC324C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 12 Jun 2026 10:34:30 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 72898623C7;\n\tFri, 12 Jun 2026 12:34:29 +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 0A89161EFB\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 12 Jun 2026 12:34:27 +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-439-t4OqfK0gPuC6xyndasymaQ-1; Fri, 12 Jun 2026 06:34:25 -0400","by mail-wr1-f69.google.com with SMTP id\n\tffacd0b85a97d-45ef63d1214so527773f8f.3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 12 Jun 2026 03:34:25 -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-4606f263923sm4643799f8f.2.2026.06.12.03.34.22\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tFri, 12 Jun 2026 03:34:22 -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=\"IfrZ6Egt\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1781260466;\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=xkBUgHJfN9WgmveDd3gn+027Nf9BZQLqRkz1Sibdc4I=;\n\tb=IfrZ6EgtxtshbadWlTyD7AAU5wcQEQZNqmUq12M9zLC4txuKzOodJnp1nHpHEQahLe2c+z\n\tZ/6/yhPYz6mfkAGnvxGOXExhfj6fcnx6kTCRuoZVLmSefN+SUbDcK8o1SA5mJu9tlvyMdq\n\t9X9Gti0pt+dcGfTONHiHvPQRwlqFw4g=","X-MC-Unique":"t4OqfK0gPuC6xyndasymaQ-1","X-Mimecast-MFC-AGG-ID":"t4OqfK0gPuC6xyndasymaQ_1781260464","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20251104; t=1781260464; x=1781865264;\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=xkBUgHJfN9WgmveDd3gn+027Nf9BZQLqRkz1Sibdc4I=;\n\tb=PAIkSNeqwF4X6aRQExL7MXtOoa7NLtlAt/oze7CCoREBHNB8mk0l6BX8RS6HbHlUJj\n\tmm6VqO2oxB/G4sBZnJ/7lWjkU1Ex8uz0UoZX/1Fel92PsF8+pjySlqh1EyI972RmWuzK\n\t+Xd7VaV16SG3dEY6zbQmHT8HKeYVSr2J0KmWH/bjYYKrNlN6HApklmpqFIVU8g7CRQpc\n\tQ25tykxGjKW1ufRCAG4UnbkgkKjIqzE2LDh4KU7wpMLAHwPiDprodxNh6BNtcpce4QmM\n\tckkunxBK+rj1AiVc8jDYDd2yRLHED1uUSH8y5rm4O5PxPh62awFiNYpFqa1/01DhWf7u\n\tTfvQ==","X-Gm-Message-State":"AOJu0YyU747ufPMTx4Kbfb0Oam2WeykQpmV51ae4i1rpiHMs0QlJjls3\n\tzNIQ39vx03I5h17VGXLZM1o9RRJRamp76Pxs6R5vYxvENgm9uf6giXtMozNfPjmInBZ0xiobCqK\n\tj/eomqi5gTRGbhYluopn2etj0HMar7PMT+uN0i2AcX7s9uuGXlmxSU7X6xx+PWCaUU1qRa+9WnI\n\tk=","X-Gm-Gg":"Acq92OGo5mldix3WB5IR7UKRxZhMulKR7xE2nh9KOzG6kfUt8TzTpUtJnaJ5f+c/gu9\n\tMyiRhcuqSlAB8mEBR8Ouoj14H5Ex26rzdt9RpjCyA2QBdGbCmfslizFbXoV/IhA5hfZgBOe3QH+\n\trciY586+7RtDpDniv6ZLmDt/9Hk0RjTZ/mC4womJG4EgAHTLqZRLgIqL4a+nnFYKghoS9DvuNmU\n\t90xT/SiHJAZyj7u3EGuj25Mup1b78IststEZ2Y6/n+o6ZHbmDhkKdrzz4qlddtukOrLbdXszKLL\n\tbWuDvJQAR/qDsj3RHylxGuX27vLFY+M0ryhU9vsyupzmvgi5vkENuvCz07FrlUgziopkACxr47+\n\tQsXxiLfynnd4BMKqm4AXHt8nUpvKo0XKBFEmnTkf8nAmuviuv3i0Hi+0n/Trf508/nXf/nniHXY\n\tc=","X-Received":["by 2002:a05:6000:240e:b0:43f:e2b7:7160 with SMTP id\n\tffacd0b85a97d-4606da8cd16mr3215475f8f.4.1781260464106; \n\tFri, 12 Jun 2026 03:34:24 -0700 (PDT)","by 2002:a05:6000:240e:b0:43f:e2b7:7160 with SMTP id\n\tffacd0b85a97d-4606da8cd16mr3215424f8f.4.1781260463572; \n\tFri, 12 Jun 2026 03:34:23 -0700 (PDT)"],"From":"Milan Zamazal <mzamazal@redhat.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 v3] libcamera: software_isp: Probe EGL availability\n\tbefore creating DebayerEGL","In-Reply-To":"<20260612025641.3665225-1-qi.hou@nxp.com> (Qi Hou's message of\n\t\"Fri, 12 Jun 2026 11:56:41 +0900\")","References":"<20260612025641.3665225-1-qi.hou@nxp.com>","Date":"Fri, 12 Jun 2026 12:34:21 +0200","Message-ID":"<85ik7oavyq.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":"XmK3xq4eXj83DuFjmUkb6UjWryg5umGqkxBRKFCwYUE_1781260464","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":39059,"web_url":"https://patchwork.libcamera.org/comment/39059/","msgid":"<07d619a4-3822-4632-bd81-f9d12cae8340@nxsw.ie>","date":"2026-06-13T12:42:48","subject":"Re: [PATCH v3] libcamera: software_isp: Probe EGL availability\n\tbefore creating DebayerEGL","submitter":{"id":226,"url":"https://patchwork.libcamera.org/api/people/226/","name":"Bryan O'Donoghue","email":"bod.linux@nxsw.ie"},"content":"On 12/06/2026 03:56, Qi Hou wrote:\n> When HAVE_DEBAYER_EGL is enabled, the SoftwareIsp constructor\n> unconditionally creates a DebayerEGL instance. If the platform lacks\n> EGL surfaceless support, DebayerEGL::start() fails with -ENODEV after\n> SwStatsCpu ownership has already been moved, making fallback to\n> DebayerCpu impossible.\n> \n> Add a static eGL::isAvailable() method that probes whether EGL\n> surfaceless rendering can be initialised. Extract the common display\n> obtaining logic (eglBindAPI, eglGetPlatformDisplay, eglInitialize)\n> into a private eGL::probeDisplay() helper that is shared by both\n> isAvailable() and initEGLContext(), avoiding code duplication.\n> \n> The SoftwareIsp constructor now calls eGL::isAvailable() before\n> creating DebayerEGL. If EGL is not available, the existing fallback\n> path creates a DebayerCpu instance instead.\n> \n> Signed-off-by: Qi Hou <qi.hou@nxp.com>\n> ---\n>   include/libcamera/internal/egl.h            |  2 +\n>   src/libcamera/egl.cpp                       | 60 ++++++++++++++++-----\n>   src/libcamera/software_isp/software_isp.cpp | 10 +++-\n>   3 files changed, 56 insertions(+), 16 deletions(-)\n> \n> diff --git a/include/libcamera/internal/egl.h b/include/libcamera/internal/egl.h\n> index 57f90d93..f7bfb28d 100644\n> --- a/include/libcamera/internal/egl.h\n> +++ b/include/libcamera/internal/egl.h\n> @@ -103,6 +103,7 @@ public:\n>   \t~eGL();\n> \n>   \tint initEGLContext();\n> +\tstatic bool isAvailable();\n> \n>   \tint createInputDMABufTexture2D(eGLImage &eglImage, int fd);\n>   \tint createOutputDMABufTexture2D(eGLImage &eglImage, int fd);\n> @@ -133,6 +134,7 @@ private:\n>   \tEGLContext context_ = EGL_NO_CONTEXT;\n>   \tEGLSurface surface_ = EGL_NO_SURFACE;\n> \n> +\tstatic EGLDisplay probeDisplay();\n>   \tint compileShader(int shaderType, GLuint &shaderId, const unsigned char *shaderData,\n>   \t\t\t  unsigned int shaderDataLen,\n>   \t\t\t  Span<const std::string> shaderEnv);\n> diff --git a/src/libcamera/egl.cpp b/src/libcamera/egl.cpp\n> index c185bb7a..860f18dd 100644\n> --- a/src/libcamera/egl.cpp\n> +++ b/src/libcamera/egl.cpp\n> @@ -267,6 +267,50 @@ void eGL::createTexture2D(eGLImage &eglImage, void *data)\n>   \tglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);\n>   }\n> \n> +EGLDisplay eGL::probeDisplay()\n> +{\n> +\tEGLDisplay display;\n> +\n> +\tif (!eglBindAPI(EGL_OPENGL_ES_API)) {\n> +\t\tLOG(eGL, Info) << \"API bind fail\";\n> +\t\treturn EGL_NO_DISPLAY;\n> +\t}\n> +\n> +\tdisplay = eglGetPlatformDisplay(EGL_PLATFORM_SURFACELESS_MESA,\n> +\t\t\t\t\t EGL_DEFAULT_DISPLAY,\n> +\t\t\t\t\t nullptr);\n> +\n> +\tif (display == EGL_NO_DISPLAY) {\n> +\t\tLOG(eGL, Info) << \"Unable to get EGL display\";\n> +\t\treturn EGL_NO_DISPLAY;\n> +\t}\n> +\n> +\tif (eglInitialize(display, nullptr, nullptr) != EGL_TRUE) {\n> +\t\tLOG(eGL, Error) << \"eglInitialize fail\";\n> +\t\treturn EGL_NO_DISPLAY;\n> +\t}\n> +\n> +\treturn display;\n> +}\n> +\n> +/**\n> + * \\brief Probe whether EGL surfaceless rendering is available\n> + *\n> + * Checks if an EGL surfaceless display can be obtained and initialised.\n> + * The display is immediately terminated so that no resources are leaked.\n> + *\n> + * \\return true if EGL surfaceless rendering is available, false otherwise\n> + */\n> +bool eGL::isAvailable()\n> +{\n> +\tEGLDisplay display = probeDisplay();\n> +\tif (display == EGL_NO_DISPLAY)\n> +\t\treturn false;\n> +\n> +\teglTerminate(display);\n> +\treturn true;\n> +}\n> +\n>   /**\n>    * \\brief Initialise the EGL context\n>    *\n> @@ -297,21 +341,9 @@ int eGL::initEGLContext()\n>   \tEGLint numConfigs;\n>   \tEGLConfig config;\n> \n> -\tif (!eglBindAPI(EGL_OPENGL_ES_API)) {\n> -\t\tLOG(eGL, Error) << \"API bind fail\";\n> -\t\tgoto fail;\n> -\t}\n> -\n> -\tdisplay_ = eglGetPlatformDisplay(EGL_PLATFORM_SURFACELESS_MESA,\n> -\t\t\t\t\t EGL_DEFAULT_DISPLAY,\n> -\t\t\t\t\t nullptr);\n> +\tdisplay_ = probeDisplay();\n>   \tif (display_ == EGL_NO_DISPLAY) {\n> -\t\tLOG(eGL, Error) << \"Unable to get EGL display\";\n> -\t\tgoto fail;\n> -\t}\n> -\n> -\tif (eglInitialize(display_, nullptr, nullptr) != EGL_TRUE) {\n> -\t\tLOG(eGL, Error) << \"eglInitialize fail\";\n> +\t\tLOG(eGL, Error) << \"Unable to probe display\";\n>   \t\tgoto fail;\n>   \t}\n> \n> diff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp\n> index 781cf02f..ff8c3465 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 (eGL::isAvailable()) {\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_)\n> --\n> 2.34.1\n> \n\nPerhaps a further optimisation of this would be to bring back GBM \nsurface support ?\n\ni.e. our first version of GPUISP used a GBM surface which then \ntransitioned to MESA surfaceless.\n\nI wonder if you have tried GBM ? It should be easy enough to revert the \nchange and test ?\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 76EA2C328C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSat, 13 Jun 2026 12:42:55 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 94DD6623CC;\n\tSat, 13 Jun 2026 14:42:54 +0200 (CEST)","from mail-106116.protonmail.ch (mail-106116.protonmail.ch\n\t[79.135.106.116])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 3033261F3F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 13 Jun 2026 14:42:53 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=nxsw.ie header.i=@nxsw.ie header.b=\"l2NBTfpQ\";\n\tdkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxsw.ie;\n\ts=protonmail; t=1781354571; x=1781613771;\n\tbh=w+CYiNdPGL1VA6SoWtRscaa1uYFnwaqb+HNVvJow60M=;\n\th=Date:To:From:Cc:Subject:Message-ID:In-Reply-To:References:\n\tFeedback-ID:From:To:Cc:Date:Subject:Reply-To:Feedback-ID:\n\tMessage-ID:BIMI-Selector;\n\tb=l2NBTfpQTj1PfJ4qfvAq6zPlRznuQ69MTKXaKETW+vMA+1X5qlCfRpvB3XzNbubYG\n\thnS/ZXvLw2vaxbKoBXQuFRItGsm+FwlZUvxXbAtfmQQ3VEjHOGe4wGeMkn5vPgVej9\n\tZELHUjEbMGQwyzw6RFeIUBcbzzezSrHD8rBlR0EPepkvrO2JdaNs4f2oh7NmUTDNzu\n\tsZavorFQ+veYWJr5EQ0d1IxK4v52b5qXxwTRd0N2bNjWC6OsOWeWG0gtFkxLA45zko\n\t8Arg3y4kglod8PvH+xQbMYurc0sbiKkFqdRuZQcLdtA8j8M2VzVY4MYoo2u8NpoBmq\n\tVEwINGzV2qdgw==","Date":"Sat, 13 Jun 2026 12:42:48 +0000","To":"Qi Hou <qi.hou@nxp.com>, libcamera-devel@lists.libcamera.org","From":"Bryan O'Donoghue <bod.linux@nxsw.ie>","Cc":"jared.hu@nxp.com, julien.vuillaumier@nxp.com","Subject":"Re: [PATCH v3] libcamera: software_isp: Probe EGL availability\n\tbefore creating DebayerEGL","Message-ID":"<07d619a4-3822-4632-bd81-f9d12cae8340@nxsw.ie>","In-Reply-To":"<20260612025641.3665225-1-qi.hou@nxp.com>","References":"<20260612025641.3665225-1-qi.hou@nxp.com>","Feedback-ID":"136405006:user:proton","X-Pm-Message-ID":"b210d2add0d620b52e51b219db74429eb41329fe","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Transfer-Encoding":"quoted-printable","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":39067,"web_url":"https://patchwork.libcamera.org/comment/39067/","msgid":"<PAXPR04MB8285369B5A135DC320E132B597E62@PAXPR04MB8285.eurprd04.prod.outlook.com>","date":"2026-06-15T08:23:57","subject":"RE: [EXT] Re: [PATCH v3] 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 Bryan O'Donoghue，\n\n\n\nThanks for your comment. I gave a try to revert below two patches that moved from GBM surface to surfaceless and tested on my i.MX8MM board.\n\nThe good news is that DebayerEGL::start() no longer fails. However, the output display is completely black.\n\n\n\nI’m not sure if this is a GBM surface configuration issue on i.MX8MM or something else. Since I’m not very familiar with the GBM surface path.\n\nI think it might be better handled by someone like you with professional expertise.\n\n\n\nMy patch (the isAvailable() probe + CPU fallback) at least provides a working path on platforms without surfaceless support. Would it make sense\n\nto merge this as a basic fix, and then add GBM surface fallback as a follow-up ?\n\n\n\n\n\n  1.  commit 0c2ed9ebf99e3328efe7e480d194d333a8dc5568\n\nAuthor: Robert Mader <robert.mader@collabora.com<mailto:robert.mader@collabora.com>>\n\nDate:   Wed Jan 21 10:08:52 2026 +0100\n\n\n\n    egl: Use the Mesa surfaceless platform instead of GBM\n\n\n\n    Mesa surfaceless platform appears to be a better fit for the use-case at hand:\n\n    1. Like GBM it is Mesa specific, so no change in supported setups is\n\n       expected. If ever required, a fallback to the generic device platform\n\n       could be added on top.\n\n    2. It leaves the complexity of selecting a renderer device to the\n\n       driver, reducing code and dependencies.\n\n    3. It allows to use llvmpipe / software drivers without dri device,\n\n       which can be useful on CI or debugging (with LIBGL_ALWAYS_SOFTWARE=1).\n\n\n\n    Signed-off-by: Robert Mader <robert.mader@collabora.com<mailto:robert.mader@collabora.com>>\n\n    Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org<mailto:bryan.odonoghue@linaro.org>>\n\n    Tested-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org<mailto:bryan.odonoghue@linaro.org>> # sm8250/rb5, x1e/Dell Insprion14p\n\n    Reviewed-by: Milan Zamazal <mzamazal@redhat.com<mailto:mzamazal@redhat.com>>\n\n    Tested-by: Milan Zamazal <mzamazal@redhat.com<mailto:mzamazal@redhat.com>> # TI AM69\n\n    Tested-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com<mailto:barnabas.pocze@ideasonboard.com>> # ThinkPad X1 Yoga Gen 7 + ov2740\n\n    Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com<mailto:laurent.pinchart@ideasonboard.com>>\n\n    Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com<mailto:kieran.bingham@ideasonboard.com>>\n\n\n\n  1.  commit 7350d6cc5dd1b5bc724749d21744c07879deb803\n\nAuthor: Robert Mader <robert.mader@collabora.com<mailto:robert.mader@collabora.com>>\n\nDate:   Wed Jan 21 10:08:54 2026 +0100\n\n\n\n    Revert \"libcamera: software_isp: gbm: Add a GBM helper class for GPU surface access\"\n\n\n\n    GBM is not used any more - remove the helper class.\n\n\n\n    This reverts commit c60b1ce8193841c2742b655097bb39ccbcb417c2.\n\n\n\n    Signed-off-by: Robert Mader <robert.mader@collabora.com<mailto:robert.mader@collabora.com>>\n\n    Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org<mailto:bryan.odonoghue@linaro.org>>\n\n    Tested-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org<mailto:bryan.odonoghue@linaro.org>> # sm8250/rb5, x1e/Dell Insprion14p\n\n    Reviewed-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com<mailto:barnabas.pocze@ideasonboard.com>>\n\n    Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com<mailto:laurent.pinchart@ideasonboard.com>>\n\n    Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com<mailto:kieran.bingham@ideasonboard.com>>\n\n\n\nRegards,\n\nQi Hou\n\n\n\n-----Original Message-----\nFrom: Bryan O'Donoghue <bod.linux@nxsw.ie>\nSent: Saturday, June 13, 2026 8:43 PM\nTo: Qi Hou <qi.hou@nxp.com>; libcamera-devel@lists.libcamera.org\nCc: Jared Hu <jared.hu@nxp.com>; Julien Vuillaumier <julien.vuillaumier@nxp.com>\nSubject: [EXT] Re: [PATCH v3] libcamera: software_isp: Probe EGL availability before creating DebayerEGL\n\n\n\n[Some people who received this message don't often get email from bod.linux@nxsw.ie<mailto:bod.linux@nxsw.ie>. Learn why this is important at https://aka.ms/LearnAboutSenderIdentification ]\n\n\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\n\n\n\nOn 12/06/2026 03:56, Qi Hou wrote:\n\n> When HAVE_DEBAYER_EGL is enabled, the SoftwareIsp constructor\n\n> unconditionally creates a DebayerEGL instance. If the platform lacks\n\n> EGL surfaceless support, DebayerEGL::start() fails with -ENODEV after\n\n> SwStatsCpu ownership has already been moved, making fallback to\n\n> DebayerCpu impossible.\n\n>\n\n> Add a static eGL::isAvailable() method that probes whether EGL\n\n> surfaceless rendering can be initialised. Extract the common display\n\n> obtaining logic (eglBindAPI, eglGetPlatformDisplay, eglInitialize)\n\n> into a private eGL::probeDisplay() helper that is shared by both\n\n> isAvailable() and initEGLContext(), avoiding code duplication.\n\n>\n\n> The SoftwareIsp constructor now calls eGL::isAvailable() before\n\n> creating DebayerEGL. If EGL is not available, the existing fallback\n\n> path creates a DebayerCpu instance instead.\n\n>\n\n> Signed-off-by: Qi Hou <qi.hou@nxp.com<mailto:qi.hou@nxp.com>>\n\n> ---\n\n>   include/libcamera/internal/egl.h            |  2 +\n\n>   src/libcamera/egl.cpp                       | 60 ++++++++++++++++-----\n\n>   src/libcamera/software_isp/software_isp.cpp | 10 +++-\n\n>   3 files changed, 56 insertions(+), 16 deletions(-)\n\n>\n\n> diff --git a/include/libcamera/internal/egl.h\n\n> b/include/libcamera/internal/egl.h\n\n> index 57f90d93..f7bfb28d 100644\n\n> --- a/include/libcamera/internal/egl.h\n\n> +++ b/include/libcamera/internal/egl.h\n\n> @@ -103,6 +103,7 @@ public:\n\n>       ~eGL();\n\n>\n\n>       int initEGLContext();\n\n> +     static bool isAvailable();\n\n>\n\n>       int createInputDMABufTexture2D(eGLImage &eglImage, int fd);\n\n>       int createOutputDMABufTexture2D(eGLImage &eglImage, int fd); @@\n\n> -133,6 +134,7 @@ private:\n\n>       EGLContext context_ = EGL_NO_CONTEXT;\n\n>       EGLSurface surface_ = EGL_NO_SURFACE;\n\n>\n\n> +     static EGLDisplay probeDisplay();\n\n>       int compileShader(int shaderType, GLuint &shaderId, const unsigned char *shaderData,\n\n>                         unsigned int shaderDataLen,\n\n>                         Span<const std::string> shaderEnv); diff --git\n\n> a/src/libcamera/egl.cpp b/src/libcamera/egl.cpp index\n\n> c185bb7a..860f18dd 100644\n\n> --- a/src/libcamera/egl.cpp\n\n> +++ b/src/libcamera/egl.cpp\n\n> @@ -267,6 +267,50 @@ void eGL::createTexture2D(eGLImage &eglImage, void *data)\n\n>       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);\n\n>   }\n\n>\n\n> +EGLDisplay eGL::probeDisplay()\n\n> +{\n\n> +     EGLDisplay display;\n\n> +\n\n> +     if (!eglBindAPI(EGL_OPENGL_ES_API)) {\n\n> +             LOG(eGL, Info) << \"API bind fail\";\n\n> +             return EGL_NO_DISPLAY;\n\n> +     }\n\n> +\n\n> +     display = eglGetPlatformDisplay(EGL_PLATFORM_SURFACELESS_MESA,\n\n> +                                      EGL_DEFAULT_DISPLAY,\n\n> +                                      nullptr);\n\n> +\n\n> +     if (display == EGL_NO_DISPLAY) {\n\n> +             LOG(eGL, Info) << \"Unable to get EGL display\";\n\n> +             return EGL_NO_DISPLAY;\n\n> +     }\n\n> +\n\n> +     if (eglInitialize(display, nullptr, nullptr) != EGL_TRUE) {\n\n> +             LOG(eGL, Error) << \"eglInitialize fail\";\n\n> +             return EGL_NO_DISPLAY;\n\n> +     }\n\n> +\n\n> +     return display;\n\n> +}\n\n> +\n\n> +/**\n\n> + * \\brief Probe whether EGL surfaceless rendering is available\n\n> + *\n\n> + * Checks if an EGL surfaceless display can be obtained and initialised.\n\n> + * The display is immediately terminated so that no resources are leaked.\n\n> + *\n\n> + * \\return true if EGL surfaceless rendering is available, false\n\n> +otherwise  */ bool eGL::isAvailable() {\n\n> +     EGLDisplay display = probeDisplay();\n\n> +     if (display == EGL_NO_DISPLAY)\n\n> +             return false;\n\n> +\n\n> +     eglTerminate(display);\n\n> +     return true;\n\n> +}\n\n> +\n\n>   /**\n\n>    * \\brief Initialise the EGL context\n\n>    *\n\n> @@ -297,21 +341,9 @@ int eGL::initEGLContext()\n\n>       EGLint numConfigs;\n\n>       EGLConfig config;\n\n>\n\n> -     if (!eglBindAPI(EGL_OPENGL_ES_API)) {\n\n> -             LOG(eGL, Error) << \"API bind fail\";\n\n> -             goto fail;\n\n> -     }\n\n> -\n\n> -     display_ = eglGetPlatformDisplay(EGL_PLATFORM_SURFACELESS_MESA,\n\n> -                                      EGL_DEFAULT_DISPLAY,\n\n> -                                      nullptr);\n\n> +     display_ = probeDisplay();\n\n>       if (display_ == EGL_NO_DISPLAY) {\n\n> -             LOG(eGL, Error) << \"Unable to get EGL display\";\n\n> -             goto fail;\n\n> -     }\n\n> -\n\n> -     if (eglInitialize(display_, nullptr, nullptr) != EGL_TRUE) {\n\n> -             LOG(eGL, Error) << \"eglInitialize fail\";\n\n> +             LOG(eGL, Error) << \"Unable to probe display\";\n\n>               goto fail;\n\n>       }\n\n>\n\n> diff --git a/src/libcamera/software_isp/software_isp.cpp\n\n> b/src/libcamera/software_isp/software_isp.cpp\n\n> index 781cf02f..ff8c3465 100644\n\n> --- a/src/libcamera/software_isp/software_isp.cpp\n\n> +++ b/src/libcamera/software_isp/software_isp.cpp\n\n> @@ -119,8 +119,14 @@ SoftwareIsp::SoftwareIsp(PipelineHandler *pipe, const CameraSensor *sensor,\n\n>               }\n\n>       }\n\n>\n\n> -     if (!softISPMode || softISPMode == \"gpu\")\n\n> -             debayer_ = std::make_unique<DebayerEGL>(std::move(stats), cm);\n\n> +     if (!softISPMode || softISPMode == \"gpu\") {\n\n> +             if (eGL::isAvailable()) {\n\n> +                     debayer_ = std::make_unique<DebayerEGL>(std::move(stats), cm);\n\n> +             } else {\n\n> +                     LOG(SoftwareIsp, Info)\n\n> +                             << \"EGL not available, falling back to CPU debayer\";\n\n> +             }\n\n> +     }\n\n>\n\n>   #endif\n\n>       if (!debayer_)\n\n> --\n\n> 2.34.1\n\n>\n\n\n\nPerhaps a further optimisation of this would be to bring back GBM surface support ?\n\n\n\ni.e. our first version of GPUISP used a GBM surface which then transitioned to MESA surfaceless.\n\n\n\nI wonder if you have tried GBM ? It should be easy enough to revert the change and test ?\n\n\n\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 EDD2CC324C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 15 Jun 2026 08:24:06 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 08BC4623D2;\n\tMon, 15 Jun 2026 10:24:06 +0200 (CEST)","from AM0PR83CU005.outbound.protection.outlook.com\n\t(mail-westeuropeazlp170100001.outbound.protection.outlook.com\n\t[IPv6:2a01:111:f403:c201::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 48DCB61F05\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 15 Jun 2026 10:24:03 +0200 (CEST)","from PAXPR04MB8285.eurprd04.prod.outlook.com\n\t(2603:10a6:102:1ca::15)\n\tby AS8PR04MB7797.eurprd04.prod.outlook.com (2603:10a6:20b:2a8::18)\n\twith Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.113.16;\n\tMon, 15 Jun 2026 08:23:57 +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.015;\n\tMon, 15 Jun 2026 08:23:57 +0000"],"Authentication-Results":["lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=nxp.com header.i=@nxp.com header.b=\"G/O7PbpJ\";\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=vKK55DSSoiMCYIsuqBMvXDvwB7IWt8Wp/PUKuyPqTdG1gik+fPJhiGL8UuLvk7OTTXPAK+35K0OAzYNE3rdDhPKRI8iE77WetGyF3yQuJSdPfYv5Pv5w9qMN9qwIegN8W1ovQfZK1uFUq1yTL41LCqjDZPgIYK152oQGOsjy6eNmJzG8TOksBqOAmzbfjjeiy92HKt/VyXl/RGkaxprZmbeYibtL9sku9SUdDmYwNtYzN4hWDu+PxSC0hlKjjsqxZj29eRykJfz9TS0owuaYYOK5r1QdIKZuYQbt3uXmuLpljTtyG7F7X9QdtacNtb11GOv18NLWS5hDA4OXR292bw==","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=/bMYe5Qe2hRUP3bhccUx7EDG/ImFr+xV+h3bqeVYfOc=;\n\tb=IZIwhQa/yBIVMl/xeZn/w2On+MbFEFKxtUDspGx1vARoydzxuTepTyYDharlNLJ7A3Vkb8tYWKZG9psM9jMn/2fZcgNtH5EgQoi8915uOag3f2y3sxBjO4oExG1kciypMtawCFwsFSXWCS3a8OvM19E2iSH16W5WtUzFcMLyuCwilMq+8YHIuLY12XkJVB3svjETIxOdwLvVP4apJfNaOHcaplvK0hO5g8JwXZ+gnTXdhj9REdvuS+nbNYN/mIYvZDoKKzKzmxzldlWkVH/Z1TZdF1p8GYUbDVgowR1Vc2bPMp1bL2nqFHqpnXpFwtApEpbClfFvTVse3/H5wsUvmg==","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=/bMYe5Qe2hRUP3bhccUx7EDG/ImFr+xV+h3bqeVYfOc=;\n\tb=G/O7PbpJKzRxwgVUR5JlaEqLqCIHJR3UZar2KKIFvWPTbpddVTQsGZ1hmYQwzpxYZPI4fpltJcWMNQDfl8MKow0Us7idB5UI4eLKqp6NhV/DKlGKG68nDZzgw9m4sMX9Lksa4jHxOEWNco5mpPW9yOh9xuRUTua6gqr1Zt8EuyKjXn88PBQsbZeN17/AXOJ3498GQ2xjIN0V+AYoP5lV+xnY/2SRZHiheCP63q9zO0k5SA4KEWSKo/xYW/UnJZuUYsZz8ylM60fFWLdz3fpuUmpm1GY4cdMm6Cc0o7xG9QUMNLdvivUhtz831XcoQK2J59kEDze5Yy5fM0e9VDmpkw==","From":"Qi Hou <qi.hou@nxp.com>","To":"Bryan O'Donoghue <bod.linux@nxsw.ie>,\n\t\"libcamera-devel@lists.libcamera.org\"\n\t<libcamera-devel@lists.libcamera.org>","CC":"Jared Hu <jared.hu@nxp.com>, Julien Vuillaumier\n\t<julien.vuillaumier@nxp.com>","Subject":"RE: [EXT] Re: [PATCH v3] libcamera: software_isp: Probe EGL\n\tavailability before creating DebayerEGL","Thread-Topic":"[EXT] Re: [PATCH v3] libcamera: software_isp: Probe EGL\n\tavailability before creating DebayerEGL","Thread-Index":"AQHc+hrjmwIF7U2brkylZzRxDdBmorY8cBEAgALXhaA=","Date":"Mon, 15 Jun 2026 08:23:57 +0000","Message-ID":"<PAXPR04MB8285369B5A135DC320E132B597E62@PAXPR04MB8285.eurprd04.prod.outlook.com>","References":"<20260612025641.3665225-1-qi.hou@nxp.com>\n\t<07d619a4-3822-4632-bd81-f9d12cae8340@nxsw.ie>","In-Reply-To":"<07d619a4-3822-4632-bd81-f9d12cae8340@nxsw.ie>","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=\"G/O7PbpJ\";\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_|AS8PR04MB7797:EE_","x-ms-office365-filtering-correlation-id":"032ccd64-b1e3-4d3c-d9e3-08decab7722e","x-ms-exchange-senderadcheck":"1","x-ms-exchange-antispam-relay":"0","x-microsoft-antispam":"BCL:0;\n\tARA:13230040|376014|23010399003|19092799006|366016|1800799024|42112799006|8096899003|11063799006|3023799007|56012099006|4143699003|6133799003|38070700021|13003099007|18002099003|22082099003;","x-microsoft-antispam-message-info":"Fe10lHdoQGy4N8y+7K4WOTpDP7iz+B5Xg+79kTlyfg61h2E1RzVw5pz8RVthUqRKnZSau/aQsOQMfd6ZDxjyn0rUEBMBpSF5HoA1mMcOKUztU8l8JB73YSyR+IX9kiLrJeK4ihZcGwEmZiAN+k1z9wb5733LCFakEZszVbKOuKYbmimh1MR03lIGL2L5jS09Iyu6xC5lgtZKgPVldoU6CGq2pYN25kIgKMMzB9s/wAmcLo7jusgErCJqDdnqMn2Avi7tv9fHjIroYvjUFO0KBKFNuuaoMEXoAJr1S+xeHU7lFYwNeFHz1I5570y88agnKpFZLGUenMEobI9Cf8y9et5pzPy2PZ98P4gRKiCb35u52/1aMZVk/YCUomEE/yIWnN7Ed02/2maDAdD0fsWq8wqq6YVPPsXNBw4hXjORH1f39I5nLzl3frBrJ4hJvo1C/rpd6hUNwi7FGIgZ0l895OphyYzKgBhB21PjiUI3TbnE60mO9NY+8OU/PrmrAwxEzmqKqqwYJKonG5lTYMQ18QOCg7vpsikseB1kc22atSAd1p8Kl+D9DIKjRCRrmwuINJgdHwqdQv3rqLKh6J94ZaGAP8FKhwB47OcLIHlUiqM8YhCwPGu4BnrsEcXPKpBQQWNCooN8+Qa+ghugbe8RoZygGQs5fxiyjsWUQQJgb+xgbgFhJ9eZETLANw/9tQMb0r6CzwWLS0oWbh/WWTimmHLgT21zCSKcFggDWqz2up2u5G3rdHpgTxQzaHkViEjO","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)(376014)(23010399003)(19092799006)(366016)(1800799024)(42112799006)(8096899003)(11063799006)(3023799007)(56012099006)(4143699003)(6133799003)(38070700021)(13003099007)(18002099003)(22082099003);\n\tDIR:OUT; SFP:1101; ","x-ms-exchange-antispam-messagedata-chunkcount":"1","x-ms-exchange-antispam-messagedata-0":"=?utf-8?q?5RramZ7tlM0wwaV5qN3cz3gQf?=\n\t=?utf-8?q?DEuZgxYEJ3HrsJrCQzqADRENPeqYegAhwr4zbP0erV9Jur2S/s1yQKEL?=\n\t=?utf-8?q?YMriWj5uv6l2nCDhmiwTPTVyoPROgunVGD/BxG0QGDAMJNAM2fTR/WFf?=\n\t=?utf-8?q?vJnyRJoZy690ix2JIu+KD/2FkQzv0xuIyXJwJIjPfjUMn3YJqg4+jycO?=\n\t=?utf-8?q?2JKFxXsVktQco7/tKPoyDjWU3BsoFWdGPpk6IEg+mgu5Rg0TDZXbE/j+?=\n\t=?utf-8?q?aNcexCxNFEV3qmCW5ucifMw7+rrF0Oa1rGSrLLZxh0ye+RKYXoacnYRu?=\n\t=?utf-8?q?r0ylsorlX2JPWBgnBJAjaUjYg5I7bg04dr6HlKELwGHp6XWvYJ/Yv7xw?=\n\t=?utf-8?q?ZeDq6s4p6WfoNIZ3CWOed5g9sQ0HQe9PTE9XpqpqEgZbiVtC9jecITPj?=\n\t=?utf-8?q?xJ1qz4bRNNzHdIcouqV7PcG0dBKPBhLcdxiVpZZMZ5Og6PXB71WFFJKU?=\n\t=?utf-8?q?AUqv3Tao0777/xVNxKZ4wR/QgGb8rN1pclFK/eMvc9D37G9AvRNg8TgU?=\n\t=?utf-8?q?PwPhtapozUJjYSneWEIMnIcLz37KxUbx3viKttsc7XSf4E1n5DC4uUtw?=\n\t=?utf-8?q?f2GKWTzq5EsrQcWBFoVGCM1kTRK+Tr9LX7RmnE3DsBMDA1Keg0UpKzBA?=\n\t=?utf-8?q?oveUaMxe2Hm3n3rmxHn+kh4n4CJWTeFgs7XWmDLBo04oGeR1Ahw9f01h?=\n\t=?utf-8?q?OS85W2oKkFwCfXxiftTsQC8XdlWMGAUO9QC3F/xTrCONgSUcOjxdY5O0?=\n\t=?utf-8?q?iZ9IaXL2CoxJ8Z433CRzsw4f0MQ6ke8wy+stYeGqVfVyfGwBIkHmzJLP?=\n\t=?utf-8?q?uYEbct+BzGAMnUAGtkDO2YhzxX4aGGSwEzEC7qKZ8U/AF3pCRMeWkzgA?=\n\t=?utf-8?q?pkzV1N+hSCIlQTIRRPpHjCqgm32VtnqulDsF2iXAxco9nLm82Gqzl3HD?=\n\t=?utf-8?q?9BBvO+ynX/FP0Z/u/2Sprig9bsUFRLkKTQy303STCMFEwI0tEsFHClIS?=\n\t=?utf-8?q?6IYfiBPxB5+FLgMczfunznS+rgLUrDM/1XkRedaBLPPOBtSyAn7TEpcp?=\n\t=?utf-8?q?/9qsjyAP1OuyBz9kKyf+DQuRIZU20D7VbdE1H9g62DKpVmsuWjXKB34S?=\n\t=?utf-8?q?MfI3N14GombYT9NtbVlsBJiBrbGlUoyPty7PxDEtVUzQCFt1LWhtCOsD?=\n\t=?utf-8?q?2098UNz86CFyxY4LzL6tlPJBS3UBswFqOyrOLvK8/7vABVzqKa+oqzie?=\n\t=?utf-8?q?i8KPTOu28tzlh3nYbknPotgTqPOFUVeZ3jg4sExOediCM5KFmBidmh0f?=\n\t=?utf-8?q?HfswWeCXL43TbB8I30LW3CYxLjT4oRPm38PI78cmBEPdOfcBLI1x7Oq0?=\n\t=?utf-8?q?0TKOCqAk3sE26KUu3M232Wh2J2ZCGcqp9qpneWrhwPt1Jd3kbaepRaQa?=\n\t=?utf-8?q?BBn9v30/ScL/dsKbL7Dv21YzxN1gFAbXBJ7F70a+PEwh9iZUMPLB2EWu?=\n\t=?utf-8?q?bJFv+o6lNmaP025xTKwt9due+wi0KVSratbL+yqx+B+4MJTpSD4QOwI5?=\n\t=?utf-8?q?nLVyOf2ctjbfkqqSwVblMNJp9zcpjHLr4vcgy4nOQXazrr+A8UZTF2iB?=\n\t=?utf-8?q?W0eU3/hR6OAq4AiWE+ieLheFwu947rKruwkky/WRWX+EjMhJjByb/KLy?=\n\t=?utf-8?q?s3kKJEzYofmdOfgjrtxyO2kDeAamSNTIXb2mrtS/ba8DokvwGRrHt3Co?=\n\t=?utf-8?q?LPDXoyjwbj9kob4fwH7xtcsRVSrg/wTFueoFZVFlmT9axSDS24EzVSBd?=\n\t=?utf-8?q?g/sVHGCQlDb2o8uA7sOJXSB?=","Content-Type":"multipart/alternative;\n\tboundary=\"_000_PAXPR04MB8285369B5A135DC320E132B597E62PAXPR04MB8285eurp_\"","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":"032ccd64-b1e3-4d3c-d9e3-08decab7722e","X-MS-Exchange-CrossTenant-originalarrivaltime":"15 Jun 2026 08:23:57.6334\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":"3jqO2Vxm8iSHTd3X/f1hathtbitZtKUukZGMr47Q6OIodkI1YzSl7bbNoCScFMip","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"AS8PR04MB7797","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>"}}]