From patchwork Fri Mar 8 11:00:55 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Vuillaumier X-Patchwork-Id: 19645 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 40C89C0F2A for ; Fri, 8 Mar 2024 11:01:36 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id F089F62868; Fri, 8 Mar 2024 12:01:35 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="s+WDjzKi"; dkim-atps=neutral Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04on20601.outbound.protection.outlook.com [IPv6:2a01:111:f403:2611::601]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 1967962865 for ; Fri, 8 Mar 2024 12:01:34 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iysxjAzpRfvierKj7K2FSOx9BMEoBU+rxv8exC+8x6DitDG7DOKs2Hwcm3Qe+ZMlSUjADNv/YFDWBKVHMmws+KUe9ZYMVnD8/9usC+ARkyvfUlSGl9el5170GNiMFr3SlH+k3VuROt1+vOr0k1xJTUj3N8S/FIRJc0sBYp5Ph5262Pow1e0PLNjlmdu0gnErSdSvtGziB3+dS8r826JzXXX+WHYv1q2xbOZnXTX2yksszyn+JVgfegLTbV7bPTaIybcyY+2ILZZDHlX6yBfWmZ+0IcZucfViaGOGWcX2N3ddzu/RORU05lLnGHF6/QBXsYNuwBS0MOdbmdFK23Bm2A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=oIBWPO6arj+T8p5nIBpZ2qgXj2TxWoxhm6rFKlhqXkE=; b=lsOvAKvnR0cWnJ8VppU9ZCfPJcfezkHROehjH8YBcMiChV3XP37Cf7wfXC0OpXaT92QOMkSCRv783W/Up716t5ABlbanSXLotfCW0EfEv5ASjd8PN5xSFCfs7GKWpVfvzPjoNMOr98epYSSWz7aFH0v6qfkDOu6M8c2WsH7VJAfaluoHdBK0D5FmKnrsL/FIgx+2b8IUtn6ukrFFlS56qqtmFyTsxudQHoTQST4OXscWDLO6scSeBl/bPQGFGbj1sjk4EJ6Gk51wQz1JP0xp6J7ni6fs8v9Sg44NAl6ois85VtJWCuabjvv/kaIeZM2/zOJUIppEB+2RwLlpslUxjQ== 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=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=oIBWPO6arj+T8p5nIBpZ2qgXj2TxWoxhm6rFKlhqXkE=; b=s+WDjzKif5v+9HC+r+A+Zj2X/Uw/mGUzfAAZmV48vbSekDkEobs0ZLk+44w0U5hvZXNRrmuKS7Z4aCxvfN0Wn4uvpjIm1in1PMnNDA5agwHd7nnXbZzokk2BDKVPtVdGp9Bz0tmCLnym07QlwM369bzHqvQpheetBsI/5FlNS8U= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM9PR04MB8147.eurprd04.prod.outlook.com (2603:10a6:20b:3e0::22) by AM9PR04MB8683.eurprd04.prod.outlook.com (2603:10a6:20b:43e::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7339.38; Fri, 8 Mar 2024 11:01:33 +0000 Received: from AM9PR04MB8147.eurprd04.prod.outlook.com ([fe80::3fdf:4cf8:d542:1b49]) by AM9PR04MB8147.eurprd04.prod.outlook.com ([fe80::3fdf:4cf8:d542:1b49%4]) with mapi id 15.20.7362.028; Fri, 8 Mar 2024 11:01:32 +0000 From: Julien Vuillaumier To: libcamera-devel@lists.libcamera.org Subject: [PATCH v2 1/2] libcamera: pipeline: Add a get factory by name helper Date: Fri, 8 Mar 2024 12:00:55 +0100 Message-Id: <20240308110056.453320-2-julien.vuillaumier@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240308110056.453320-1-julien.vuillaumier@nxp.com> References: <20240308110056.453320-1-julien.vuillaumier@nxp.com> X-ClientProxiedBy: AM0PR04CA0052.eurprd04.prod.outlook.com (2603:10a6:208:1::29) To AM9PR04MB8147.eurprd04.prod.outlook.com (2603:10a6:20b:3e0::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM9PR04MB8147:EE_|AM9PR04MB8683:EE_ X-MS-Office365-Filtering-Correlation-Id: 27eed198-e5bc-402d-4318-08dc3f5f1d62 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: UAX68hCSWdywx+1sNtkests21gws6DngFst4TgSkMH8J4GB1d7rgJbSbQQUOIJa7ILRPPj9KZmQfveRkgCb7VGEWdua2pU4wfFSsU+Oz/ueZxDTge7qvXi8zNVTo7wM8Um14P9EnoQohqIOyhhYznEv9icIwW3gNRARtIvBi2ZdtkZrweaPRP9XKFGmOEibKcdP2kEORtviUySw3ukw2NajgqIk5OwoZr2RuCvL0bK/KBEFrtSN2je/xCLR+ktBYBZwG3N6Kon26vJyBPP3+/hX8o0hnYDcbbl9C5Ytukv8bEVn+/X+HFaXv5S5aMBhn9d/6l6U2Dr5rrd/zRZcVdD7BtJkTkEr42U6RhE+/ewNaF43Wfd369gsaFpqH+aw5QoGaBEzUIPrgri1SDWS0XHIiZD6vhI18BW6sZG2BXEmBjgvR2SX1+wTIjsbDWFR2t/+YFXZzJzzEwRjPwuTGIHAkED4bFdPnbXBVrjJyZXbFiivyxktx/IGxIZ/B4D4L72Ea57NUsYuXW92Q3PvHnrFuufCpsF+p+8IrrHQ2ZVlR+mUvLdMGqjaSZlK+dty0nKT15GxGHNcbu91kZC3etCPMMzAdrKv8aDAlfUiEshZkbyoai+jPVy/Ga0Ic+8vaPPdqPw+saP+DrkvRHSl9QiECoYzjUUVHU7U0qYjblXotY4uWA+49QYjAXedUiVoETF9UhhQ80B2fUereWOkSnXz8xwz28wvvF9kyTPPhu3Y= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM9PR04MB8147.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(376005)(52116005)(1800799015)(38350700005); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: JH4oYW9tCDP8BoJBL2Dzshs5gUKpW14oyAHk8d0USaJpn2lQF6k0BqVrMkvZuwWRCBF7NxI146li6+ygQO4qDypEFbNbdm4O8tfZfnRd1t1+/yYmTEx7lZy+iVDjbA42bDvY/YSrikpI5tN0K4TkXPGU/rMVM2UQdWnriMCcu1mw0K6V8X0KrlPcILBHhhCIDzPsNXyhoZT6aH0gl41TkaiW0KSxK9AzKKpk1msQxN0pyjgr0nj5OyQpi4y5PCC7mnOnyIm2ipBPOS7rI5lhoRIMNkhIuDGIKPuFVGIwhiYE/qm7CXAYgAOSe+4F/5S/oyx8JF+m69O/VBirtyUAq8D+wkAs0DbpARCZV49SkR7cycJzr5x8jIHUIQ3GptCFF98TZK9ihmCaZlr5j1d9wWqzlAgF7CjRW2+EodBLCpbLMuZx4+gW2KJDRtVw7WqeMYB6tbqhKwwUozr5VOB5t6AFrCIU5paA/c17C5d8IiENLusEgIp+p2f+8NobwdCfa4eqxymWGnvc2qTT1vx3MO9v1qA5IsRD8qP+Sdc0ghnzQiqmuF0NOgBi8XJL0b02VbKf8AD3new8F2ySB3lXXsJcqhsPenySLTdJpFDlju0HfteIKls5HD5zC6sP7EZ1GMJrpcuF/7AfQioY3E3zy4+CIZV0+cME59haz2GV4mVopOxglCwWa/caXRccMmbWZNUe1CMIcze0PBPxN0hDsJjue6/6hlqMdsThhK0Lzx11dpNOolWsngbt7xQeYLgX9ZvN0Ps4KC+e9FF+Cn5Nqo2JT9T2fj+3rkb9/LXjgekB46QvIP2IgFsiNL8kvHDTdL/91MIauUjgRh4JbZpxbg2BCgp0iodryhcP+n+TmapqPb4T0qHioid1jQ0Oy+MZ0ZHE6V/wNLM7zEWiCHEeXptyhny2SqSyrCQHxUgdbsUuoT+pTfvA/iVyZ7ABcboQx96vtR6jL9gMzZr0RiVuM/rwpjliScwa67y4o4rAe8yL/ZG7c/7Au0g6hc7USjkDI9OVO0PZCGy6lymxPEP63DgxO8VUiQ5vvBw7fPU7JSpjfJMUX6zxHHnVofNlA5zu85tVsM49Naa3bupC8c5uRanYOwEnBsb+k/K60lRwrIwOrHtyQGUNPFtrbDgdxFZm42RxnyAyypNBZMpEPSrtWZjcqs0J4ZFxdTcYoIOQQr4omQyi9wP+awLHFqdIHXZ0HyFwI3jDDMpilVYGHqbbKVEvy6gpZkTgMFFNytP+1Z7CCdzbzJahyPbxIfO1K/BT72O3Suze/5QLT9ksFh6VH+xVCcaZEpEck73t7Ss5/OVH1ZxvtkdaP0VVczqGTpoC2f2rz8bLTYMdxGPEvsT2VK/dNF+5QitCvKyZsiraEhiCjiD9m2FY3eMwKJckzWqZCvHuJsgvEGA0tMSbpuSAd2Esm48qXIQjUbcsxErEh18zV5hTca311OryZpUHkc96VooRbvIpbsnRBFaD8duGAsvoNmGzXja7bgvVdzo3HrOzwD5YGkKF9J++bneqrxDPQPzVhbnKv9HG2gO7EY+Vc2p3woRiS5QDaiiXWpXVQNHR9A4PQD4LSxdVoXbtbUKLB6V80FTdTxBE4n3gCrb3Pw== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 27eed198-e5bc-402d-4318-08dc3f5f1d62 X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8147.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Mar 2024 11:01:32.8376 (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: ZWgmTnafkdC580jMvbs7obO/BcGPOQtppY70FWoaZiAzHYGP5z2qoGNXaQc6f3kMZcfqtU20bC5BgvM0F1ZipoMbDIYLywC+NZug3I58d6c= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8683 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" Signed-off-by: Julien Vuillaumier Reviewed-by: Jacopo Mondi --- include/libcamera/internal/pipeline_handler.h | 1 + src/libcamera/pipeline_handler.cpp | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/include/libcamera/internal/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h index c96944f4..19361a40 100644 --- a/include/libcamera/internal/pipeline_handler.h +++ b/include/libcamera/internal/pipeline_handler.h @@ -114,6 +114,7 @@ public: const std::string &name() const { return name_; } static std::vector &factories(); + static const PipelineHandlerFactoryBase *getFactoryByName(const std::string &name); private: static void registerType(PipelineHandlerFactoryBase *factory); diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp index 29e0c98a..a821ab84 100644 --- a/src/libcamera/pipeline_handler.cpp +++ b/src/libcamera/pipeline_handler.cpp @@ -794,6 +794,28 @@ std::vector &PipelineHandlerFactoryBase::factories return factories; } +/** + * \brief Return the factory for the pipeline handler with name \a name + * \param[in] name The pipeline handler name + * \return The factory of the pipeline with name \a name, or nullptr if not found + */ +const PipelineHandlerFactoryBase *PipelineHandlerFactoryBase::getFactoryByName(const std::string &name) +{ + const std::vector &factories = + PipelineHandlerFactoryBase::factories(); + + auto iter = std::find_if(factories.begin(), + factories.end(), + [&name](const PipelineHandlerFactoryBase *f) { + return f->name() == name; + }); + + if (iter != factories.end()) + return *iter; + else + return nullptr; +} + /** * \class PipelineHandlerFactory * \brief Registration of PipelineHandler classes and creation of instances From patchwork Fri Mar 8 11:00:56 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julien Vuillaumier X-Patchwork-Id: 19646 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 B2102C0F2A for ; Fri, 8 Mar 2024 11:01:39 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 7567C62875; Fri, 8 Mar 2024 12:01:39 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="cvpY9zxx"; dkim-atps=neutral Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04on20601.outbound.protection.outlook.com [IPv6:2a01:111:f403:2611::601]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 91ED562865 for ; Fri, 8 Mar 2024 12:01:37 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=M6dcF0gil9D1qBg3dKGtLE+gWfWDImRve7r/MbtWcCS/H8x6dqj4Z66DB39juoA26QtdjFDD1juHF6Sezb9fkCrOoSROSsLj3eWQuOMOh0dIl6GG6MEjnGlbwgi6ZDJ5gnhkTzT9XAZWtGzxczpqiFFpOr20PFvwlum+pppNX7BuCgnv1Op6hopTl1KNRVeyYBtrGp1ywlN4Qi5V9mol9VCV87p5ZAV9nWcCr/3l22UgNZVdG25h/WHVtKl3zfCoIxxI2RWD6k0l+7SA/3Ruy47IErK+qgYpm6BddgWdssgl9UNTYQRxL84ximjxLHCD30noCsHcCtjdIEl9Iu6EvA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=CqbfDMgXnG42hbsPTvU39oLRCo07hgHGY5JvaRvUef4=; b=YADLzYmr09k2SYVPLLOsumaTuHLiT6mZUpyzZLX83sZ/4TlHpuWHZt/hJxEYxNlIgpKvqKpF9zfFMM1XyHNKZHYvAFX/rA9fE/7Lnbmiegegf7pM+CSXWHUg6SDYmCXcYalvX5AioXUMAB6b46NHxQlhXxi2bfjz1Z2G/bPDCELiDLwbwrJttRYcuchboSOJUZYDqwzCw9EQhPSuv5fDfdGr17BmcHtecvnmVMTPx7toCn2DfGnT4uYqmL9OSL0DGXCAhtjgbM13/dDzdKO1xquLecXgPmY8jjHZpBkDBlHWhzfQkdFWKzEfTQNbl54iiOkWY0SHNNhjk9szaPaLSA== 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=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CqbfDMgXnG42hbsPTvU39oLRCo07hgHGY5JvaRvUef4=; b=cvpY9zxxDFUBE35fhnCTUf4bDhyle83Mnu5pL7Jn2mcUKUl2NL4nxwmieiurp9SrukMBZOFeG5MCcbzb3QKSpOqsmT0qbHUoZ61o6k4aJkkW61vItS8vrS+C6kVfWowY/fRQ55jXHNknbdA8mhMwGXoRaCI5lAX6X9vmVdwxwmI= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM9PR04MB8147.eurprd04.prod.outlook.com (2603:10a6:20b:3e0::22) by AM9PR04MB8683.eurprd04.prod.outlook.com (2603:10a6:20b:43e::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7339.38; Fri, 8 Mar 2024 11:01:36 +0000 Received: from AM9PR04MB8147.eurprd04.prod.outlook.com ([fe80::3fdf:4cf8:d542:1b49]) by AM9PR04MB8147.eurprd04.prod.outlook.com ([fe80::3fdf:4cf8:d542:1b49%4]) with mapi id 15.20.7362.028; Fri, 8 Mar 2024 11:01:36 +0000 From: Julien Vuillaumier To: libcamera-devel@lists.libcamera.org Subject: [PATCH v2 2/2] libcamera: camera_manager: Add environment variable to order pipelines match Date: Fri, 8 Mar 2024 12:00:56 +0100 Message-Id: <20240308110056.453320-3-julien.vuillaumier@nxp.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240308110056.453320-1-julien.vuillaumier@nxp.com> References: <20240308110056.453320-1-julien.vuillaumier@nxp.com> X-ClientProxiedBy: AM0PR04CA0052.eurprd04.prod.outlook.com (2603:10a6:208:1::29) To AM9PR04MB8147.eurprd04.prod.outlook.com (2603:10a6:20b:3e0::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM9PR04MB8147:EE_|AM9PR04MB8683:EE_ X-MS-Office365-Filtering-Correlation-Id: 7e988057-3e17-4ec0-ee5e-08dc3f5f1f82 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: rPu54LixYkyrquPxrkqkA8MnvQHruN43X+FzBnEB/qM+EssJAiO0xeFcbOrlsVlRcekgtUoXsAfJ127hHINOcB8aqkyygXuutOuVbIEZfYqIfccsD/LVplTlPgAV+QloMInc1G+mgS1vaxHigx4uwBDFzAsdUW/Amcsp8DDjkL+PTmI89pcmB27VhLqKuwZ/iWvzcNZ3BCcQDlMpp23RXCqQT81S01IR+E9aOeP1j7q3H9DjZrGiSTnHrh+KeMhrx0P150wag8RN0sFHVsiO4yf4jGUVXEv1RJhuN281M8Icxsb+6O+v1JSQS/oaDJyYOekMtraN6DMSHOQXmzq/g61dWohpS5YuxqpHNM3V3Qr9oy4a6OSgthOvzRqGbWSSnWq+kJYnB7yaVQYhgtReF5HUro5II9OwUp6FSO3l1A0T6JIliTFTTJuibSzukNNmyF0h5uVghOQvT57wwrm0kFkeCCGhYkPMwuMpgd267vm+cXmFCbtq7RaZTHlp5bZadK6GNjpAkCS7mz7YP4TmcAFjo9uUbrp7fKJSMBcAaey/1ZTeEPAFUhTNXj/bW7z/g0ykVjpyeXfCoY+i6PPTrCOnIcmFwI3kRyxFytqu0SHEDacCKzKIXpoKRa4z0AI4gR/sOE+yUNWE+ILZx3eVKpvncni1zjCAXg/6fKgZJuFcBUbouH/TVdyY6R2XV2+fp5tjDL/hxpaOaWyiGRvErg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM9PR04MB8147.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(376005)(52116005)(1800799015)(38350700005); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Q8jFnLkTOZQwMYppqMpO977PoAYKdITAIZEZ4qBRtW6NI78wU5+ityvKrm/+YhwcKPSegaTnNmKpI6mmpMDEIDySv6Ao2Z+IT4CMiYXwgtXTh96AYGayV+g137GRyGET8KaEENiAfdRKNwFyv8giGGXKa/4PlXyWLIw+RMHcDnaCzdfejeOvUVuyvnN9chKZ8RYAFLjqsxzJz8jFlvcTZ8PTMbV3O6DKlRiHtODbxxqoItvznie8xhrBrRHUbayVk19y76bRtkJc82AMI/c/u6TE6kcNtRFUPFFvzRJm7wd96KlG+i8OOnlE2fBjVzIBdb8ZHUwCCThNA8yzbcNSUpuwwOA7auNANvy77MwzGonNAzsktA3Rb+sRmLxKCq/+9rxrEpCSn09NdSRsDr+cQEv1AoSjmqYyW+wiaxpMShRrK9AEw9b8VXHsqsTPvkjPTXvorf7Zbnl21/EOd1gX2iabrX11QHBKQLD/7J5l6GAZxGiM4UZ1vpthUlRkMSm4XWQ4ayiC+xutBHuUYuf5teqDW1XYXLWdONuzT22ZxqyTQ6mokZ5JtN0S+ZrzRptaaEXLfVa3wmDys48iEKw9eSowZSxLWIMkD4bvfUh9CV2Z3cqSyGeTLn5/4C1bLk6uaEGBl86Dr7BqrFHKjMJSfWs8QF9o0iwXTkHMccHRk24K3y+0+22i/GjHe81wwdw9iQ91mkYyyuyY7EZcaDgda5Qy5UUb7dQvG4XUH9kCGXYdmGas1T/Ps/3xbAA04ZiejwiY9w+GYbCcD+XJr0U2WaSkH1WbUVGwA6YPXnrOx/aRungtKCgWS39IGeQ9ewKb4wDJhDnDFv2jOAEvazPQqk0wTCI6tFmU7QEfwQoeiBO5rqs9EQzCrMhxUFQKrCUNQ9Fh5xsRhZp6l71sqk6qQjn+tm2tyEgGB5T4Q/79nOJoRx/AovcIRXfXWVmiuhcXEwSfWxdUs1avqcEPuFcM0zmYsZq2+XjRWxrbQ5dwTwBbm6Yklw9yx/I4dObetYgaSj20TJPp9+Reb0DeL8zUTUBbp5ExN5KlUWzJDm6RtNpGjJOYxrmnwgc0Dmc5Tj3v1xGiFLH/VQzWqeMN2tugvhTT124z41lKV7zBsdUDOIx2uZvAKSZoigVHjFJW0nkS78vIwNb7d1JO4mbnGNRDlzP23E/1hmOQRzvlxgQcGGqzyz0pX2ppgzAgEeAZKLisfTtHdF47PjyVLWlUubcQWl0mDQ3MZDbU18ALineaP5dMtg+XebIAOg3f1dL4RF5WVvh3Vu6bjunC1qA6gFZiQTEjWmNq91aLi2bQD4KuPxoehVzmfI8G35vtecYDeJ43kGNSQU1Fh+2mb1YxFz5FS2fwXcZdGK9g9CnZ14ZFyhmwRsBBIt/gd8vLodu7h1J9HPgmBWSimorLqzIasB2BqPqkhMI7YfH7R/zv/RRpggp+F6uwJ2plUTWGAxPP2FEGrcSoErAZBW7THNvJtON/ddL/lyQ5XRMeUyX9+kOVMbSnlFG5HOgexLdTsnpBuBF9wik0IrclgUZiJ6aQgY4JCjvlpyPNM+CxQVHW3Z4EZwNvcqVfJBWWS+LrK8/eXQYQXfQ4+1qZJjWA2Qr8c+WkTg== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7e988057-3e17-4ec0-ee5e-08dc3f5f1f82 X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8147.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Mar 2024 11:01:36.4206 (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: n2azlw/UpKzt0NvRrr/ot3zdz17xJ6VL6piYkpzC28fVqEKzRvJgKH8AnMZ5fox0Es1VB5EZlmlfJ0l7K8gi6XdXFHculkXSBAtEgdLgJPc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8683 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" To match the enumerated media devices, each pipeline handler registered is used in no specific order. It is a limitation when several pipelines can match the devices, and user has to select a specific pipeline. For this purpose, environment variable LIBCAMERA_PIPELINES_MATCH_LIST is created that gives the option to define an ordered list of pipelines to invoke during the match process. LIBCAMERA_PIPELINES_MATCH_LIST="[,[,...]]]" Example: LIBCAMERA_PIPELINES_MATCH_LIST="PipelineHandlerRkISP1,SimplePipelineHandler" Signed-off-by: Julien Vuillaumier Reviewed-by: Jacopo Mondi --- Documentation/environment_variables.rst | 5 ++ include/libcamera/internal/camera_manager.h | 1 + src/libcamera/camera_manager.cpp | 57 ++++++++++++++++----- 3 files changed, 51 insertions(+), 12 deletions(-) diff --git a/Documentation/environment_variables.rst b/Documentation/environment_variables.rst index a9b230bc..ea4da3c9 100644 --- a/Documentation/environment_variables.rst +++ b/Documentation/environment_variables.rst @@ -37,6 +37,11 @@ LIBCAMERA_IPA_MODULE_PATH Example value: ``${HOME}/.libcamera/lib:/opt/libcamera/vendor/lib`` +LIBCAMERA_PIPELINES_MATCH_LIST + Define an ordered list of pipeline names to be used to match the media devices in the system. + + Example value: ``PipelineHandlerRkISP1,SimplePipelineHandler`` + LIBCAMERA_RPI_CONFIG_FILE Define a custom configuration file to use in the Raspberry Pi pipeline handler. diff --git a/include/libcamera/internal/camera_manager.h b/include/libcamera/internal/camera_manager.h index 33ebe069..c57e509a 100644 --- a/include/libcamera/internal/camera_manager.h +++ b/include/libcamera/internal/camera_manager.h @@ -45,6 +45,7 @@ private: int init(); void createPipelineHandlers(); void cleanup() LIBCAMERA_TSA_EXCLUDES(mutex_); + void pipelineFactoryMatch(const PipelineHandlerFactoryBase *factory); /* * This mutex protects diff --git a/src/libcamera/camera_manager.cpp b/src/libcamera/camera_manager.cpp index 355f3ada..620be1c8 100644 --- a/src/libcamera/camera_manager.cpp +++ b/src/libcamera/camera_manager.cpp @@ -99,13 +99,36 @@ int CameraManager::Private::init() void CameraManager::Private::createPipelineHandlers() { - CameraManager *const o = LIBCAMERA_O_PTR(); - /* * \todo Try to read handlers and order from configuration - * file and only fallback on all handlers if there is no - * configuration file. + * file and only fallback on environment variable or all handlers, if + * there is no configuration file. + */ + + /* + * When a list of preferred pipelines is defined, iterate through the + * ordered list to match the devices enumerated. + * Otherwise, device matching is done in no specific order with each + * registered pipeline handler. */ + const char *pipesList = + utils::secure_getenv("LIBCAMERA_PIPELINES_MATCH_LIST"); + if (pipesList) { + for (const auto &pipeName : utils::split(pipesList, ",")) { + const PipelineHandlerFactoryBase *factory; + factory = PipelineHandlerFactoryBase::getFactoryByName(pipeName); + if (!factory) + continue; + + LOG(Camera, Debug) + << "Found listed pipeline handler '" + << pipeName << "'"; + pipelineFactoryMatch(factory); + } + + return; + } + const std::vector &factories = PipelineHandlerFactoryBase::factories(); @@ -117,15 +140,25 @@ void CameraManager::Private::createPipelineHandlers() * Try each pipeline handler until it exhaust * all pipelines it can provide. */ - while (1) { - std::shared_ptr pipe = factory->create(o); - if (!pipe->match(enumerator_.get())) - break; + pipelineFactoryMatch(factory); + } +} - LOG(Camera, Debug) - << "Pipeline handler \"" << factory->name() - << "\" matched"; - } +void CameraManager::Private::pipelineFactoryMatch(const PipelineHandlerFactoryBase *factory) +{ + CameraManager *const o = LIBCAMERA_O_PTR(); + + /* + * Provide as many matching pipelines as possible + */ + while (1) { + std::shared_ptr pipe = factory->create(o); + if (!pipe->match(enumerator_.get())) + break; + + LOG(Camera, Debug) + << "Pipeline handler \"" << factory->name() + << "\" matched"; } }