Patch Detail
Show a patch.
GET /api/patches/24852/?format=api
{ "id": 24852, "url": "https://patchwork.libcamera.org/api/patches/24852/?format=api", "web_url": "https://patchwork.libcamera.org/patch/24852/", "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": "<20251028160453.3802642-3-antoine.bouyer@nxp.com>", "date": "2025-10-28T16:04:53", "name": "[v3,2/2] pipeline: imx8-isi: Delay ISI routes config to acquire() time", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "34de17f92f8954edc7e700c914fbb1a6b1e84549", "submitter": { "id": 218, "url": "https://patchwork.libcamera.org/api/people/218/?format=api", "name": "Antoine Bouyer", "email": "antoine.bouyer@nxp.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/24852/mbox/", "series": [ { "id": 5538, "url": "https://patchwork.libcamera.org/api/series/5538/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5538", "date": "2025-10-28T16:04:51", "name": "imx8-isi: Move isi routing into acquireDevice", "version": 3, "mbox": "https://patchwork.libcamera.org/series/5538/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/24852/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/24852/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 96D76C32CE\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 28 Oct 2025 16:03:10 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 9D9C0607DD;\n\tTue, 28 Oct 2025 17:03:08 +0100 (CET)", "from PA4PR04CU001.outbound.protection.outlook.com\n\t(mail-francecentralazlp170130007.outbound.protection.outlook.com\n\t[IPv6:2a01:111:f403:c20a::7])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 1DF2F607D4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 28 Oct 2025 17:03:05 +0100 (CET)", "from GVXPR04MB9831.eurprd04.prod.outlook.com (2603:10a6:150:11c::8)\n\tby VI2PR04MB10884.eurprd04.prod.outlook.com (2603:10a6:800:270::17)\n\twith Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9253.18;\n\tTue, 28 Oct 2025 16:03:03 +0000", "from GVXPR04MB9831.eurprd04.prod.outlook.com\n\t([fe80::4634:3d9c:c4a:641a]) by\n\tGVXPR04MB9831.eurprd04.prod.outlook.com\n\t([fe80::4634:3d9c:c4a:641a%6]) with mapi id 15.20.9253.018;\n\tTue, 28 Oct 2025 16:03:03 +0000" ], "Authentication-Results": [ "lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=nxp.com header.i=@nxp.com header.b=\"gUVZGziX\";\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=OwuH3YYeeqLBG7TlQyig8vf1yVKW6PdnqqrK0DmylJx0OiSIR42CK2kBGfKTsWTouUaRljxXO+kpelGjOF+Wp2AhAK9ExNrtCUswd8WNpD796RqmFBZXF6uUCZhb9Y/6Kk7O0SqAoCGbHnNTZemY4+fErnruXsTm9I5NI2ykhYI1BsxOrdt18JgaLqxJ5fUc3j0toulnhAL+8dUrI8+kephWcpRDGAdhRlvvWHL23KwhcLxz+Wwkp5g2HJf0R1mWHBI4AWRq+fNCjwmnZwEgnAHTbiSI3ZKjMgsCYr0uI3GAviJp+LVQrEuBLBna7OVi1PINhyQcTiDCbpJJY/gSxA==", "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=l6McDr/2siC88VUi4Gz2ZjpJ5iqK//aqjKjPKby1Plk=;\n\tb=XWqTfxF30LpcAOWCg5EN+wGpYvPjdN1iZDrO0pwz3BOB7OvNBLVZ5XkteC0R27l0KR0lqIq8hFeUOPww2vV9fbElmLey4yinxLxCjb5e5WZ1ABrPL8CWfVqn4bFZuoWk0Btn8fzWmfg3MRdr9qDigR8E35jRyltwQ443ZMR7i6nAAgEmReeti/wKcPF9z1lSu2gQYVEVDR9YXpQfFQlMNdbn78GcYefBdLy5lYXjjlD4yVaWIBg1gDaEEMu09D/dDiWKVqcK5uzSrnhq56caiAEI9auOOnEJyY68V9y5TdzUtmNozjo3cVpEwtJVd8UKfqsjN7TVOKePvZ/JzTsbqw==", "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=l6McDr/2siC88VUi4Gz2ZjpJ5iqK//aqjKjPKby1Plk=;\n\tb=gUVZGziXASv3Cmn+OIl60v7aCKFST7F9IXj+2Q9aWqaO5JppuvFjKfTJ7h1XrX6Yoam4zo998rthcjmvTmRkkknuSgG4IwRbWI1TuBEBzMm+eDjMqA6xUXs3COOwKvc1DAWGji9z2mpbF0Ilk+jEkNdcHLzvPQIHP9aUGAUxmMLGkp2UgxuG+gCgF0LKRKT3GZ42OOddLz5xXYQoQ7DPKEWibaDmLTkj6qFYPiM6e2rfZXogco3oZRCZ8r6wAJQKTHFC59osSgjidvuK9HNlwpWp+Eb1L/DsFMR0On2bOZdlJrJLA+o6qpNXxEuCB9YxBgH1wf0U/mSA8gyWa+5iHg==", "From": "Antoine Bouyer <antoine.bouyer@nxp.com>", "To": "libcamera-devel@lists.libcamera.org", "Cc": "julien.vuillaumier@nxp.com, kieran.bingham@ideasonboard.com,\n\tAndrei Gansari <andrei.gansari@nxp.com>,\n\tAntoine Bouyer <antoine.bouyer@nxp.com>", "Subject": "[PATCH v3 2/2] pipeline: imx8-isi: Delay ISI routes config to\n\tacquire() time", "Date": "Tue, 28 Oct 2025 17:04:53 +0100", "Message-Id": "<20251028160453.3802642-3-antoine.bouyer@nxp.com>", "X-Mailer": "git-send-email 2.34.1", "In-Reply-To": "<20251028160453.3802642-1-antoine.bouyer@nxp.com>", "References": "<20251028160453.3802642-1-antoine.bouyer@nxp.com>", "Content-Transfer-Encoding": "8bit", "Content-Type": "text/plain", "X-ClientProxiedBy": "AM0PR06CA0129.eurprd06.prod.outlook.com\n\t(2603:10a6:208:ab::34) To GVXPR04MB9831.eurprd04.prod.outlook.com\n\t(2603:10a6:150:11c::8)", "MIME-Version": "1.0", "X-MS-PublicTrafficType": "Email", "X-MS-TrafficTypeDiagnostic": "GVXPR04MB9831:EE_|VI2PR04MB10884:EE_", "X-MS-Office365-Filtering-Correlation-Id": "f0701436-33b6-4545-2cac-08de163b79a7", "X-MS-Exchange-SenderADCheck": "1", "X-MS-Exchange-AntiSpam-Relay": "0", "X-Microsoft-Antispam": "BCL:0;\n\tARA:13230040|366016|1800799024|19092799006|52116014|376014|38350700014;", "X-Microsoft-Antispam-Message-Info": "gYs4qVYEYw4wf/SxjxS1L/M98UK5BCW/+GEFTHP9zirVOvOCoGq7k6JixjHtcPzP4AjAD0upeL6TYoSHUZTNHDxZ8MbfSnY4ZYxxMDFE5WDsZmxQuI9WB/PWP/G43kjZraAkgTdz1cE4ymzA40KsiODPeRamjQiqrWk4r8khQz5XGG0ijpWjCWK4SKG/wNc3DwLEc5ejVOThd3FzZpF5CF/uIxjj8bR6gNqMwdwCHJiNaag4wHtFM3hAbRCQwGwV5YQo+/gGGzMw9VXKVb/EkkRPsgWfQbA7Xyc/Os6B8kzMd4c20rsC//WbXXZIZ5Zchg+oMTDpXAAh/1d6C/eNcm9Q1Yx/xQGiP1PftY+xTyQmAbTiGv5kZXXrzRU+yfHc8pJIJQX8SJKZv1tNSRE2rHfu9TJB7vDzx5+iW9JQ8gBSj5HYnl36hgG6kaKtPkKCaezmCNv+G+tQm42feF0LiLlbd5HHYRkby2Wez5ZdllqBCBSkRH5InQiHq/I27h0xBtF/O62yrr/+Rfgt9/ttluKC99r10h54woIuU6ef8liTS8Fkq7JSE0cg/3QYWAxultWM2GgleAH0Xdxg0p68O/eprwd+qgAAoY8FvUC3KcaZ/CegU22YNd1VCzC5eZMIc5mXQY0peGvYmwYodugQT0nD3XlBxhbJupThl2LpSOwsvV6EpAruXA4VyTPaF6mMmvCvT6yov4YrYJw2LxdtVjuJcwRGcgm6zK9q32cx/afDUBT5fGVpFhAJ2qpJli1PaZc7LZEbVfegO/WBHSG6CVwyVlVlDmBzc+A3Me/Di+M1NcI1etNI0dcK98C/lzd6cXsaKsexnCW1oT5O1o+TlqRzQfc27kEs6YBmYSwqsP3o5nyEuFX8PJtsza5AxejkPZ0ELUNPjE2KzaETwGuvL38txABd2yNd56oMx5RgEuhVOfgnIlIRAe8z18NWGgU05pDfmnHvPKiSS1a2Tlo0WmC2swviM4dHtkiNC4XCvNNzq7yPyX5XYiVvVdmJ9m5v1u+k9my+ZJNuYu+kvzNFfyGvVa9MGvl9amWzb9MFPgNsflaoDC7jFk6xCywlQIHtsusCkouuFBQFQaIuaDJQFFlW5zFAH1VugtqJRn9FG7mk7MQukphRBhV07tnKeWnMG65pjqnTVDcmRrB4+rQk6zRWkkCJTNaCvIlSHHL7KT3h44i6KW2aeqqQiV735SwOL9/ryyWwgHtbu4KQt4asWAZ4C5If68dKgBtxU99NUTulNc2lAwVsAjMvc1Fnijiuj8bPhbNg2olh0wgfIl6Cxog17cFIrnQQju2HlJpysYvErTNgutfYB/UpqYsmtAp2qj2MPi+bjYqtImdubPUGRQ28LjiGsonTd3r0DQ6zV763NpOhYmOi/aagy6l1rKwHwhtHh7NEz8TZ97cpU16pUG9JeWh7xONwq0FiW/0grTvIeQgOjWObM3g+wUKWC1yaYHDZOapOcuSsznk+08tjVf238oOaqpn7eCgwuNInXtvVDzuiqKbxOaTq0e2h4jTP", "X-Forefront-Antispam-Report": "CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n\tIPV:NLI; SFV:NSPM; H:GVXPR04MB9831.eurprd04.prod.outlook.com; PTR:;\n\tCAT:NONE; \n\tSFS:(13230040)(366016)(1800799024)(19092799006)(52116014)(376014)(38350700014);\n\tDIR:OUT; SFP:1101; ", "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1", "X-MS-Exchange-AntiSpam-MessageData-0": "TCF+/dXQMrURKLpDOonzARPpQmUrtQkMPbniLaVf1Ci99q6SGUCR/pxSHWZYs984c8386oHthMCL8CgcWwvwQjv4D5lDzv6Pz+sLOIWPIaOFmhedILbvI+9GXTm6p9MqutGXB/nXcUi5phYOPAtu/ycnluHtuKvWNSbw9VioKgwATwmZ4SuxIGJOmtsfgOL0g9IvadvH5RTEdqokdwwrPhb5D4CNhjnmt/Rn0mCMPRnudESbmMdcWpf3/vrdcH7XQPzKymJyIFZyzaW8SnpgvGB4fQLHMg3A62dAuBTgMpFjSX3a1CxYFPR5f+yhWGKqWCgZq8OZSOTbPg960n8Qjzu/MDBSnM78WM6vmrDbP45rt2j04N/pOU+zMMAD0b8IENmCR2NvonIab7qzRNsmPV5Fs6Oj45pLXz6/8+ZxKDJYq6EK8vCpcISDBuyj1y67jAZrKBxSSnBiCxxd9rYTLek0Qq75ERUHIwWjkFpYb9FOy3RQtWv/ElnGUh9Wow/77ozrqrfD9PNbRUk66ljOZYabJmrtHzTUR3BJKL0LFBY1BI9wFyXb7f9AaavlondgsRzEr681/ULZNmGbSO8u2dbwviX3ksDzExz3v7QsnSqYSm0jniPvx1LKToGT2/14gF/u9Qat1Q9QBQobM9A2J56is7Bn8Es99ivKlKnX/Xcp6UcnrClBgT+K9zA24K+4rmkJsZvKbSQiB9HhOhkvx56MlPzaLXepf0bsgbgQhLclqrS5oqyhhVQM0zF9TNHnpm/umTcZoYrFS8xPVZQge4q0vbwNkIWKiVyCbWYHTrjYO5z6SadzDd55k+coOLH0VNmZQ/I2B9haVofsdL7ix/v3yhnbDVERq6q5VEPFspMlj63er1sKstAMkMOe/l34HRNIDoly4hGg7N4G5AGRdXYi//8jPjCCO+8LqJycvT6gf2tQASNd0fiwvQ6bLxUp7jKKt4VHnAFOL6kspWR4MBPhO8AL2hOgX/3+tWtvTkembk2O7HQt1ekgKeKw85M5sdZ1fkkrL+zmWPZvYsx6UZBoR4ivSo7V0sgYWfFQRCc4ynqcEctn1p/B4d6NFUESPfCsLnJJJJv6AZp2QmEOcWq0dyIm6oAUeFrSRTAAXcK1uUAKrDESaQLONA/sfZ3yfm68lFYshb5Cw26NipDXrPctVnj8etCNKRO7IcuA6k6R5EcuCD8cKHzcg7z6hgrx/xMjCc9YxYgdvxBMwzItJosnx+8vJJtZPlBPn+I3gfsvDGf7Mn1j7A0ATDkR65aCsPZ1RPfPkyWXfrnzZaAS+EoaW0nogf/1dD5n4ZONCKGiL3dKIsqUdDvWNOZdP62sQDzMJtKR6qUxrrEdBObIhxnb1uV3QdCI6Nhi16KTcUzO8pTbQU11YWDOdTPA1Sy3qixRG4FpVlj1kVw/sexOJjs9amGaOudVkjEmB3xvNOXkq0RVooFithQXRA2On7jTTOY/jK1NydHn0A4mrc93nglEEx53qd4hbWxeeyfB9zERcc0d+si6dbmPnjyYLoDIso9KX2J8yB8nwMbzqBSLS8Z1sCGTvMSmiqjn+s0wO90Vga5MeoHRMzpPnB0GuYScd99mNG0kAAYAl07Saeq6Nw==", "X-OriginatorOrg": "nxp.com", "X-MS-Exchange-CrossTenant-Network-Message-Id": "f0701436-33b6-4545-2cac-08de163b79a7", "X-MS-Exchange-CrossTenant-AuthSource": "GVXPR04MB9831.eurprd04.prod.outlook.com", "X-MS-Exchange-CrossTenant-AuthAs": "Internal", "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "28 Oct 2025 16:03:03.4791\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": "bH9uLxeY9KBg6nmGwTvUWpiLTgyh4SNN/XZV1CrPYlntV0Qn6HxO1/RVD3wmjesDlDORUT7HOovVlEP/uKr9Ug==", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "VI2PR04MB10884", "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: Andrei Gansari <andrei.gansari@nxp.com>\n\nFixes behavior when calling 'cam -l' during a live stream from a camera\nin another process.\n\nIssue is that multiple process should be able to list (match procedure)\nthe camera supported. But only the unique process that lock the media\ndevices in order to be able to configure then start the pipeline should\nsetup the routes, graphs, etc.\n\nThus, the setRouting() is to be moved to a PipelineHandlerISI::acquireDevice()\nimplementation to override the default Pipeline::acquireDevice() function.\n\nFixes: 92df79112fb2 (\"pipeline: imx8-isi: Add multicamera support\")\nSigned-off-by: Andrei Gansari <andrei.gansari@nxp.com>\nSigned-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n---\n src/libcamera/pipeline/imx8-isi/imx8-isi.cpp | 30 ++++++++++++++++----\n 1 file changed, 24 insertions(+), 6 deletions(-)", "diff": "diff --git a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp\nindex de09431cb9b9..a19e6729fbf2 100644\n--- a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp\n+++ b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp\n@@ -71,6 +71,8 @@ public:\n \n \tunsigned int xbarSink_ = 0;\n \tunsigned int xbarSourceOffset_ = 0;\n+\n+\tconst std::string &cameraName() const { return sensor_->entity()->name(); }\n };\n \n class ISICameraConfiguration : public CameraConfiguration\n@@ -117,6 +119,8 @@ protected:\n \n \tint queueRequestDevice(Camera *camera, Request *request) override;\n \n+\tbool acquireDevice(Camera *camera) override;\n+\n private:\n \tstatic constexpr Size kPreviewSize = { 1920, 1080 };\n \tstatic constexpr Size kMinISISize = { 1, 1 };\n@@ -143,6 +147,8 @@ private:\n \n \tstd::unique_ptr<V4L2Subdevice> crossbar_;\n \tstd::vector<Pipe> pipes_;\n+\n+\tV4L2Subdevice::Routing routing_ = {};\n };\n \n /* -----------------------------------------------------------------------------\n@@ -950,6 +956,23 @@ int PipelineHandlerISI::queueRequestDevice(Camera *camera, Request *request)\n \treturn 0;\n }\n \n+bool PipelineHandlerISI::acquireDevice(Camera *camera)\n+{\n+\tISICameraData *data = cameraData(camera);\n+\n+\tLOG(ISI, Debug) << \"acquireDevice \" << data->cameraName()\n+\t\t\t<< \" count \" << useCount_;\n+\n+\tif (useCount_ == 0) {\n+\t\t/* Enable routing for all available sensors once */\n+\t\tint ret = crossbar_->setRouting(&routing_, V4L2Subdevice::ActiveFormat);\n+\t\tif (ret)\n+\t\t\treturn false;\n+\t}\n+\n+\treturn true;\n+}\n+\n bool PipelineHandlerISI::match(DeviceEnumerator *enumerator)\n {\n \tDeviceMatch dm(\"mxc-isi\");\n@@ -1034,7 +1057,6 @@ bool PipelineHandlerISI::match(DeviceEnumerator *enumerator)\n \tunsigned int numSinks = 0;\n \tconst unsigned int xbarFirstSource = crossbar_->entity()->pads().size() - pipes_.size();\n \tconst unsigned int maxStreams = pipes_.size() / cameraCount;\n-\tV4L2Subdevice::Routing routing = {};\n \n \tfor (MediaPad *pad : crossbar_->entity()->pads()) {\n \t\tunsigned int sink = numSinks;\n@@ -1104,7 +1126,7 @@ bool PipelineHandlerISI::match(DeviceEnumerator *enumerator)\n \t\t/* Add routes to the crossbar switch routing table. */\n \t\tfor (unsigned i = 0; i < data->streams_.size(); i++) {\n \t\t\tunsigned int sourcePad = xbarFirstSource + data->xbarSourceOffset_ + i;\n-\t\t\trouting.emplace_back(V4L2Subdevice::Stream{ data->xbarSink_, 0 },\n+\t\t\trouting_.emplace_back(V4L2Subdevice::Stream{ data->xbarSink_, 0 },\n \t\t\t\t\t V4L2Subdevice::Stream{ sourcePad, 0 },\n \t\t\t\t\t V4L2_SUBDEV_ROUTE_FL_ACTIVE);\n \t\t}\n@@ -1116,10 +1138,6 @@ bool PipelineHandlerISI::match(DeviceEnumerator *enumerator)\n \t\tnumCameras++;\n \t}\n \n-\tret = crossbar_->setRouting(&routing, V4L2Subdevice::ActiveFormat);\n-\tif (ret)\n-\t\treturn false;\n-\n \treturn numCameras > 0;\n }\n \n", "prefixes": [ "v3", "2/2" ] }