Patch Detail
Show a patch.
GET /api/patches/26743/?format=api
{ "id": 26743, "url": "https://patchwork.libcamera.org/api/patches/26743/?format=api", "web_url": "https://patchwork.libcamera.org/patch/26743/", "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": "<20260512175340.115153-2-johannes.goede@oss.qualcomm.com>", "date": "2026-05-12T17:53:37", "name": "[v5,1/4] libcamera: Create IPA by name", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "999bc0ec07b0897d30ad89b091e9f4327c1f5610", "submitter": { "id": 242, "url": "https://patchwork.libcamera.org/api/people/242/?format=api", "name": "Hans de Goede", "email": "johannes.goede@oss.qualcomm.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/26743/mbox/", "series": [ { "id": 5940, "url": "https://patchwork.libcamera.org/api/series/5940/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5940", "date": "2026-05-12T17:53:36", "name": "ipa: Allow IPA creation by name", "version": 5, "mbox": "https://patchwork.libcamera.org/series/5940/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/26743/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/26743/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 5C30DBDB1C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 12 May 2026 17:53:51 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 150EA6302C;\n\tTue, 12 May 2026 19:53:51 +0200 (CEST)", "from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com\n\t[205.220.180.131])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D2A696301E\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 12 May 2026 19:53:48 +0200 (CEST)", "from pps.filterd (m0279870.ppops.net [127.0.0.1])\n\tby mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id\n\t64CHlcoY075092 for <libcamera-devel@lists.libcamera.org>;\n\tTue, 12 May 2026 17:53:47 GMT", "from mail-vs1-f71.google.com (mail-vs1-f71.google.com\n\t[209.85.217.71])\n\tby mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4e43gyhnpf-1\n\t(version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT)\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 12 May 2026 17:53:46 +0000 (GMT)", "by mail-vs1-f71.google.com with SMTP id\n\tada2fe7eead31-6312af106fcso8356103137.3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 12 May 2026 10:53:46 -0700 (PDT)", "from shalem\n\t(2001-1c00-0c32-7800-5bfa-a036-83f0-f9ec.cable.dynamic.v6.ziggo.nl.\n\t[2001:1c00:c32:7800:5bfa:a036:83f0:f9ec])\n\tby smtp.gmail.com with ESMTPSA id\n\ta640c23a62f3a-bce128529fbsm463191566b.36.2026.05.12.10.53.42\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tTue, 12 May 2026 10:53:43 -0700 (PDT)" ], "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=qualcomm.com header.i=@qualcomm.com\n\theader.b=\"KgALcLka\"; dkim=pass (2048-bit key;\n\tunprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com\n\theader.b=\"Z8iakjla\"; dkim-atps=neutral", "DKIM-Signature": [ "v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h=\n\tcc:content-transfer-encoding:content-type:date:from:in-reply-to\n\t:message-id:mime-version:references:subject:to; s=qcppdkim1; bh=\n\ti2SVqLF0EoJ2UahwRTlUv0JYhk8i5RAv6Q5zYgRyeJU=; b=KgALcLkaO6w5Aodf\n\tNFXt04arDgZ7i5yxq87GZ1zp1NSxTS29Yn4rXc2m9Qbwu2MFB2WWD5/HPYoAsyh6\n\tM5gnNYjWIgbQOvR3JN62yWKfxmckILZLGem6dRB6uj5/xbtfRBpLbWsU1kEXTKCQ\n\teAGOMbB4ChXi4RJeA/w5ZpveZ5/X8w816MeiFgKtuXCn5LM49kZo3o91nxKGVu/A\n\t3sTswBPkPqOq7u2JguPEi9JUAFvCOOgv8ozA5XAHQ/3FvK++iYSQ99SDBVCPwj2F\n\tjHlvPqhrO4IIqZ9Cf2YqBJ7epWc8IUXKkmwap4w5KlMmEfeXlrhivWezxJpCB0YU\n\tvpZDIQ==", "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=oss.qualcomm.com; s=google; t=1778608426; x=1779213226;\n\tdarn=lists.libcamera.org; \n\th=content-transfer-encoding:mime-version:references:in-reply-to\n\t:message-id:date:subject:cc:to:from:from:to:cc:subject:date\n\t:message-id:reply-to;\n\tbh=i2SVqLF0EoJ2UahwRTlUv0JYhk8i5RAv6Q5zYgRyeJU=;\n\tb=Z8iakjlacBtz+ZYyg4Ie+f+tRa5s9anBS+op0uY/6P2SsC5bESjSMOrV4aSzvstUWb\n\tAv7q021Af+onQs5jlkPwfEf6zvcTCIJtuUcaVolvzKvKHksuRab+G4A89SkfORxdMWtk\n\tTha/8kdKuiqDgJ0VijTqH37glnHrMChn6qpKKKXUnK/c20S7uBNeeDB5NDy91MmcN3uX\n\tOMmrZBUAgBeXYSYNiNqQGf9qrHAZOO2wuFcGyOSUp2MphyRRjzxauYdMJB0NFGlCKHhT\n\t66ksL8sApxeCvaB5JHQk+qHBXlyobFUqn9qnFJVxJnBEDkQvSXZxLtVQzqcWIg5Mn4h4\n\t2eSQ==" ], "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20251104; t=1778608426; x=1779213226;\n\th=content-transfer-encoding:mime-version:references:in-reply-to\n\t:message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from\n\t:to:cc:subject:date:message-id:reply-to;\n\tbh=i2SVqLF0EoJ2UahwRTlUv0JYhk8i5RAv6Q5zYgRyeJU=;\n\tb=ClfFVU3l2rwgG3fz3IZPma1GX8r3JUII8HwPQhY5CMRT5KwcbQRIKBigYK/wXRXiLT\n\ttvfeI5u1DUN17bbilTl7DiXh6UMZ/n9WzacAbyjtTmpCx+9hWV3StUKBzc9F265VfjD5\n\tE/cuzBKAVCU2dG8Z1U0TnUSXu+uuu3sLcgBo2kfAfHFWcquYkNlUfWpclSyOpYnxIaNJ\n\tLIr2sSZHSb7kp7NFHqNDZQS/HdO1AYoWlqYPKmcEQiF8EN42GOqMSA7NH3BFFl3B0smR\n\tYYPIGyLuKYw1CMm0/Vc/Tn2sSOF6zT5ON3VVAmDQwTvEKyM1tUVtHohsAvuKuYZDeKmj\n\tx1bQ==", "X-Gm-Message-State": "AOJu0Yy6rHAqqWxx5rcCVuqOp8qjmYwiXUlpJMpbH+Is3T/AjxfwbCDh\n\tPDAetCmQ0AGXk6V6/G/D3xXOIpnXY3XEGmcNmOtn8C9WNrwuesWYXauzShuscwhpbRtfTxZbB8N\n\tX5MD64AAPf+sUNpPlMMEUT47dmdLYqsQARj/2o/lskcwuNDWNv31wKN21ixwYeKRATydytNuYBQ\n\tR0LOdFEUxx", "X-Gm-Gg": "Acq92OFjOg5JuW9474CvewhQZv90zCnQKfL9GXPRH8g8zLTJV/U5S20knWdTiRcmfM0\n\t8NQytDAGVMEVSBtyhQ+AJUKPhzZGUq6ZEj6NNuR346Wqu2xHmqAxxl3M/fjntWm5UsfjXmjvf1h\n\tL/WVXvqJKsJ7oKBVNwyoDizIiZKP5A2uJ1JSVQB7qNcjC3YK1JZXyT+IsPqOuZURCvVPm2Fyp09\n\t6ncY9H1tZX4FHRJQuK6WjHm7KcBmmxvqLeHBJOyfj1ZhsfT3+pWfWRTOYDNiQw4rWVb7HSZTt9X\n\tmYyFULvhIGS7zM0J975P9DHSF/BG42MjIbFMcp9tt3fsLMmgbM3iNFQgye9/F+Te8mgcQfTcHGp\n\tIEYGj+E6Rdm/pnD286+9eUONQSiai7xjb45lWz4z+eEjD4wr6bERDC79DlFQBgoQ3m6KBitFnJg\n\tO2hgUOo1DvfSParpQEW10tzLzIIHkrtNS4S+vV", "X-Received": [ "by 2002:a05:6102:5045:b0:618:442a:9e76 with SMTP id\n\tada2fe7eead31-630f8ed8eebmr16844300137.10.1778608425408; \n\tTue, 12 May 2026 10:53:45 -0700 (PDT)", "by 2002:a05:6102:5045:b0:618:442a:9e76 with SMTP id\n\tada2fe7eead31-630f8ed8eebmr16844289137.10.1778608424847; \n\tTue, 12 May 2026 10:53:44 -0700 (PDT)" ], "From": "Hans de Goede <johannes.goede@oss.qualcomm.com>", "To": "libcamera-devel@lists.libcamera.org", "Cc": "Hans de Goede <johannes.goede@oss.qualcomm.com>, Jacopo Mondi\n\t<jacopo.mondi@ideasonboard.com>, Kieran Bingham\n\t<kieran.bingham@ideasonboard.com>, =?utf-8?q?Niklas_S=C3=B6derlund?=\n\t<niklas.soderlund+renesas@ragnatech.se>", "Subject": "[PATCH v5 1/4] libcamera: Create IPA by name", "Date": "Tue, 12 May 2026 19:53:37 +0200", "Message-ID": "<20260512175340.115153-2-johannes.goede@oss.qualcomm.com>", "X-Mailer": "git-send-email 2.54.0", "In-Reply-To": "<20260512175340.115153-1-johannes.goede@oss.qualcomm.com>", "References": "<20260512175340.115153-1-johannes.goede@oss.qualcomm.com>", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=UTF-8", "Content-Transfer-Encoding": "8bit", "X-Authority-Analysis": "v=2.4 cv=fMAJG5ae c=1 sm=1 tr=0 ts=6a03692b cx=c_pps\n\ta=P2rfLEam3zuxRRdjJWA2cw==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10\n\ta=NGcC8JguVDcA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22\n\ta=u7WPNUs3qKkmUXheDGA7:22 a=gowsoOTTUOVcmtlkKump:22 a=P1BnusSwAAAA:8\n\ta=EUspDBNiAAAA:8 a=L8eZCmLGBQB7CTaRy48A:9 a=3ZKOabzyN94A:10\n\ta=QEXdDO2ut3YA:10\n\ta=ODZdjJIeia2B_SHc_B0f:22 a=D0XLA9XvdZm18NrgonBM:22", "X-Proofpoint-ORIG-GUID": "EfcOVzsUr0kPzIF-C_y98HkHVdgG4mb0", "X-Proofpoint-Spam-Details-Enc": "AW1haW4tMjYwNTEyMDE4NSBTYWx0ZWRfXy7QRjaAN/d06\n\tmO1EJoocy6Qq8JqOEAdfnp7qS4bTRQTxE3wL7x7/Gfbu/h6hTQ1cn/XRIGyK70qJqXttK4xMUbR\n\tdW265/IPrQuDcxIJFRFkWZ11l9LV3nuP51LRmG86dFVKJSB+46USlewvm+GQ1UxN5bKA/UKZ4F9\n\twWJF02O0AyM4EWRPF6Yw371ybDofoQrs26Ji/C8+YQDkxX8xKfl7hq/JlT9YRIn3hYVbHcyXmBE\n\tb6i3ozUpYHCvLR4vJyvaIJ8mWWRJgv8nI18MbjrJJWTziOEGx/aQb9MDHZS25GU/YbdgEmHBdWu\n\tqDA1W/zdxvmgABFHtvPZa1bPl94WXUZal5hT5QulFvXgRENy/JGyCtpvcDykzOU3w1cEWN6j4X2\n\tzvVL4wHucjFyhaW+t+sxJrjTtKcJ8P9toPaQZIfqjHQjmV8mOHeur8pSxPGWUixscF9HvVNKP0d\n\tZSmNem/b+wTk+hAHsuA==", "X-Proofpoint-GUID": "EfcOVzsUr0kPzIF-C_y98HkHVdgG4mb0", "X-Proofpoint-Virus-Version": "vendor=baseguard\n\tengine=ICAP:2.0.293, Aquarius:18.0.1143, Hydra:6.1.51,\n\tFMLib:17.12.100.49\n\tdefinitions=2026-05-11_05,2026-05-08_02,2025-10-01_01", "X-Proofpoint-Spam-Details": "rule=outbound_notspam policy=outbound score=0\n\tpriorityscore=1501 impostorscore=0 suspectscore=0 malwarescore=0\n\tclxscore=1015 spamscore=0 adultscore=0 lowpriorityscore=0\n\tphishscore=0\n\tbulkscore=0 classifier=typeunknown authscore=0 authtc= authcc=\n\troute=outbound\n\tadjust=0 reason=mlx scancount=1 engine=8.22.0-2605050000\n\tdefinitions=main-2605120185", "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": "Currently createIPA() / IPAManager::module() assume that there is a 1:1\nrelationship between pipeline handlers and IPAs and IPA matching is done\nbased on matching the pipe to ipaModuleInfo.pipelineName[].\n\nOne way to allow using a single IPA with multiple pipelines would be to\nallow the IPA to declare itself compatible with more than one pipeline,\nturning ipaModuleInfo.pipelineName[] into e.g. a vector. But the way\nipaModuleInfo is loaded as an ELF symbol requires it to be a simple flat\nC-struct.\n\nInstead, move the IPA creation procedure to be name-based, introducing\na PipelineHandler::createIPA(name, minVer, maxVer) overload that allows\nto specify the name of the IPA module to match. Pipeline handlers that\nwants to use their name as matching criteria can continue doing so using\nthe already existing PipelineHandler::createIPA(minVer, maxVer) overload.\n\nSigned-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\nTested-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>\nSigned-off-by: Hans de Goede <johannes.goede@oss.qualcomm.com>\n---\nChanges in v5:\n- Rebase on top of db998e618aaa (\"libcamera: pipeline_handler: Add\n createIPA() function\") which moved the createIPA() wrapper for\n pipeline-handlers into the PipelineHandler class\n\nChanges in v4:\n- Rebase, change author to Hans' new email address\n\nChanges in v1 from Hans' original patch:\n- Slightly different approach addressing the review comments on Hans' v1\n by creating an overload for PipelineHandler::createIPA() that allows\n pipelines to specify the IPA module name.\n---\n include/libcamera/internal/ipa_manager.h | 6 ++---\n include/libcamera/internal/ipa_module.h | 4 +--\n include/libcamera/internal/pipeline_handler.h | 9 ++++++-\n src/libcamera/ipa_manager.cpp | 8 +++---\n src/libcamera/ipa_module.cpp | 14 +++++------\n src/libcamera/pipeline_handler.cpp | 25 +++++++++++++++++--\n 6 files changed, 47 insertions(+), 19 deletions(-)", "diff": "diff --git a/include/libcamera/internal/ipa_manager.h b/include/libcamera/internal/ipa_manager.h\nindex aaa3ca37c..7ab193112 100644\n--- a/include/libcamera/internal/ipa_manager.h\n+++ b/include/libcamera/internal/ipa_manager.h\n@@ -34,10 +34,10 @@ public:\n \t~IPAManager();\n \n \ttemplate<typename T>\n-\tstd::unique_ptr<T> createIPA(PipelineHandler *pipe, uint32_t minVersion,\n+\tstd::unique_ptr<T> createIPA(const char *name, uint32_t minVersion,\n \t\t\t\t uint32_t maxVersion)\n \t{\n-\t\tIPAModule *m = module(pipe, minVersion, maxVersion);\n+\t\tIPAModule *m = module(name, minVersion, maxVersion);\n \t\tif (!m)\n \t\t\treturn nullptr;\n \n@@ -68,7 +68,7 @@ private:\n \t\t std::vector<std::string> &files);\n \tunsigned int addDir(const char *libDir, unsigned int maxDepth = 0);\n \n-\tIPAModule *module(PipelineHandler *pipe, uint32_t minVersion,\n+\tIPAModule *module(const char *name, uint32_t minVersion,\n \t\t\t uint32_t maxVersion);\n \n \tbool isSignatureValid(IPAModule *ipa) const;\ndiff --git a/include/libcamera/internal/ipa_module.h b/include/libcamera/internal/ipa_module.h\nindex 15f19492c..a0a53764e 100644\n--- a/include/libcamera/internal/ipa_module.h\n+++ b/include/libcamera/internal/ipa_module.h\n@@ -36,8 +36,8 @@ public:\n \n \tIPAInterface *createInterface();\n \n-\tbool match(PipelineHandler *pipe,\n-\t\t uint32_t minVersion, uint32_t maxVersion) const;\n+\tbool match(const char *name, uint32_t minVersion,\n+\t\t uint32_t maxVersion) const;\n \n protected:\n \tstd::string logPrefix() const override;\ndiff --git a/include/libcamera/internal/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h\nindex 6922ce18e..b60c07b13 100644\n--- a/include/libcamera/internal/pipeline_handler.h\n+++ b/include/libcamera/internal/pipeline_handler.h\n@@ -76,7 +76,14 @@ public:\n \tstd::unique_ptr<T> createIPA(uint32_t minVersion, uint32_t maxVersion)\n \t{\n \t\tIPAManager *ipaManager = manager_->_d()->ipaManager();\n-\t\treturn ipaManager->createIPA<T>(this, minVersion, maxVersion);\n+\t\treturn ipaManager->createIPA<T>(name_, minVersion, maxVersion);\n+\t}\n+\n+\ttemplate<typename T>\n+\tstd::unique_ptr<T> createIPA(const char *ipaName, uint32_t minVersion, uint32_t maxVersion)\n+\t{\n+\t\tIPAManager *ipaManager = manager_->_d()->ipaManager();\n+\t\treturn ipaManager->createIPA<T>(ipaName, minVersion, maxVersion);\n \t}\n \n protected:\ndiff --git a/src/libcamera/ipa_manager.cpp b/src/libcamera/ipa_manager.cpp\nindex 41918e4c2..b709a024e 100644\n--- a/src/libcamera/ipa_manager.cpp\n+++ b/src/libcamera/ipa_manager.cpp\n@@ -248,15 +248,15 @@ unsigned int IPAManager::addDir(const char *libDir, unsigned int maxDepth)\n \n /**\n * \\brief Retrieve an IPA module that matches a given pipeline handler\n- * \\param[in] pipe The pipeline handler\n+ * \\param[in] name The IPA module string identifier\n * \\param[in] minVersion Minimum acceptable version of IPA module\n * \\param[in] maxVersion Maximum acceptable version of IPA module\n */\n-IPAModule *IPAManager::module(PipelineHandler *pipe, uint32_t minVersion,\n+IPAModule *IPAManager::module(const char *name, uint32_t minVersion,\n \t\t\t uint32_t maxVersion)\n {\n \tfor (const auto &module : modules_) {\n-\t\tif (module->match(pipe, minVersion, maxVersion))\n+\t\tif (module->match(name, minVersion, maxVersion))\n \t\t\treturn module.get();\n \t}\n \n@@ -266,7 +266,7 @@ IPAModule *IPAManager::module(PipelineHandler *pipe, uint32_t minVersion,\n /**\n * \\fn IPAManager::createIPA()\n * \\brief Create an IPA proxy that matches a given pipeline handler\n- * \\param[in] pipe The pipeline handler that wants a matching IPA proxy\n+ * \\param[in] name The IPA module name\n * \\param[in] minVersion Minimum acceptable version of IPA module\n * \\param[in] maxVersion Maximum acceptable version of IPA module\n *\ndiff --git a/src/libcamera/ipa_module.cpp b/src/libcamera/ipa_module.cpp\nindex e6ea61e44..c89887954 100644\n--- a/src/libcamera/ipa_module.cpp\n+++ b/src/libcamera/ipa_module.cpp\n@@ -462,22 +462,22 @@ IPAInterface *IPAModule::createInterface()\n }\n \n /**\n- * \\brief Verify if the IPA module matches a given pipeline handler\n- * \\param[in] pipe Pipeline handler to match with\n+ * \\brief Verify if the IPA module matches a given name\n+ * \\param[in] name The IPA module name\n * \\param[in] minVersion Minimum acceptable version of IPA module\n * \\param[in] maxVersion Maximum acceptable version of IPA module\n *\n- * This function checks if this IPA module matches the \\a pipe pipeline handler,\n+ * This function checks if this IPA module matches the requested \\a name\n * and the input version range.\n *\n- * \\return True if the pipeline handler matches the IPA module, or false otherwise\n+ * \\return True if the IPA module matches, or false otherwise\n */\n-bool IPAModule::match(PipelineHandler *pipe,\n-\t\t uint32_t minVersion, uint32_t maxVersion) const\n+bool IPAModule::match(const char *name, uint32_t minVersion,\n+\t\t uint32_t maxVersion) const\n {\n \treturn info_.pipelineVersion >= minVersion &&\n \t info_.pipelineVersion <= maxVersion &&\n-\t !strcmp(info_.pipelineName, pipe->name());\n+\t !strcmp(info_.name, name);\n }\n \n std::string IPAModule::logPrefix() const\ndiff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp\nindex e7145c1d4..25fc11989 100644\n--- a/src/libcamera/pipeline_handler.cpp\n+++ b/src/libcamera/pipeline_handler.cpp\n@@ -836,11 +836,32 @@ void PipelineHandler::disconnect()\n */\n \n /**\n- * \\fn PipelineHandler::createIPA()\n- * \\brief Create an IPA proxy that matches this pipeline handler\n+ * \\fn PipelineHandler::createIPA(const char *ipaName, uint32_t minVersion, uint32_t maxVersion)\n+ * \\brief Create an IPA proxy that matches the requested name and version\n+ * \\param[in] ipaName The IPA module name\n * \\param[in] minVersion Minimum acceptable version of IPA module\n * \\param[in] maxVersion Maximum acceptable version of IPA module\n *\n+ * Create an IPA module using \\a ipaName as the matching identifier. This\n+ * overload allows pipeline handlers to create an IPA module by specifying its\n+ * name instead of relying on the fact that the IPA module matches the pipeline\n+ * handler's one.\n+ *\n+ * \\return A newly created IPA proxy, or nullptr if no matching IPA module is\n+ * found or if the IPA proxy fails to initialize\n+ */\n+\n+/**\n+ * \\fn PipelineHandler::createIPA(uint32_t minVersion, uint32_t maxVersion)\n+ * \\brief Create an IPA proxy that matches the pipeline handler name and the\n+ * requested version\n+ * \\param[in] minVersion Minimum acceptable version of IPA module\n+ * \\param[in] maxVersion Maximum acceptable version of IPA module\n+ *\n+ * Create an IPA module using the pipeline handler name as the matching\n+ * identifier. This overload allows pipeline handler to create an IPA module\n+ * whose name matches the pipeline handler one.\n+ *\n * \\return A newly created IPA proxy, or nullptr if no matching IPA module is\n * found or if the IPA proxy fails to initialize\n */\n", "prefixes": [ "v5", "1/4" ] }