From patchwork Fri Jul 24 01:43:38 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: 27497 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 411E6BDE17 for ; Fri, 24 Jul 2026 07:07:04 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 42D7867ED8; Fri, 24 Jul 2026 09:07:03 +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="lgMaKE40"; dkim-atps=neutral Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazlp170130007.outbound.protection.outlook.com [IPv6:2a01:111:f403:c20f::7]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 3880267E8A for ; Fri, 24 Jul 2026 03:43:51 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=N2BOyHBaNPkWptlVk8DP6p+DZR6nmHYnuWRDzdmsLymoDaLQfb2egcetCSKU7QQvV5XgtPNQWh5CPuXJp+86lsMdY08FU3u1oKBqJKdaO5c5BcoYqeKtTkq4kgUGv4O8OWLpETInynEVAbwPffNHboQV39bBMcvAoSeKk4IxM6JDf8IdyLwK9nHJNT5B3FhBcUcKqmfKliaimwlhO78dFQbyUQk35aA4IWs054t8hie/wO0zVrPQ1FahkIX/if+UJZ9H2BeanGZgNzVrDmypTXEdgO5vulP42Q+pweRwk9w8DGCwTZ3QtsZptXje/J0nLvgwp8NUZSZ5Ky2rxVGwzA== 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=dS1tP29QxWdVeu8JGgLfElPLDq9ht7dQkCjSIWVaNRKZUFSmazoQfr+VXxFxcjy7qpKFBLbabMcSh8mwB9DNVfNsGsdyZGdyw7RcsxOIolseLYs/f8gbl0fi9+TgFSrMK5QPJAN9wJDd9jfloWo/yWcrJRgE6guJPYjDM84Ey6G3O+/z2JI0seIY50qywEJeIDlHvCAtD2YmeNkQnFaK8H9o26rpvUWc2O+5Xwp2YqagTl1tyzRY/U5fjYXcQ3ttKTeppXsyZJgCK47Q2ii2Owc4UaLmJW3vioUdFRnfVBRW3+74YEmfnFtaX6B4wimlDL8oDbHcvUrxjvcGYIxukg== 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=lgMaKE40uqqlm1gaskYFHJOgh4kkTZnQPBjPQDm9T80gIH2kMnAKKh0HibN0sGj19RFQgPe4i/qhucPvEzHo39ZtaHsJzVA7gdhS1V1NS/J5kCoC72NCirpkY+HIi67Y1kW0h6XrPBGm54TQuLjWdQHVPIuN/iIreY4GceGQyyeqi685R2cMB5X0fva60Uc2FPHTyVBGc/1YFuUKRyikb+wbFiFxcXx9n/YFY78+IP2pR//EW4ex1YBuDqEXJEYyhqgJbuZUyVNLkWfpJo57TNkr8pllSJkwwkHZGtaU7sZ9pPe7mPjLXqMZr6HT3YSz1Q0vBOQ2kkxdWoBzwv3TrA== 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 GVXPR04MB10451.eurprd04.prod.outlook.com (2603:10a6:150:1ea::15) 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 01:43:46 +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 01:43:46 +0000 From: qi.hou@oss.nxp.com To: libcamera-devel@lists.libcamera.org Cc: jared.hu@nxp.com, qi.hou@nxp.com, julien.vuillaumier@nxp.com Subject: [PATCH] libcamera: egl: Cache probed EGLDisplay to avoid redundant init/teardown Date: Fri, 24 Jul 2026 10:43:38 +0900 Message-Id: <20260724014338.1850939-1-qi.hou@oss.nxp.com> X-Mailer: git-send-email 2.34.1 X-ClientProxiedBy: SL2P216CA0143.KORP216.PROD.OUTLOOK.COM (2603:1096:101:1::22) To AM9PR04MB7556.eurprd04.prod.outlook.com (2603:10a6:20b:2df::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM9PR04MB7556:EE_|GVXPR04MB10451:EE_ X-MS-Office365-Filtering-Correlation-Id: b3d388af-7c96-4c07-0bb1-08dee925003d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|366016|1800799024|23010399003|19092799006|376014|3023799007|10067099003|11063799006|56012099006|18002099003; X-Microsoft-Antispam-Message-Info: ZkH5YfxFfE2hcaq9RPgdVUFrMuOa3OKES9PrN2HlQkAb29J2XCAXBec+VbSS5pKJ59wOxRIOGfcMcbJApXEXdWtOud2lUyA7nvLKTFw2N53/Ta9PXQ+1dTk4M1z4TSFdrfFiliR0VZmMnjaGqiUqjY2vuN9vrb5wzhlAwRloD1SrNAiiq/jUs6UZ6bbuQcCsAISQ8DLLdxzqZWHvbwE40g8dtFEDpFLDTLnWzPpnPCjxWbNaxWmKe/4UTmI3a7+2vNiIouKksJ49HPyyilRcg/4k15rtSHVszX6nuqJVHEgdta1tlKDGTPWAk2tSjhyUUn2fYZEXVdhOB44dm156MB6AAabXfQeFlx/Ffdr98J752bkI9Z8OHKqI64JGIbFY+LGeArBwFWOzeU6yj+y+HnV3ZnKIdL03EKpls97XpDzU2NMknDiYWLzkirRkRWkKqucSWadW3FVsgoOvuD9Dzq1u6yQUsIfEfsNW6W0L03PBCuGPJ76VL6tw7DG0p7XwCB/2LFv65NJOwZcrVxz0KcmoxlGjKXfbcQKYc5ufEn4VE24tsxq8zIwjMCbxZxROwAE9vg3pDlofnum/U1FwFngZnpTAGuWcF6s7N7IKBBEL5uVxh4TXph3KkTK5FuPIQXUiV9xpX4tEtV3B+7a+B4JWJCQTuBvk4ZyTWgu91Hk= 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)(366016)(1800799024)(23010399003)(19092799006)(376014)(3023799007)(10067099003)(11063799006)(56012099006)(18002099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ts7nUzFmZDWqOQeRq4OIhMIBzDL4JiXQaYyQgknQNHxAVaJZv8QftIkbRw4AM9IjZbvVRoTWbIaefY+AELLyRvjGq+D7/+q9v7svO412RCx85sWyGO+9czFcqdDOiSC1d623DsQYx1FwfFdKZ9bJdqsyZ56r35GHXntBsKnSIx0O1eKDoJT8TzKltdEVdxoFI2MXveoaUuVthnNiwhV/SsKDPPeeUVcBYNUDOYNyx3YXg9pp2WNpP/PlXmCFirzs+SUoAt6x+90BC8svPZNDVwuo8s3HDy8Ic3GoniRrbOTD8kxn9pB3j+J7jIU1iWaijGv8b4Knj5eJ7xvTnJ2YYiMc11EejlqmAu2O938kVIy1RweORz1jq/dk5VbdQHsXm7qbJ4kc+nRoRq/WAOW3LDjnIvj9U8JzIGMAaj8MYYihDrEl2KMpKU3HiSQRAA0nDeSKk+tVTWkGcfFOGvkv1HK65ubDZuFqbratSsC012ht59gZRCtjSFUbDXjR10usfik9Gne0aqZ/q+WtkLYg2ysjh00NCCzvMLrr3BA0G10j2qCI3/GYqkaq1R83INwb5TuHcUMmFx0t+yIZTaSxgvaeotR8ifYnWd0lXJTu+n2ZqUKohpfysdD+tDjAYIdf6gjsqTkN7baNZIoU586BRnSn6oWoOfnjAhoOvDD+9AVsD0wd2gVDbxq3jjswG5ujOeTr7zSaRPKF7+r/UvXwirOQHkRQhh/5IkLikd026SmP3hIKBOLQmR7RcqQ99D5r3Ac82OSvp5CgVrZuwPvSG7qkFLBvpH1/liE7QoJ60xAQJ17p7DtcDCdXpkzpREobkhpRyySY8ga7GMDs4ILr+VJ+ofJkDB6RPbRUdzuTQrmfq2/qYfKriVRpU8YS9KldXqQOzKGmTIkYUI9kIX2YhgOHf8IMuUxVE4y0k74iFROi1wLb2Vtk8DH6LwyqnwbjmUgdDOsK8tLqkysx88TdZGPqkFcKehVjvP5vuMhD4/7T0xiqHtKd45uW18fXXmI92rH9og9Jk9E9kKN8Ox2dBYt/5npxae5wSL5wm0PppzPreEt+bju4Z7VEkLXb+V9Rnwo7IQZm7R6D+Z3VLfSGID2D0tikTumE6DDlqnJM4DOOnkEwlp5B7v53eLa8DedeXTugmU9oonL011xIMwHx9RoVI1amIZ5ObaliBqGjXu/Ec7IuAkjhgjLQelgIOEP1qL5rnPmKS3vL7XfNDTIejDqKKFyM0p/GiGRxXRECgOGJJkVaDIgWgpu0Nb9+4b+4lh/2N23SxVg8N6wUoVmz0NLs5ysCz9uSfhLxxaGrSPqoiALUpRL+jhbaAfHYfQLJCI7zTkFoRYhaJICSDWh/TZmj36xo4ilFFk3ei4Hf3LcAHZfl34n1/72WwrIpMTzzfSo0l38fArJxbQdEdJg01k4gSHaACwJ++rQVKeI5N6xppB8k6xKf0Cl736u8iyGa4uhRZ8aNv9/RK+kl4NgcQkXh3b7FcH922XYSISBiNRQAywDVWITACF5I2ySfK3Bc3PkeYHZCxS9untyrjNdWtcWdhkP4MfA73DkKgxPw47PNJXJhKA0LQZU4kdF8XrMtOiVvRjhoAJXmapm4N02zWN3MRg+f3bhNHjQ01dFFsM+G7h6oHhFUFaDMYf+l8ipVj1hiOmFeP3Np+5mvpthbTtTThty27EphuqxF3VED3bxDNlCLTb6Q4Ago9LMnIrxA9A59wXN+9rrUmar5996oBqULhaP+64XWCKqDNNXYJbg= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: b3d388af-7c96-4c07-0bb1-08dee925003d X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB7556.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jul 2026 01:43:46.1203 (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: lLOCsuMuYYyIICGulmD2XDqxmhCmvjpUh5hUSGJjLpa40MNLaqmhi1uUW39qZLE1mZ501o7CgVrWaciUbxqt8DTEFdsCseOLhQToRkxFEZU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: GVXPR04MB10451 X-Mailman-Approved-At: Fri, 24 Jul 2026 09:07:02 +0200 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; } /**