Show a patch.

GET /api/patches/27496/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 27496,
    "url": "https://patchwork.libcamera.org/api/patches/27496/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/27496/",
    "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": "<20260724021256.1870981-1-qi.hou@oss.nxp.com>",
    "date": "2026-07-24T02:12:56",
    "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/27496/mbox/",
    "series": [
        {
            "id": 6077,
            "url": "https://patchwork.libcamera.org/api/series/6077/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=6077",
            "date": "2026-07-24T02:12:56",
            "name": "libcamera: egl: Cache probed EGLDisplay to avoid redundant init/teardown",
            "version": 1,
            "mbox": "https://patchwork.libcamera.org/series/6077/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/27496/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/27496/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 DA6B6BDE4C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 24 Jul 2026 02:13:11 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 16B8367ED3;\n\tFri, 24 Jul 2026 04:13:11 +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 5C60767EC4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 24 Jul 2026 04:13:10 +0200 (CEST)",
            "from AM9PR04MB7556.eurprd04.prod.outlook.com\n\t(2603:10a6:20b:2df::11)\n\tby AM7PR04MB6917.eurprd04.prod.outlook.com (2603:10a6:20b:109::21)\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 02:13:09 +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 02:13:08 +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=\"Sz8W+aYu\"; \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=JMb0YY8DGEdoeE+flMDfo0GBxSD7YK9XqhPT9IcKbTKuL+JR2MnGmx5eU9X7MQpaFvJdh98CzpZZ1rMEL4oG7PowCCfweSt/wt7UiBoqCnFpEi8IIZTJVv1q614AgF0NWuHW/37KiaVIZD6ZqRLfzEyBAgjf18IKVN5DVwmB47HNd5ReEO82hAZyOY1g+ZuNYZa4g7L3YXtE12mMn5MOIoeyez9FX9NpA+ueCxxAOX8jjzbehDoxks50RhVOVlwyGkErBL5xMtLQdGfUfB4Dzc9UBXAhP8WX2gZLi/eTwiC4jWTBCgdFTpRMBiQf8r7OlukaZO9cl+AxnWe5DbMSPg==",
        "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=Fh4tW9Q2d4+4iHJ1wyqltQPBVhmONOv6eGMezVRmiZiaWQ5f6+/6SCDFjzbS+XBpwBMGrViJe3WsPZR6ukxXFty5jp0fe99sX3WAqjpyKsATr+zottRPrGiVN0aHsu3yYrP1O7UJp2jblbDYIE0h9gCIY04N47hpIacCe0ga9FfAg0q2J4PoeABktcs5SYc3bfi5Kj1uqpiKxklSEwrHVjkt+71jGpvAGPNcFVhlkfH60aoH/ujz0L/MEz5RGCaPCxvvX81NGyHEYejf7vY8WqVGt9SEhT4XErdZSW7n3c0AzeeNpl/BkWSVL+WCUHWJ2fYuhX85nlh+TFdX9boaJw==",
        "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=Sz8W+aYux9mw7+qibz3lc1FlgugXFOMrml8Q47bvlOfCAmmcpeppeGb7mMUDdMm9ZclX7PRyQomUgoOIUCjbamZvzC3XNszv7mhqok18x0HEltiLrg4pvY8AsLgNjtss2Gr/RA4ykVKnJlzKTg3cSOJE8udVACrWzbfwOQqNuWL+6kasmtVWw5beAnZITmSoIaw7J92iHj0iXA8abzyUYYJIsUdtcHl0AI4DJ6ayjEZqrLXci76KZytju/YFV2nllNoKXJXeGyaMxBkyCROHJJw1wrBwXF+7jS/UUEY/i6KJ/qUTnfiahkIkVwQQ8xQt7Q2nBA6KZiVxvH//vGvq3A==",
        "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\n\tinit/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",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-ClientProxiedBy": "SEWP216CA0021.KORP216.PROD.OUTLOOK.COM\n\t(2603:1096:101:2b6::8) 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_|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;\n\tARA: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:;\n\tIPV:NLI; SFV:NSPM; H:AM9PR04MB7556.eurprd04.prod.outlook.com; PTR:;\n\tCAT:NONE; \n\tSFS:(13230040)(23010399003)(366016)(1800799024)(19092799006)(376014)(3023799007)(10067099003)(56012099006)(11063799006)(18002099003);\n\tDIR: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\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": "/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": "<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": []
}