From patchwork Tue Feb 25 02:10:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hui Fang X-Patchwork-Id: 22855 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 DF349BF415 for ; Tue, 25 Feb 2025 02:49:20 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id F346468711; Tue, 25 Feb 2025 03:49:19 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="lV1yflAM"; dkim-atps=neutral Received: from EUR02-AM0-obe.outbound.protection.outlook.com (mail-am0eur02on2060d.outbound.protection.outlook.com [IPv6:2a01:111:f403:2606::60d]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 197E661853 for ; Tue, 25 Feb 2025 03:49:18 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=oDSSsb+9kWSODDKMJehyHUATzSAFAGJtuJcu21DiXOANpjZkai2CO+UhTzREqr047ve2qaEmLQhD5iLVxmj8F7R9BgGXqOFLxiKXSIJ2QHc0NtIRemJfIw4uvIjjoXIWTVLRZqKu63sp0IWS8tTE2buWE0Z8wnqh5abYsyd5dIwwibjg4TqFUh5wAdODKW53doVOI6PnkepBZRCrz6yN9+JP/cpyrRLknJ7erXuElIfXTnL4KJifrzsK8QEeVK/Mtxlkcr1KPBjZxJPFHHoai0HG+xHc0JJTjqQW1sGS4xfMnrfMFMAKnX4qCWq4Pb+vmHLHG+f0szzRaOiZEGQIMQ== 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=keVYfLVbueGiQl9dCyDyMXxzlzJklVSrhK0/vwmnxZA=; b=dRZ7QNhx72g2y/TvzTDPB5EwYp3OoGJwL9cAMGFVn5tfKK9RjQn6j3an4mUo7mV/NQGrnUedyHz6vYnGVG/PdOmEfimOL1K2tmEZP9sbewry5DNOxkneg8lc1sJq4wEWIAuQRq9F7RRiZ/Zh7x8EpN/QDFDJu9CqQKkiRjheCdmwqgBC+iJNM9QdV91NJmvR/XqTV8VgjjHBlNpQJh7fI2HTURdhhjAubnnDtSD1AgA9136nnK6ZODcwPcw2Sp9D3Y76U62DAP049buZBfQYwDAcSJCpD4SbCoRx6KrlBU9h8fXCzH0PNxni5i2W4w3S1QZDZXa2fk/Duc7k31Iggg== 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=keVYfLVbueGiQl9dCyDyMXxzlzJklVSrhK0/vwmnxZA=; b=lV1yflAM9U8CqpEuW35dzxulSknQ/rT2WsvdVjmnbr08xoMLlhW71J2XmeL+ACF8rygUpf5AeRPVbt3ZlXTa1ECunYMm0yaTyTP3blbIViuaWjs2f+EiP9JnDbZMHGU9Qg7m7Nsu9DxKghjmx3D74lliI0iF8O5vOuHWDnqajcmqebCZSKL0Xb6lxUgFQ8DvWdSOuYqPeqmmd3QEsN82D3H57NRfHWrghiDhvOMMlEz/zSoKRatj7Cke1BbiH+XEl3OoOP9N92LinuLTGjR0jChUeBsq78sONCxsDdifj9hKiDTiT38dPTc6aZvRmFO7lk3xA5F0ZZ8p+2ZdxRsPPg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from DB9PR04MB9284.eurprd04.prod.outlook.com (2603:10a6:10:36c::8) by AS8PR04MB7958.eurprd04.prod.outlook.com (2603:10a6:20b:2a5::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.17; Tue, 25 Feb 2025 02:49:16 +0000 Received: from DB9PR04MB9284.eurprd04.prod.outlook.com ([fe80::c5dc:4676:2254:2f4]) by DB9PR04MB9284.eurprd04.prod.outlook.com ([fe80::c5dc:4676:2254:2f4%4]) with mapi id 15.20.8466.016; Tue, 25 Feb 2025 02:49:16 +0000 From: Fang Hui To: libcamera-devel@lists.libcamera.org Cc: jacopo.mondi@ideasonboard.com, mzamazal@redhat.com, dan.scally@ideasonboard.com, hui.fang@nxp.com, antoine.bouyer@nxp.com Subject: [PATCH] libcamera: simple: Check all media devices matched the pipeline Date: Tue, 25 Feb 2025 10:10:23 +0800 Message-Id: <20250225021023.2112783-1-hui.fang@nxp.com> X-Mailer: git-send-email 2.25.1 X-ClientProxiedBy: SGXP274CA0009.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:b8::21) To DB9PR04MB9284.eurprd04.prod.outlook.com (2603:10a6:10:36c::8) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB9PR04MB9284:EE_|AS8PR04MB7958:EE_ X-MS-Office365-Filtering-Correlation-Id: bfc74485-fa90-4c2a-0655-08dd5546fe88 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|52116014|1800799024|366016|38350700014; X-Microsoft-Antispam-Message-Info: BX/wG8haa+yCPg81KydWCssQ/9IWQTrSHlXENsj6uxEAZebA5AhUSI0s9yQQnsGx3iTf68QdhHpuBaFrP0mgdfAqJaWwkkVc+i+PtgR/cvbK+k0urcdby388N6ERGUS3rbnBid/MEvBXSpwk5fslSqloq1u9LMTP+25J6iUBINX4nZu4GZ5d0iK8cKsuBP8auTvsbxbyC3RWwbjwMuG2x06S/9++KSPXQ1dhcDmoShk3aX/h0eoDX2MqP2HI13U8DhLnjzXx6a0LcSU4qxymb9PjK95tUwMCus9aNCsuqbnxnMqasGg56zeIrbV3yeHhG12AtyYYBUvXNlWmJ1UgsqMf17Y4ZdXVzjNLjNWznZpx3d5+h718sF+XECbO3wDTIE8NaB8zzmCoCMbnDkn49mZT6otkDlhEyTX3mrd3Xw4ZRuPtb7v5lXTJ1f+trpKn1DaxtC1WQDMUkRHDyYrwJIqW6ClMh/r+/iWs5Q8lysf8ptW5fLF1PPPoJq+t8HZl4Wg6mv6tC6giSir7kSaklplwnk7qwJ/jWYU6Beh/5a9P7JyQ2GtzfyQOcq4y6aZ9DkASbNLopoJ1TTEr/UwVAIJv4S/At8IJMSzNv4sCSjsPrN6ZNXfX5SPpMHTZQ0Ak8dqgnRTb3b3SLiF5Zfqv7gr5exXFVf2emfZpHmCuG2IPdHUnCNRT0DrorfT38YsCLk7WskxJVJeJu4jf4jaJTNWb9JN5xFLSL4J94U7tCVqxOhdzJ3upRU6UEr4bi1n+D2Knjad6Mn0LUiL9XUWwsXxpALMQ/tcL/HRp9UKWdFvMyS8QNI7JJ0zbMYyyAEJjQ1UEUo+37iLfVlao/dcjNxo57608ImLQ76XtVwyuspfE+3v1vkHXH2gY9XpOa4onw397fvc+ftCyMfyhbv/0Obz2+hPJUfLAvL873ewVDitexbZuaFq4B7cRa+r59n29MpIW2oAR2KrtLnIVaNFFhNOwz+PdVDxw6E2gJB/TKkwsYZf1tWTUT1sfnsVI2sEY/z1nyV8pRLB76tJZQgGwBdmApDUOTuCP/8WtvP2KW/SokhnYoN5FtBEaD0rNFfYoa6P2VahJMQxG+ZnFg19FEATjFm1guDvEjmPl5iTevO00qhjQLnk/4zDpirY2lWbQG6K7KFEHb8YTU905/0trXGcZmJcrxT7S8Pnej6LLJxgssNGfGw6Huw3uvEIJt3ipCiGjhlMgiCvSrz1VtGej41QkV/8SL2BB5nL2juMIWr6Sd3lgxZTJExORMkfZithmeg1pLv15NzB8OKYUaOyvQfOhoB4vz/rLDPyrkMgWaVWJqdqDRQDu5LtQjeDjb9QAgZL5ViS75GXsyEY0ADe2fBlvpbY1rfgwyxq9KxCyCP58LC2z7HcBDz/+urJl+QLszCd2BKg5R60TYa6M0WJsAmhEdQS06vNJe56ECfkqblm6XcVHCCZnHcIsFLC6O9GP X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DB9PR04MB9284.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(52116014)(1800799024)(366016)(38350700014); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: lkybwso2ZDBlseVUtyOARzGkf6ty8CFD5KzLem+UkTH/9EIsvwmcf6+SSGzATmkyzPWTmXdLFITgdqbxC5KDXmgRkQtrLwrFJH7R8LOfpm7AkYoQLiChpSFiBLde3KhzrL8GdTfd8i+LiUWFrnhBgJ9C29pHHNg0Df5ggWWDLa5cOKk3EmwyyqcZunbZmQOHWC2QlqQzKtBZ7tt44UfO+IVo3Xu1+fw2DRY7qB/yiqvd6JIMqJDN5KzlRyh1dPmLn74Fh4/TMfExAnXodwthNsjKJIBV+PPetduzHL7t0T/fDzlBUqBIHT//Lv/b3lfeOsfZQmDY+oaIZfYtTC6t6DC9IX4J3VuL/dCP2DpmKWjNa9DF8f9u3KSaOksLDAaXHKGLTPOFUrgMt6sGc9oNE37EFrT0to46jil49VtzcQ0GghTZH5SiHDhfqA453WBIq64NadxPZFV1gFH2MA8lvfj02E5NAwz6YTrLR8Ls7h0KuE3aSqPoSl5N7wP3WqnNXj9YufGd88YV+YH80IFdow3zR4bMDVEU+K2shI067cZq8aMI4xm1OkL6uWSK4/5IAeZz0q3/20Xg7eO1QNwMRLbpLZPovXTMIWY8lfFzhcHRzo8hHCi91aAStxdseui0i6TtYpTDqGCO95KbBuO2llY3CQkdsfZcMq1XDdfvCyomCyc/6ZgbQJb8GpFW6rFSqk6MEsrdvxdYXez5v8zxdlTANGWw0ayhydkaltQkzaOSz267O4qglOVsQUBfJgsGxY+7kSqhlj0AvUMTdPwevkaxzFeXCE0fixq5CPN/T2hgr5uxJw0qawlPLwdf67zr+8FgwFcdNwIh3roWnUsQ+vcLo0Bkt0lybR6FRcy8yiXQHVxcjylj4+rbca+gusiYnPdiESXoVAulbWaTa5ZS7SDLPv2+TztpOwvVK9rp8jIqte3C5U7m8302vF3LnBtQGM3wLOLP/n/SRLsZCap//ZSe+bpFz1aAbEL5z+tDB8mouRQ0WaXUSFQLNJ2MMjBgEb7AQNFS4fMIC15Uu5dR2dYM4RfakoXSJRDlq+LNNl7nH8rCZ0U/3N4Ei6eXmAyDYhGHx8GKbqRVy3qjdG1503YFDd2L5D/SqqrWEc2YuQVMA3ukk8K345LLk2kvx2++jAmtSTimy3aVqiNyQ1xIOWeYt70r2SgJmO7RjWj4W6KmjJ8t9P8pU7q2pzitt7IO/Oj6qPirfjW0YdeE/KSMGqSflXsVeqt+gUYise5homy5epMGfZxm8Cu7lpvEEtOjtt4vjj/nzrIfaFPoxq0dMwghBTdGuwbSuo1EcMXeZjC0kR+NLszlg5ph49BqcoLK58Oa9bSfJEK2xEptIpHL5y6LxtkBW3Jb8B0S3VoeGAxEyo7tPQj6Ez0ZmuF+vr5I9l1qmhavZzkOg4xGxr9I5rlkGVpx+Fm7zn9oevntjO9Yciv22xaOupgwfMigVCU0tZAebVgZ2zKJtZUCKJB+db5lHx75Eyegcfr6uEOrABbBfiO6BPqguE4++yCvvklg00pQylLIQnVSoRT3nIZBQLjtAnPySbA7C1ldv80m6Hjlsj5i7oyAT5s5aDeHZ+hk X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: bfc74485-fa90-4c2a-0655-08dd5546fe88 X-MS-Exchange-CrossTenant-AuthSource: DB9PR04MB9284.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2025 02:49:16.4594 (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: G3JaXiO+W8fAYH16557KwfEa1DxzIX/cmATVinnSOfeUGT+oZ8+jg28UzEkCaIneBv1hUtDgDVcXwhSVZyDw9A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB7958 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" The current implementation of SimplePipelineHandler::match() will return false once meet an un-complete media device such as no sensor plugged. Thus the rest media devices will lost the chance to be discovered. To discover all the cameras present, this change instanciates the cameras discovery procedure for each media device that contains a supported camera port. Signed-off-by: Fang Hui --- src/libcamera/pipeline/simple/simple.cpp | 50 +++++++++++++++++------- 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp index 6e039bf3..134f0a07 100644 --- a/src/libcamera/pipeline/simple/simple.cpp +++ b/src/libcamera/pipeline/simple/simple.cpp @@ -379,6 +379,8 @@ private: const MediaPad *acquirePipeline(SimpleCameraData *data); void releasePipeline(SimpleCameraData *data); + bool matchMedia(DeviceEnumerator *enumerator, const SimplePipelineInfo *info, MediaDevice *media); + std::map entities_; MediaDevice *converter_; @@ -1532,23 +1534,9 @@ int SimplePipelineHandler::resetRoutingTable(V4L2Subdevice *subdev) return 0; } -bool SimplePipelineHandler::match(DeviceEnumerator *enumerator) +bool SimplePipelineHandler::matchMedia(DeviceEnumerator *enumerator, const SimplePipelineInfo *info, MediaDevice *media) { - const SimplePipelineInfo *info = nullptr; unsigned int numStreams = 1; - MediaDevice *media; - - for (const SimplePipelineInfo &inf : supportedDevices) { - DeviceMatch dm(inf.driver); - media = acquireMediaDevice(enumerator, dm); - if (media) { - info = &inf; - break; - } - } - - if (!media) - return false; for (const auto &[name, streams] : info->converters) { DeviceMatch converterMatch(name); @@ -1678,6 +1666,38 @@ bool SimplePipelineHandler::match(DeviceEnumerator *enumerator) return registered; } +bool SimplePipelineHandler::match(DeviceEnumerator *enumerator) +{ + MediaDevice *media; + std::map mediaDevices; + + for (const SimplePipelineInfo &inf : supportedDevices) { + LOG(SimplePipeline, Debug) << "check simple pipeline " << inf.driver; + DeviceMatch dm(inf.driver); + + do { + media = acquireMediaDevice(enumerator, dm); + if (media) { + mediaDevices[media] = &inf; + LOG(SimplePipeline, Debug) << "found media " << media->deviceNode(); + } + } while (media); + } + + bool matched = false; + + for (auto it = mediaDevices.begin(); it != mediaDevices.end(); it++) { + MediaDevice *media = it->first; + const SimplePipelineInfo *info = it->second; + LOG(SimplePipeline, Debug) + << "call matchMedia for pipeline " + << info->driver << ", media " << media->deviceNode(); + matched |= matchMedia(enumerator, info, media); + } + + return matched; +} + V4L2VideoDevice *SimplePipelineHandler::video(const MediaEntity *entity) { auto iter = entities_.find(entity);