Patch Detail
Show a patch.
GET /api/patches/27497/?format=api
{ "id": 27497, "url": "https://patchwork.libcamera.org/api/patches/27497/?format=api", "web_url": "https://patchwork.libcamera.org/patch/27497/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/projects/1/?format=api", "name": "libcamera", "link_name": "libcamera", "list_id": "libcamera_core", "list_email": "libcamera-devel@lists.libcamera.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20260724014338.1850939-1-qi.hou@oss.nxp.com>", "date": "2026-07-24T01:43:38", "name": "libcamera: egl: Cache probed EGLDisplay to avoid redundant init/teardown", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "b250a9d9427ff03f1e9a3bd3f05c3bdcee759f66", "submitter": { "id": 455, "url": "https://patchwork.libcamera.org/api/people/455/?format=api", "name": "Qi Hou (OSS)", "email": "qi.hou@oss.nxp.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/27497/mbox/", "series": [ { "id": 6078, "url": "https://patchwork.libcamera.org/api/series/6078/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=6078", "date": "2026-07-24T01:43:38", "name": "libcamera: egl: Cache probed EGLDisplay to avoid redundant init/teardown", "version": 1, "mbox": "https://patchwork.libcamera.org/series/6078/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/27497/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/27497/checks/", "tags": {}, "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 411E6BDE17\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 24 Jul 2026 07:07:04 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 42D7867ED8;\n\tFri, 24 Jul 2026 09:07:03 +0200 (CEST)", "from OSPPR02CU001.outbound.protection.outlook.com\n\t(mail-norwayeastazlp170130007.outbound.protection.outlook.com\n\t[IPv6:2a01:111:f403:c20f::7])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 3880267E8A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 24 Jul 2026 03:43:51 +0200 (CEST)", "from AM9PR04MB7556.eurprd04.prod.outlook.com\n\t(2603:10a6:20b:2df::11)\n\tby GVXPR04MB10451.eurprd04.prod.outlook.com (2603:10a6:150:1ea::15)\n\twith Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.11;\n\tFri, 24 Jul 2026 01:43:46 +0000", "from AM9PR04MB7556.eurprd04.prod.outlook.com\n\t([fe80::8599:94b0:43ea:32ed]) by\n\tAM9PR04MB7556.eurprd04.prod.outlook.com\n\t([fe80::8599:94b0:43ea:32ed%7]) with mapi id 15.21.0245.009;\n\tFri, 24 Jul 2026 01:43:46 +0000" ], "Authentication-Results": [ "lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=NXP1.onmicrosoft.com\n\theader.i=@NXP1.onmicrosoft.com header.b=\"lgMaKE40\"; \n\tdkim-atps=neutral", "dkim=none (message not signed)\n\theader.d=none;dmarc=none action=none header.from=oss.nxp.com;" ], "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n\tb=N2BOyHBaNPkWptlVk8DP6p+DZR6nmHYnuWRDzdmsLymoDaLQfb2egcetCSKU7QQvV5XgtPNQWh5CPuXJp+86lsMdY08FU3u1oKBqJKdaO5c5BcoYqeKtTkq4kgUGv4O8OWLpETInynEVAbwPffNHboQV39bBMcvAoSeKk4IxM6JDf8IdyLwK9nHJNT5B3FhBcUcKqmfKliaimwlhO78dFQbyUQk35aA4IWs054t8hie/wO0zVrPQ1FahkIX/if+UJZ9H2BeanGZgNzVrDmypTXEdgO5vulP42Q+pweRwk9w8DGCwTZ3QtsZptXje/J0nLvgwp8NUZSZ5Ky2rxVGwzA==", "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=hza/a/IeiccRIUrkKzkl5kpuPlmLaxei8wHGQ8rSV/c=;\n\tb=dS1tP29QxWdVeu8JGgLfElPLDq9ht7dQkCjSIWVaNRKZUFSmazoQfr+VXxFxcjy7qpKFBLbabMcSh8mwB9DNVfNsGsdyZGdyw7RcsxOIolseLYs/f8gbl0fi9+TgFSrMK5QPJAN9wJDd9jfloWo/yWcrJRgE6guJPYjDM84Ey6G3O+/z2JI0seIY50qywEJeIDlHvCAtD2YmeNkQnFaK8H9o26rpvUWc2O+5Xwp2YqagTl1tyzRY/U5fjYXcQ3ttKTeppXsyZJgCK47Q2ii2Owc4UaLmJW3vioUdFRnfVBRW3+74YEmfnFtaX6B4wimlDL8oDbHcvUrxjvcGYIxukg==", "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass\n\tsmtp.mailfrom=oss.nxp.com;\n\tdmarc=pass action=none header.from=oss.nxp.com; \n\tdkim=pass header.d=oss.nxp.com; arc=none", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com;\n\ts=selector1-NXP1-onmicrosoft-com;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n\tbh=hza/a/IeiccRIUrkKzkl5kpuPlmLaxei8wHGQ8rSV/c=;\n\tb=lgMaKE40uqqlm1gaskYFHJOgh4kkTZnQPBjPQDm9T80gIH2kMnAKKh0HibN0sGj19RFQgPe4i/qhucPvEzHo39ZtaHsJzVA7gdhS1V1NS/J5kCoC72NCirpkY+HIi67Y1kW0h6XrPBGm54TQuLjWdQHVPIuN/iIreY4GceGQyyeqi685R2cMB5X0fva60Uc2FPHTyVBGc/1YFuUKRyikb+wbFiFxcXx9n/YFY78+IP2pR//EW4ex1YBuDqEXJEYyhqgJbuZUyVNLkWfpJo57TNkr8pllSJkwwkHZGtaU7sZ9pPe7mPjLXqMZr6HT3YSz1Q0vBOQ2kkxdWoBzwv3TrA==", "From": "qi.hou@oss.nxp.com", "To": "libcamera-devel@lists.libcamera.org", "Cc": "jared.hu@nxp.com,\n\tqi.hou@nxp.com,\n\tjulien.vuillaumier@nxp.com", "Subject": "[PATCH] libcamera: egl: Cache probed EGLDisplay to avoid redundant\n\tinit/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", "Content-Transfer-Encoding": "8bit", "Content-Type": "text/plain", "X-ClientProxiedBy": "SL2P216CA0143.KORP216.PROD.OUTLOOK.COM\n\t(2603:1096:101:1::22) To AM9PR04MB7556.eurprd04.prod.outlook.com\n\t(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;\n\tARA: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:;\n\tIPV:NLI; SFV:NSPM; H:AM9PR04MB7556.eurprd04.prod.outlook.com; PTR:;\n\tCAT:NONE; \n\tSFS:(13230040)(366016)(1800799024)(23010399003)(19092799006)(376014)(3023799007)(10067099003)(11063799006)(56012099006)(18002099003);\n\tDIR: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\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": "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": "<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>" }, "content": "From: Qi Hou <qi.hou@nxp.com>\n\nisAvailable() previously called probeDisplay() which ran eglBindAPI(),\neglGetPlatformDisplay() and eglInitialize(), then immediately terminated\nthe display with eglTerminate(). When SoftwareIsp subsequently called\ninitEGLContext(), probeDisplay() repeated a full initialisation sequence.\n\nAvoid this double init/teardown by caching the EGLDisplay handle inside\nprobeDisplay() using static parameters. The first call initialises EGL\nand stores the result, all later calls return the cached handle\nwithout reinitialising.\n\nisAvailable() is simplified to return probeDisplay() != EGL_NO_DISPLAY\nand no longer calls eglTerminate(), because the cached display should\nbe live for reuse by initEGLContext().\n---\n src/libcamera/egl.cpp | 31 +++++++++++++++++--------------\n 1 file changed, 17 insertions(+), 14 deletions(-)", "diff": "diff --git a/src/libcamera/egl.cpp b/src/libcamera/egl.cpp\nindex 7ec7a654d..f5200ee76 100644\n--- a/src/libcamera/egl.cpp\n+++ b/src/libcamera/egl.cpp\n@@ -301,46 +301,49 @@ void eGL::createTexture2D(eGLImage &eglImage, void *data)\n \n EGLDisplay eGL::probeDisplay()\n {\n-\tEGLDisplay display;\n+\tstatic EGLDisplay cachedDisplay = EGL_NO_DISPLAY;\n+\tstatic bool probed = false;\n+\n+\tif (probed)\n+\t\treturn cachedDisplay;\n+\n+\tprobed = true;\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\tEGL_DEFAULT_DISPLAY,\n-\t\t\t\t\tnullptr);\n+\tcachedDisplay = 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+\tif (cachedDisplay == 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+\tif (eglInitialize(cachedDisplay, nullptr, nullptr) != EGL_TRUE) {\n \t\tLOG(eGL, Error) << \"eglInitialize fail\";\n+\t\tcachedDisplay = EGL_NO_DISPLAY;\n \t\treturn EGL_NO_DISPLAY;\n \t}\n \n-\treturn display;\n+\treturn cachedDisplay;\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+ * The result is cached so that a subsequent call to initEGLContext() reuses\n+ * the already-initialised display without a redundant init/teardown cycle.\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+\treturn probeDisplay() != EGL_NO_DISPLAY;\n }\n \n /**\n", "prefixes": [] }