From patchwork Fri Jul 24 02:12:56 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: qi.hou@oss.nxp.com X-Patchwork-Id: 27496 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id DA6B6BDE4C for ; Fri, 24 Jul 2026 02:13:11 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 16B8367ED3; Fri, 24 Jul 2026 04:13:11 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="Sz8W+aYu"; dkim-atps=neutral Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazlp170100001.outbound.protection.outlook.com [IPv6:2a01:111:f403:c201::1]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 5C60767EC4 for ; Fri, 24 Jul 2026 04:13:10 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=JMb0YY8DGEdoeE+flMDfo0GBxSD7YK9XqhPT9IcKbTKuL+JR2MnGmx5eU9X7MQpaFvJdh98CzpZZ1rMEL4oG7PowCCfweSt/wt7UiBoqCnFpEi8IIZTJVv1q614AgF0NWuHW/37KiaVIZD6ZqRLfzEyBAgjf18IKVN5DVwmB47HNd5ReEO82hAZyOY1g+ZuNYZa4g7L3YXtE12mMn5MOIoeyez9FX9NpA+ueCxxAOX8jjzbehDoxks50RhVOVlwyGkErBL5xMtLQdGfUfB4Dzc9UBXAhP8WX2gZLi/eTwiC4jWTBCgdFTpRMBiQf8r7OlukaZO9cl+AxnWe5DbMSPg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=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; bh=hza/a/IeiccRIUrkKzkl5kpuPlmLaxei8wHGQ8rSV/c=; b=Fh4tW9Q2d4+4iHJ1wyqltQPBVhmONOv6eGMezVRmiZiaWQ5f6+/6SCDFjzbS+XBpwBMGrViJe3WsPZR6ukxXFty5jp0fe99sX3WAqjpyKsATr+zottRPrGiVN0aHsu3yYrP1O7UJp2jblbDYIE0h9gCIY04N47hpIacCe0ga9FfAg0q2J4PoeABktcs5SYc3bfi5Kj1uqpiKxklSEwrHVjkt+71jGpvAGPNcFVhlkfH60aoH/ujz0L/MEz5RGCaPCxvvX81NGyHEYejf7vY8WqVGt9SEhT4XErdZSW7n3c0AzeeNpl/BkWSVL+WCUHWJ2fYuhX85nlh+TFdX9boaJw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hza/a/IeiccRIUrkKzkl5kpuPlmLaxei8wHGQ8rSV/c=; b=Sz8W+aYux9mw7+qibz3lc1FlgugXFOMrml8Q47bvlOfCAmmcpeppeGb7mMUDdMm9ZclX7PRyQomUgoOIUCjbamZvzC3XNszv7mhqok18x0HEltiLrg4pvY8AsLgNjtss2Gr/RA4ykVKnJlzKTg3cSOJE8udVACrWzbfwOQqNuWL+6kasmtVWw5beAnZITmSoIaw7J92iHj0iXA8abzyUYYJIsUdtcHl0AI4DJ6ayjEZqrLXci76KZytju/YFV2nllNoKXJXeGyaMxBkyCROHJJw1wrBwXF+7jS/UUEY/i6KJ/qUTnfiahkIkVwQQ8xQt7Q2nBA6KZiVxvH//vGvq3A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from AM9PR04MB7556.eurprd04.prod.outlook.com (2603:10a6:20b:2df::11) by AM7PR04MB6917.eurprd04.prod.outlook.com (2603:10a6:20b:109::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.11; Fri, 24 Jul 2026 02:13:09 +0000 Received: from AM9PR04MB7556.eurprd04.prod.outlook.com ([fe80::8599:94b0:43ea:32ed]) by AM9PR04MB7556.eurprd04.prod.outlook.com ([fe80::8599:94b0:43ea:32ed%7]) with mapi id 15.21.0245.009; Fri, 24 Jul 2026 02:13:08 +0000 From: qi.hou@oss.nxp.com To: libcamera-devel@lists.libcamera.org Cc: qi.hou@oss.nxp.com Subject: [PATCH] libcamera: egl: Cache probed EGLDisplay to avoid redundant init/teardown Date: Fri, 24 Jul 2026 11:12:56 +0900 Message-Id: <20260724021256.1870981-1-qi.hou@oss.nxp.com> X-Mailer: git-send-email 2.34.1 X-ClientProxiedBy: SEWP216CA0021.KORP216.PROD.OUTLOOK.COM (2603:1096:101:2b6::8) To AM9PR04MB7556.eurprd04.prod.outlook.com (2603:10a6:20b:2df::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM9PR04MB7556:EE_|AM7PR04MB6917:EE_ X-MS-Office365-Filtering-Correlation-Id: 6c2841cd-25a4-4f58-e49e-08dee9291ae4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|23010399003|366016|1800799024|19092799006|376014|3023799007|10067099003|56012099006|11063799006|18002099003; X-Microsoft-Antispam-Message-Info: BALvtpo6OBsnGPiCI29A80A1KKO1dTAtn8kn8P7/qzkoZ0s7NX3s7Rwhc//J2VKrO1tlUcnaGDP3A5uS8XxBViAFfOiVyE6R+t91FEiu67hBPpgk8Qq3J3lhkVhzWqy7SvYMNaxlRFJloDdxitb/6YQ3oLvtXdh5gGOiCeBT07o2eKv+iS3UVJD7eyJ7UPr7qE9MJWwFSl5AU+q/E7aY2FeSyqo60jWPB4GpYeleS+apm7mvX0gluORPDSBpu7co2Qi4Jo4+IfyWaOyCM6yxInFiwSniCVTU6ZxQieOicEv/S2WUHN5pLjy6rUxvqG1nFx4sAvFOFxUfLJG4s/GoFF8YCMxCOMJYOqUeuEliRyiIRQwWLmO3uZiPhW9jfObbre4k58RzZpLIrzZg+BtclXmNftDRm8Ge3oB18USDOLrpTE4341xZGBw94mu5Wzz5mod8j8TUgfxbrbWBA7NcyT7kxZtbpdmPk3LLW7n7+RaSQQcB9N1hPGZ7MhJud4sPCM3ebpwb8ogkwthq3v9IVhNlLFzhiar3TN8CYMy1cWK8K9cjnl+RI5Q+Vr439Qv/3dklW1kTa/tmy3lQ2ZnJavcgBNcJEeld01OIbnI+KsQzQlim1t7kgF2hNzQQNG0K6lYXG3JMQcBIv6MLquYiRB+MXHmZEjn0whJKMFlkLUo= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM9PR04MB7556.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(23010399003)(366016)(1800799024)(19092799006)(376014)(3023799007)(10067099003)(56012099006)(11063799006)(18002099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 7pjnRpIs0cEsyrHyqpBKmcIRDF+2mVpdsRH3NWU6taOq1Zd+w3rQ3MVebNARl+n6VBaEs0CBRPvVvBWbBxZElIbP1pyp2yVl2403PQo6RLoWn2pa1iVa4bBCOfiUa4VlCZyzH9RF6VeTUdv6kUYhXrQrVrc5U2Lmt3Q92O1MPwBSvTxWMcpnFtif5LgdiyskvX+wV8vdZxCeAVvGfiEkoJTH/7Wspa0Em45tqDaXwiVpJXL94nGXswY0SgDQGiBgaF7w53yj30S9vQwANIe2nhtze4dPs8uDPerOP0i677sMJDTDA1u1aJSXFtHDxtEZHDi7QSxx/nk7zCVoF10YdkqUd6QsTo9IOB71VknPLfVLTKaMqG8U02wZT8Bi3EUoky0gKrRvkqS1mGYjmiy3bMXv84Z49b1zf3DhPNmwFCJeyw0xHlQqzx0IPhjmxn1q8O0g9664XCyb7wqXWCFm0ogE4GgqIDHDD2M7T/J/STn0w+dxPnbZN+3f1PXB/bbJs16woIP2WfxbRVwnj8O7AiRi82+qXRS0Piitq3xRvgXiohfzkFYNg0NdS2Phwsh0n0WJhWqf0dqDRv4rkKgsWIAqvxFi91nzpsUJzJ7qe4ggA2uJjkuqGnGvmLg/ypQm8YyUuaNajkU94C6ZhWvzOSx4sIKgA0+bPcw4Xjawk99E1YgpVdjAptb8yhx9AqKNOMgJKk/yO4Rgch2nQ1z8pd0gJ+ok3/a5LAQ2cHTk4zWUouJPrmJ6Q6DKVpczMQ1bUFRAvftNIICUF0hNdL2CJDklWRyS/psEeokyfa8G3sc3M+hBFylhfTVD9W7ndlyxwdEhgyM+ZY8aElTrWQLF7KSpIOV7CXVnmTpUhaYT5dM9A6USmNNvQqXpcqR+C/T7gjbm9M1sanByypL8wog/64XnAA+YfAY5OgRgQjGa+YctTUW1g/ciPH2J8T8jiGlyNHD1fj6/wjKw1RYtBISR1vy01fW6AyQEgcueBORM30FohfC6kUGpCAiDTVyDJXOPYIsKfyC+P+ZY+qeW9u1FvIdwV+oBlWPxiVAtxbchEcHlkbsbc6CMh+5whDOEiHd+ZeJUMSLMBfEgRBXBJ7yJjqiy7fsbYsCXn6ZPPhli89qto5TfEAZp3Yn7TV0Ib8Q6IqgEmeQBnVjUbkNnPkybRraJyiyUMwXZJSt0NMqberQKJFxPGwOj9A2cTjmPAs/+PmU+lcqiyepmccfTvrGIxIHDzoDK2EugI39kio6fncv06h2eKfnDiJy6AJ7jY+MiizuXo7Npzg2FaerfRQYb0GSlFhGLm2fFIQxZ2J2nSI8SZqFnHbFkua4DASNXsPAf/Mz5fIagCSawa55S+SIyho7mQDtmMHEL/k7sIzdhDXW79cCioIUkJTf2Xp6HPkBAMdB3l36ajMT+rx5Bx1fA7+df6xTiC3WMjAXxjeMJP8+MBgRD7QKsOhsJt6pbAscK7tgyB7orPOfdv6+xeEgAdVtX58xKYgRQ+z3vPAEr9Jju/sRohu1sivhi0gOrrkAHi5Ey+FvorlOfSNaUV4TKBso2GPqGTHDs0swCUVTeevWb7vJwEkTknbvKHFdDqAvos3VCYNEek4/LBz68UDrnkfmIz9dHvTGMIyuTGtOwDPdx55OraefJkVpeyxmVddepLKT3hyZ3xFnPuJYERraCju5Qj/HuGum1REaGgz7p3GhB+gvkxQS2fb3bkPyY8PscCPzHGm/s7jU/wDHM03oF3Gr19djt8UZiK1By8WBhaos= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6c2841cd-25a4-4f58-e49e-08dee9291ae4 X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB7556.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jul 2026 02:13:08.8220 (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: /372KeWkKOKl+TUuuiaXAXGy7sS9cexYRyYQAUjooluurWH1kaMYbwdMpzP5wX356w/nH/C4Q3gxe+chPqbf5H2OOfYNRUGL3W/Epu8ahQY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR04MB6917 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" From: Qi Hou isAvailable() previously called probeDisplay() which ran eglBindAPI(), eglGetPlatformDisplay() and eglInitialize(), then immediately terminated the display with eglTerminate(). When SoftwareIsp subsequently called initEGLContext(), probeDisplay() repeated a full initialisation sequence. Avoid this double init/teardown by caching the EGLDisplay handle inside probeDisplay() using static parameters. The first call initialises EGL and stores the result, all later calls return the cached handle without reinitialising. isAvailable() is simplified to return probeDisplay() != EGL_NO_DISPLAY and no longer calls eglTerminate(), because the cached display should be live for reuse by initEGLContext(). --- src/libcamera/egl.cpp | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/libcamera/egl.cpp b/src/libcamera/egl.cpp index 7ec7a654d..f5200ee76 100644 --- a/src/libcamera/egl.cpp +++ b/src/libcamera/egl.cpp @@ -301,46 +301,49 @@ void eGL::createTexture2D(eGLImage &eglImage, void *data) EGLDisplay eGL::probeDisplay() { - EGLDisplay display; + static EGLDisplay cachedDisplay = EGL_NO_DISPLAY; + static bool probed = false; + + if (probed) + return cachedDisplay; + + probed = true; if (!eglBindAPI(EGL_OPENGL_ES_API)) { LOG(eGL, Info) << "API bind fail"; return EGL_NO_DISPLAY; } - display = eglGetPlatformDisplay(EGL_PLATFORM_SURFACELESS_MESA, - EGL_DEFAULT_DISPLAY, - nullptr); + cachedDisplay = eglGetPlatformDisplay(EGL_PLATFORM_SURFACELESS_MESA, + EGL_DEFAULT_DISPLAY, + nullptr); - if (display == EGL_NO_DISPLAY) { + if (cachedDisplay == EGL_NO_DISPLAY) { LOG(eGL, Info) << "Unable to get EGL display"; return EGL_NO_DISPLAY; } - if (eglInitialize(display, nullptr, nullptr) != EGL_TRUE) { + if (eglInitialize(cachedDisplay, nullptr, nullptr) != EGL_TRUE) { LOG(eGL, Error) << "eglInitialize fail"; + cachedDisplay = EGL_NO_DISPLAY; return EGL_NO_DISPLAY; } - return display; + return cachedDisplay; } /** * \brief Probe whether EGL surfaceless rendering is available * * Checks if an EGL surfaceless display can be obtained and initialised. - * The display is immediately terminated so that no resources are leaked. + * The result is cached so that a subsequent call to initEGLContext() reuses + * the already-initialised display without a redundant init/teardown cycle. * * \return True if EGL surfaceless rendering is available, false otherwise */ bool eGL::isAvailable() { - EGLDisplay display = probeDisplay(); - if (display == EGL_NO_DISPLAY) - return false; - - eglTerminate(display); - return true; + return probeDisplay() != EGL_NO_DISPLAY; } /**