From patchwork Wed Oct 22 09:38:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Antoine Bouyer X-Patchwork-Id: 24720 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 86797C32CE for ; Wed, 22 Oct 2025 09:36:47 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 13617607A5; Wed, 22 Oct 2025 11:36:47 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="LsRVuTK6"; dkim-atps=neutral Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazlp170120005.outbound.protection.outlook.com [IPv6:2a01:111:f403:c200::5]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 949CF60774 for ; Wed, 22 Oct 2025 11:36:44 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=PjjQ8WFvrZfyTFf8n4bWFBE6F5zo5P1mASENfZrYdkPeY+smZhyJMvQBVzz/rfWEExBPPVnFc3LtUh7jHZbMiDlJlWeV18AF94O0eGEL493gdwJFHsmpjRrAj+uXI5nnpNVHAh7uwYmKl1VHzF8NGniHmk8PWtcggAK8Ij1xQ7q3j67YBqzLkfn08mHFszBa+XaufpaELqhHsdveeEiHRv4pIhwOCcN2QMgn3QkvATH1lpmsXokQkgBdwXJsySfkTXZS6RvU1IuZPDz8qW15hS9TUwcA0gfqHHw+n7CNsgFFAAYoJxAdsfsHqHNaSUqtjaVpQFkVlOE/qpBTesI7zA== 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=a8Eu81QCwC+r9naUP+I32hGlDlZbN7rampzqMAPUuL0=; b=W6kOoExxyUn1Wn2NahaUGlqQb7Re57VQ9o51TYyXMZN1XdZh1O9ib74obvBrmRzLiCR1xvK4S/BAGD1P2nyG6w5QQNQ1JrQbhzWQ/t9C48vo01y15DoB44uSDW8gqVfFzCiVsmiV1urniyzrKrd/4+OMhp9W1JkMhxNccimKUt+bq7C5tj2J/lzmsZD/t7eQl6xSyYHxTzavIqTfkCQuqTyKXaxwoqyaKkR1Y8POfrlh3ynw1oJEvVUjqZFImkd6hU8/m+npUnHzQgCJJMzDJVOXrzi3BgH8+OS+IYQ24bEKbyD60kwun4eIBYQbRb13iIDkWwUJF2fmmj9lpKObhw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=a8Eu81QCwC+r9naUP+I32hGlDlZbN7rampzqMAPUuL0=; b=LsRVuTK68ZhiS7dNoJ37taEcgcWFGnDQP/RKNFWmavMGpYIWSaRdD1j4Hm4rbKUr+Eyjrp/Y7ATxFAbxlV/HC2T+kbFojIi7GZ96aZjDzgf0oChPxGYaYaLYwb5IkZ/LqVe2US+i0PxEhOzsuJEj4kdQ0gSWXxyd5MCAGUjLgbe59cIFKp9Ynvgx4M7N4jozTiV29HS1S/uSD+9HCxNI3aWyqc61U5rSOlO+wcMBLuH/RXeMP43/GjyC63+KN2pKv6NOCldiC0LXA0p6qf1xPaCle8WMQgw64EUB7HmcNfTngQxdRK4qs/uLxNcPXLEd5NIBC2UVuEMthfojvWaJ7g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from GVXPR04MB9831.eurprd04.prod.outlook.com (2603:10a6:150:11c::8) by VI2PR04MB10811.eurprd04.prod.outlook.com (2603:10a6:800:277::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9228.17; Wed, 22 Oct 2025 09:36:43 +0000 Received: from GVXPR04MB9831.eurprd04.prod.outlook.com ([fe80::4634:3d9c:c4a:641a]) by GVXPR04MB9831.eurprd04.prod.outlook.com ([fe80::4634:3d9c:c4a:641a%6]) with mapi id 15.20.9228.016; Wed, 22 Oct 2025 09:36:43 +0000 From: Antoine Bouyer To: libcamera-devel@lists.libcamera.org Cc: julien.vuillaumier@nxp.com, Andrei Gansari , Antoine Bouyer Subject: [PATCH v2 1/1] pipeline: imx8-isi: Delay ISI routes config to acquire() 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> X-ClientProxiedBy: PH8P220CA0001.NAMP220.PROD.OUTLOOK.COM (2603:10b6:510:345::9) To GVXPR04MB9831.eurprd04.prod.outlook.com (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; ARA: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:; IPV:NLI; SFV:NSPM; H:GVXPR04MB9831.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(52116014)(376014)(19092799006)(366016)(1800799024)(38350700014); DIR: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 (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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" From: Andrei Gansari Fixes behavior when calling 'cam -l' during a live stream from a camera in another process. Issue is that multiple process should be able to list (match procedure) the camera supported. But only the unique process that lock the media devices in order to be able to configure then start the pipeline should setup the routes, graphs etc. Thus, the setRouting() is to be moved to a PipelineHandlerISI::acquireDevice() implementation to override the default Pipeline::acquireDevice() function. Fixes: 92df79112fb2 ("pipeline: imx8-isi: Add multicamera support") Signed-off-by: Andrei Gansari Signed-off-by: Antoine Bouyer Reviewed-by: Kieran Bingham --- src/libcamera/pipeline/imx8-isi/imx8-isi.cpp | 47 +++++++++++++++++--- 1 file changed, 41 insertions(+), 6 deletions(-) diff --git a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp index de09431cb9b9..b8834540688a 100644 --- a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp +++ b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp @@ -71,6 +71,8 @@ public: unsigned int xbarSink_ = 0; unsigned int xbarSourceOffset_ = 0; + + const std::string &cameraName() const { return sensor_->entity()->name(); } }; class ISICameraConfiguration : public CameraConfiguration @@ -117,6 +119,9 @@ protected: int queueRequestDevice(Camera *camera, Request *request) override; + bool acquireDevice(Camera *camera) override; + void releaseDevice(Camera *camera) override; + private: static constexpr Size kPreviewSize = { 1920, 1080 }; static constexpr Size kMinISISize = { 1, 1 }; @@ -143,6 +148,10 @@ private: std::unique_ptr crossbar_; std::vector pipes_; + + unsigned int acquireCount_ = 0; + + V4L2Subdevice::Routing routing_ = {}; }; /* ----------------------------------------------------------------------------- @@ -950,6 +959,37 @@ int PipelineHandlerISI::queueRequestDevice(Camera *camera, Request *request) return 0; } +bool PipelineHandlerISI::acquireDevice(Camera *camera) +{ + ISICameraData *data = cameraData(camera); + + LOG(ISI, Debug) << "acquireDevice " << data->cameraName() + << " count " << acquireCount_; + + if (acquireCount_ > 0) { + acquireCount_++; + return true; + } + + /* Enable routing for all available sensors once */ + int ret = crossbar_->setRouting(&routing_, V4L2Subdevice::ActiveFormat); + if (ret) + return false; + + acquireCount_++; + return true; +} + +void PipelineHandlerISI::releaseDevice(Camera *camera) +{ + ISICameraData *data = cameraData(camera); + + ASSERT(acquireCount_); + acquireCount_--; + LOG(ISI, Debug) << "releaseDevice " << data->cameraName() + << " count " << acquireCount_; +} + bool PipelineHandlerISI::match(DeviceEnumerator *enumerator) { DeviceMatch dm("mxc-isi"); @@ -1034,7 +1074,6 @@ bool PipelineHandlerISI::match(DeviceEnumerator *enumerator) unsigned int numSinks = 0; const unsigned int xbarFirstSource = crossbar_->entity()->pads().size() - pipes_.size(); const unsigned int maxStreams = pipes_.size() / cameraCount; - V4L2Subdevice::Routing routing = {}; for (MediaPad *pad : crossbar_->entity()->pads()) { unsigned int sink = numSinks; @@ -1104,7 +1143,7 @@ bool PipelineHandlerISI::match(DeviceEnumerator *enumerator) /* Add routes to the crossbar switch routing table. */ for (unsigned i = 0; i < data->streams_.size(); i++) { unsigned int sourcePad = xbarFirstSource + data->xbarSourceOffset_ + i; - routing.emplace_back(V4L2Subdevice::Stream{ data->xbarSink_, 0 }, + routing_.emplace_back(V4L2Subdevice::Stream{ data->xbarSink_, 0 }, V4L2Subdevice::Stream{ sourcePad, 0 }, V4L2_SUBDEV_ROUTE_FL_ACTIVE); } @@ -1116,10 +1155,6 @@ bool PipelineHandlerISI::match(DeviceEnumerator *enumerator) numCameras++; } - ret = crossbar_->setRouting(&routing, V4L2Subdevice::ActiveFormat); - if (ret) - return false; - return numCameras > 0; }