{"id":24720,"url":"https://patchwork.libcamera.org/api/1.1/patches/24720/?format=json","web_url":"https://patchwork.libcamera.org/patch/24720/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20251022093820.2757759-2-antoine.bouyer@nxp.com>","date":"2025-10-22T09:38:20","name":"[v2,1/1] pipeline: imx8-isi: Delay ISI routes config to acquire() time","commit_ref":null,"pull_url":null,"state":"superseded","archived":false,"hash":"8d6ae318d17e861c83bcda4c4ddefbb8d2b69423","submitter":{"id":218,"url":"https://patchwork.libcamera.org/api/1.1/people/218/?format=json","name":"Antoine Bouyer","email":"antoine.bouyer@nxp.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/24720/mbox/","series":[],"comments":"https://patchwork.libcamera.org/api/patches/24720/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/24720/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 86797C32CE\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 22 Oct 2025 09:36:47 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 13617607A5;\n\tWed, 22 Oct 2025 11:36:47 +0200 (CEST)","from DUZPR83CU001.outbound.protection.outlook.com\n\t(mail-northeuropeazlp170120005.outbound.protection.outlook.com\n\t[IPv6:2a01:111:f403:c200::5])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 949CF60774\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 22 Oct 2025 11:36:44 +0200 (CEST)","from GVXPR04MB9831.eurprd04.prod.outlook.com (2603:10a6:150:11c::8)\n\tby VI2PR04MB10811.eurprd04.prod.outlook.com (2603:10a6:800:277::11)\n\twith Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9228.17;\n\tWed, 22 Oct 2025 09:36:43 +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.9228.016;\n\tWed, 22 Oct 2025 09:36:43 +0000"],"Authentication-Results":["lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=nxp.com header.i=@nxp.com header.b=\"LsRVuTK6\";\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=PjjQ8WFvrZfyTFf8n4bWFBE6F5zo5P1mASENfZrYdkPeY+smZhyJMvQBVzz/rfWEExBPPVnFc3LtUh7jHZbMiDlJlWeV18AF94O0eGEL493gdwJFHsmpjRrAj+uXI5nnpNVHAh7uwYmKl1VHzF8NGniHmk8PWtcggAK8Ij1xQ7q3j67YBqzLkfn08mHFszBa+XaufpaELqhHsdveeEiHRv4pIhwOCcN2QMgn3QkvATH1lpmsXokQkgBdwXJsySfkTXZS6RvU1IuZPDz8qW15hS9TUwcA0gfqHHw+n7CNsgFFAAYoJxAdsfsHqHNaSUqtjaVpQFkVlOE/qpBTesI7zA==","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=a8Eu81QCwC+r9naUP+I32hGlDlZbN7rampzqMAPUuL0=;\n\tb=W6kOoExxyUn1Wn2NahaUGlqQb7Re57VQ9o51TYyXMZN1XdZh1O9ib74obvBrmRzLiCR1xvK4S/BAGD1P2nyG6w5QQNQ1JrQbhzWQ/t9C48vo01y15DoB44uSDW8gqVfFzCiVsmiV1urniyzrKrd/4+OMhp9W1JkMhxNccimKUt+bq7C5tj2J/lzmsZD/t7eQl6xSyYHxTzavIqTfkCQuqTyKXaxwoqyaKkR1Y8POfrlh3ynw1oJEvVUjqZFImkd6hU8/m+npUnHzQgCJJMzDJVOXrzi3BgH8+OS+IYQ24bEKbyD60kwun4eIBYQbRb13iIDkWwUJF2fmmj9lpKObhw==","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=a8Eu81QCwC+r9naUP+I32hGlDlZbN7rampzqMAPUuL0=;\n\tb=LsRVuTK68ZhiS7dNoJ37taEcgcWFGnDQP/RKNFWmavMGpYIWSaRdD1j4Hm4rbKUr+Eyjrp/Y7ATxFAbxlV/HC2T+kbFojIi7GZ96aZjDzgf0oChPxGYaYaLYwb5IkZ/LqVe2US+i0PxEhOzsuJEj4kdQ0gSWXxyd5MCAGUjLgbe59cIFKp9Ynvgx4M7N4jozTiV29HS1S/uSD+9HCxNI3aWyqc61U5rSOlO+wcMBLuH/RXeMP43/GjyC63+KN2pKv6NOCldiC0LXA0p6qf1xPaCle8WMQgw64EUB7HmcNfTngQxdRK4qs/uLxNcPXLEd5NIBC2UVuEMthfojvWaJ7g==","From":"Antoine Bouyer <antoine.bouyer@nxp.com>","To":"libcamera-devel@lists.libcamera.org","Cc":"julien.vuillaumier@nxp.com, Andrei Gansari <andrei.gansari@nxp.com>,\n\tAntoine Bouyer <antoine.bouyer@nxp.com>","Subject":"[PATCH v2 1/1] pipeline: imx8-isi: Delay ISI routes config to\n\tacquire() time","Date":"Wed, 22 Oct 2025 11:38:20 +0200","Message-Id":"<20251022093820.2757759-2-antoine.bouyer@nxp.com>","X-Mailer":"git-send-email 2.34.1","In-Reply-To":"<20251022093820.2757759-1-antoine.bouyer@nxp.com>","References":"<20251022093820.2757759-1-antoine.bouyer@nxp.com>","Content-Transfer-Encoding":"8bit","Content-Type":"text/plain","X-ClientProxiedBy":"PH8P220CA0001.NAMP220.PROD.OUTLOOK.COM\n\t(2603:10b6:510:345::9) 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_|VI2PR04MB10811:EE_","X-MS-Office365-Filtering-Correlation-Id":"6a4e3977-6694-47f6-e7b1-08de114e8270","X-MS-Exchange-SenderADCheck":"1","X-MS-Exchange-AntiSpam-Relay":"0","X-Microsoft-Antispam":"BCL:0;\n\tARA:13230040|52116014|376014|19092799006|366016|1800799024|38350700014;","X-Microsoft-Antispam-Message-Info":"JfDcXNjlEv0GBcK8WlsmyOv2K9+cZZ9k3OlEVv8F1QMnerdWHJNcwltfLFTkPrG3gec5Y0USiKgI2hukzkE2MQSypX46NSzFna82PjFP4EDMXXSzee1ayewMCtr6SwbzQD8KegbcUw2L+nM0gIMZd0VVx1QPnCnNRzRzRsCjurQxR8ShQ0eKxuVQLt4avOi05Phgba3S61zSX8gqMTV/hkJrdiTIQqIAYrrS2ORzHNUugIpN84CHuyD6ZUMcGO8nNp7HjlElciI6b41aajhh5cxbA8+e+XPNu71NeC0nU4sCnPi2CO9I1LJlyx3z4YLiQDppr/BfceKIwIzqThDUgWY1Sf5i3jWYMVmL9kBFD2BNTh2CCaUzyEvu1ETe8ZYuF+8oun00EH5IEVOer7NZhrRoVuGeBi10vGrzPDqz9n+jPcS/XKA8DWEj2nSlx1xfKXkkF+WWq4HwqY5xx7f94LMIH6oao8PF7AsIBpxMn4WZIPIy0PpS/KfAFAE/E6WEpxLXtnwTcYwzbtdLXEKwSFwqHGgpqkY4/rZTLS98gZ2iyt4zRVlUZJK0JbY03hHnPEISSQQcYUPii6Hg9NIFiP8O60pN1TrnecH4ieLukW56facgRIsogWhvOvoBJ3neRQyON/bpJja3bkQXj/yQRfnjUh95/qqCuIziAmEqbIBR7+eH3pyxXUGMBjHi20WgInWWYOSsYxL4b+R73LhrFPMv014241iuvERf1JaOimuEuUT/M8dzwdfX2R21OelqNRPFzRzltonVdduw7F8wIgkAD0U8AS49A5hiQWyKAnY1oed9jGddrFuLNWdWbJozh6vyz4i7eVDNYY4fYZSc1MqOZGWwNFRzu1fE9uz48N8aLmfHEMzFJ5obNPPKgbQ0F5ZravF1aZ/acJdLmKokXjZ3BAk2R9L4CWCXJS8D626f8DMafLogRgarksCoIvwKwjVJHgV69KaSaPuz75V4QxBX9Bjuwg9cqr27dd0giD5w4yqhYeTmpb7TZEwbXEjAqnswtSN3yRgQSItsnfu4VbcKFa6aXTesq8kyNsxN2Ay5aMy/Bvc+DO7AhSdfbkvypBXOItSimR7jNqgfQi1EDrkOfpCDWZnzhR/2vZIIOFOAoCCgy+HEJg5nFM2z+guznFyEYtKSFI3VkEHyEVPMBtGsd9LwM1xQi2Gae4JUGjyKjGWa+PqxXeUXI1GUwPl9gj2ODcL+TG7/wy4ilDVpQ+I6Eq1PL7lUZUWoY6e4NXfxkuPR1qZ6yw7++zntdDu/xIcXR4+7L6DScLxmim1hU8N4IEydIoEEgXvfFzHTTAcsz0YY7qD+KG58CSQTwawJgHdOI7IfrQCI4WSpNpjiATm4D1ToPRe02uaVQ3z5c7rqP2uROs2RAVp3bF9M6XjUzF7B6COPOZDWLNwlvQTjIPdL6E2gi+jyl8yETUs5k09E/xDYh7BN2ok8MTC3pyAXnDbsRyK5UGN9ruIjSFQo3d7DjaSiERgqfZjvtmPEuPxRmcvcBG0MKNUU+htOvmZX","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)(52116014)(376014)(19092799006)(366016)(1800799024)(38350700014);\n\tDIR:OUT; SFP:1101; ","X-MS-Exchange-AntiSpam-MessageData-ChunkCount":"1","X-MS-Exchange-AntiSpam-MessageData-0":"z6M0yfUM+eQvNUReXOZzm2sPcrscYCiRoSU4rRiKgbNvkCBJbRAty9ABkwW6R43dc+PR+DiJ+ATxRUlsaQrSGPb4QYP861h7A9GXpH+60ZiVxOTwcvM4HrsWDACI5rCs3/y/cLFozMDtYRhAx9v8t6oOvLplYLnS4O5yxRG48gzmg8BXXFuSZX1vwCN0wIdE2dzXU9iicrqz3cx91TMeKemEQR49yVrKD1MsIwXP3ZCvWBM8sF8yo7JkfeilsAJTW+1Sr4P2sW2aqB8uRzbgboM0FOeco9aH0I6/VteeIJphl3O/U+9TipC0EnWp2BQhlKrBeT5lqB6lPf7cEhdsja74cEmd9Eq0qDY+6MG/wrLb0MTud+sXnJ82VfkG0kR5iJ6wCCwiuTeo90uJX2SM3pRAoI3IdOL2pTxOyYWmeYv1alDs60sO4M5LkvSPYLjqghUU+vnyG6lLxX1K0IwB4n3AlE/6/yDmM+3fo75XtnVa90Hn5g2P2DHnBS2KE7EBiqducP6XDnXURy0VNL9RzMmXAEzFAheTM/hCgukXzL7EwPNEkN3qx6UyHnLjyr9GURMA512IMUoClLk/XfuChs39Z3fkIHWr2tQ209YBfXwINFhs6tVOG6K32uufEnQRTV3RKe0flciwPKLIHZwtxVbATmVBYyyQmrhOxNIov3cCYgbNxhrdKoeZOUkLVbeOHYH4JBBzx8GSTC9IhMhPP3lGTawfg9Mh8yHPf1MB/uBe4bRESrKzsbseQuJtIV1pK6O1sJosI34dZKjc+rqfGMnSmA7fGGgMJ4J6jziqWEEZ98vWEPZ2Pn94TdGSG3Oe+56PLDaCkH07gGUqIDHgI4FtEqct1YZQHPrsYZH6XuWnsMKituL2vzC4EVfchy8i+MBmOLnZDsqmoq5nQk+RbGz4AYDgyb8rnTrTtvwIs3p4E7Hwy4mAS8AHlpSoYbEAI0Q5KQtzZv9RtxnCxvJxwM3SJn0j5X4LBDa63xv9OcSw65gGF3EKHS9n3wZ1FRhrqlwgafpXt+5DQhVM7W56GgHeedQqi9Cx7lE1ylwRxV1tzTvoJdw8bPfoVavb0TH2JHX2FFhaKi1kpVpFiis+D4h5jveLSV3eTa7HaGK8ABlYUQEKqY8jwGdpQT7TR/r2xgyICmSce/7WW/EztfdgX0WpLsB7Mc7Ot7qx2Dt/zbVnoP+DDBvB+pzw/oiO9lIgto9/LZryQxl6FCq/xW09i8/5P2am9zpI3Jn0RlsMU3Hm+sDzIz1jApDvtv+11EtjHYYwD/QSr23p/xJ5ME59AbqE4zWJokIiRnpG+sxIGY50dLgJrTE3Abu/e49h3hANEcwnsK8aF5VOuQiNOqK/yAndQW4bz1ENpoIOspqUGKsaKPFKdpTfE0StP3NkqCJx2o00gsyj1S4mBv3a2fvAKGYIgRmTEiZBVAKJkwL0fmLjagNNyHe+c0WqTaCW/TQ26Mc1yAn2g19cnIooHxYNOmb9gLP3+H6VXh/Glt7PT6xwlgU+C10pakry8R3chyUefU/ibGh/OVyyP2r0dRrVze6mK/P6eydoAm7UPlYVH1iVJ1DtmTmmNxiNwMkfUFbrKzTqVqL3dsnlDHygC4zG8w==","X-OriginatorOrg":"nxp.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"6a4e3977-6694-47f6-e7b1-08de114e8270","X-MS-Exchange-CrossTenant-AuthSource":"GVXPR04MB9831.eurprd04.prod.outlook.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-OriginalArrivalTime":"22 Oct 2025 09:36:42.9546\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":"ztBBFigpG6+z78V8JGN9snxUH9V6AYB0+hj+E+TOFJwq08jww42mGXiF33mKFwk0wT3lkPGLFOg1BkQvG0LOFg==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"VI2PR04MB10811","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\")\n\nSigned-off-by: Andrei Gansari <andrei.gansari@nxp.com>\nSigned-off-by: Antoine Bouyer <antoine.bouyer@nxp.com>\n---\n src/libcamera/pipeline/imx8-isi/imx8-isi.cpp | 47 +++++++++++++++++---\n 1 file changed, 41 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..b8834540688a 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,9 @@ protected:\n \n \tint queueRequestDevice(Camera *camera, Request *request) override;\n \n+\tbool acquireDevice(Camera *camera) override;\n+\tvoid releaseDevice(Camera *camera) override;\n+\n private:\n \tstatic constexpr Size kPreviewSize = { 1920, 1080 };\n \tstatic constexpr Size kMinISISize = { 1, 1 };\n@@ -143,6 +148,10 @@ private:\n \n \tstd::unique_ptr<V4L2Subdevice> crossbar_;\n \tstd::vector<Pipe> pipes_;\n+\n+\tunsigned int acquireCount_ = 0;\n+\n+\tV4L2Subdevice::Routing routing_ = {};\n };\n \n /* -----------------------------------------------------------------------------\n@@ -950,6 +959,37 @@ 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 \" << acquireCount_;\n+\n+\tif (acquireCount_ > 0) {\n+\t\tacquireCount_++;\n+\t\treturn true;\n+\t}\n+\n+\t/* Enable routing for all available sensors once */\n+\tint ret = crossbar_->setRouting(&routing_, V4L2Subdevice::ActiveFormat);\n+\tif (ret)\n+\t\treturn false;\n+\n+\tacquireCount_++;\n+\treturn true;\n+}\n+\n+void PipelineHandlerISI::releaseDevice(Camera *camera)\n+{\n+\tISICameraData *data = cameraData(camera);\n+\n+\tASSERT(acquireCount_);\n+\tacquireCount_--;\n+\tLOG(ISI, Debug) << \"releaseDevice \" << data->cameraName()\n+\t\t\t<< \" count \" << acquireCount_;\n+}\n+\n bool PipelineHandlerISI::match(DeviceEnumerator *enumerator)\n {\n \tDeviceMatch dm(\"mxc-isi\");\n@@ -1034,7 +1074,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 +1143,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 +1155,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":["v2","1/1"]}