From patchwork Tue Aug 18 14:05:41 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Hans de Goede X-Patchwork-Id: 27838 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 C2CF2C330A for ; Tue, 18 Aug 2026 14:06:00 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id DE331682FD; Tue, 18 Aug 2026 16:05:58 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.b="LtaeHo/W"; dkim=pass (2048-bit key; unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="EE2SmXft"; dkim-atps=neutral Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 4DF8A682E5 for ; Tue, 18 Aug 2026 16:05:55 +0200 (CEST) Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67IE0flW1502685 for ; Tue, 18 Aug 2026 14:05:53 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 24nfE4GwOcj/gvwLd45tQlQRNDX907S5oisIPl37Yck=; b=LtaeHo/WgZRD+zjg 6zhCX4GZfDr/sezXTCfcK0/EfLXd29jD8k53HsCL0p/9yEbrql5MBT3rBCTltruo id4lAQpziBCBqdHJyUblq2wjkkj53O9Vb+A9PCBeQfcd8ysvSup4kth5sTPR0sdd vjLLcLwbR30k/cC/rHKR4Pw1Sb1+GO2BiAEmAaxRzpd3UJvLf9fvu5i9aPCsS/DW c2gnUK0WRsHMP/uhSfZHj7VrwjmvDBB8HWROw7iJNyXZrgCi+76y5rCMAiRxXSuK KDk1HSNvmi9sdqDHvvnzNYgZsMGhfI+Dixc4XSVOKCm0AmhukRovUlY7O8S32PBL uLaQwg== Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g4prn0kax-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 18 Aug 2026 14:05:53 +0000 (GMT) Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-92ec3146553so70739885a.1 for ; Tue, 18 Aug 2026 07:05:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787061952; x=1787666752; darn=lists.libcamera.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=24nfE4GwOcj/gvwLd45tQlQRNDX907S5oisIPl37Yck=; b=EE2SmXftGViGtdxiMr9v4ENntWBhrFpB9ydJtt30/0MelPDKlpVNXEjx5onJsWg21w 8pv1WmblstR6CwydNf3f7uk8GNZtBGT4i62z2/CSPJk+F9wDhTHgtWntAQYQ/8f7e4wA zAzsZRe9tZIFHqIRR14Xh/B4H/0YJBobeb3BIpPNxAAuAmLPYHJnZjYF1J8YUkKblfRh mi4WFB+0bzGndP8J95VTSrJdHQe9kYcYIvpsSzvevC3f5C+4ADv+VXo03eaYgtGd6774 HlWCJKSTALN8bJJt/78FyTGuQoNqT6JW2aPsmLeTAh9Es5wAbov7sAAwbSRrhNhcThSL J3Gw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787061952; x=1787666752; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=24nfE4GwOcj/gvwLd45tQlQRNDX907S5oisIPl37Yck=; b=Jf9BlRCTHaiiIqctwRxZIiCuzHNvd84tq/XyHh6u+nCuaPMHYDu8OTSq5OB73iDw5g RnwkqBOzqTfxBwTOGPICVWOqwdthqauOl02zIaVB+4af8Yxn6ygZNHw0fpBFTzcsrr38 PY8yh6uV1Ws+gWHiDJEewq+tpRqHAnjK5/7vyXG5GESxCNYB1bsg1tV+eoTjnJe7gQ6X CAg6waZytFmeiNLQJJfyDxZ3mOVAmOkfZGBAgPLCLSSykn57Mm1VhskbIqaqRzYoBI12 5Y6GaxX8FoiMWej+GBpH90z8+B6MO/lXJRpt2Xtz6IvesBB8OyTlHM8q72MQOR5+IRg2 ZDcQ== X-Gm-Message-State: AOJu0YzrvyGD8IWIKNWJAk2xBo1iOO51wBvNkv/HhEpsNmNEZViyj2fu OPzBJ7w/BKsZr/00XNNPoJwu5hK31zrIMSgD8SbAVL31V0eRTC57hpvFlRncYjtKT/eefDyYq+Q cS8HjZ3LFPraRgR5w4gqzBtcD6e9CP1bpSGzAp0qutbQGE0QSlGrW1NwXS6PBIQtdOP2d98TPUQ Cu4uUuwGsU X-Gm-Gg: AR+sD13rNW2qZLcLNPDCE5RsKneIx27CMuhbtKjZDobxCXW8y+SoVibK0xh6qHqnPXT OcuBYIuqqQsuc79zSJXyZ2HwQerHotktoNnqasyyjiI1a5+T47KRN4E2NagWyCSActKOlRTnLl2 G682Cu1hSAGPGQETTJsW0ARVQRMzkCYg8TWk3j2Y6UWGiG61PUqQSPJOcJ6VgTBU39tWCCF85Cn zUCjIjnrRFu0gJEaZqJwYEAJOxZgqpEA+bpN5ttXtt8fHxZurO26+nXO01BJ+cq3oB6MkL3Ie0h VGQfhrNX7szYr5aog0JEu9DZU+82wR93lQkHGHTwoEkEYTisNWK3b67/RvTSWxuGcsi2cJl5eUR u+ygHv3abXVS8Ul3KepFLWXhmYWzWXzioK7OuIDzRmvebwSYGsMFCRbKF7cTg8wdIgH/WfQQmMf 2CCElXHjRIKuVyT94= X-Received: by 2002:a05:620a:a191:10b0:92e:f3ca:2eaf with SMTP id af79cd13be357-936d2011e7dmr2683153585a.11.1787061952304; Tue, 18 Aug 2026 07:05:52 -0700 (PDT) X-Received: by 2002:a05:620a:a191:10b0:92e:f3ca:2eaf with SMTP id af79cd13be357-936d2011e7dmr2683136685a.11.1787061951506; Tue, 18 Aug 2026 07:05:51 -0700 (PDT) Received: from shalem (2001-1c00-0c32-7800-5bfa-a036-83f0-f9ec.cable.dynamic.v6.ziggo.nl. [2001:1c00:c32:7800:5bfa:a036:83f0:f9ec]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6a3d85a30b7sm1874967a12.30.2026.08.18.07.05.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 07:05:50 -0700 (PDT) From: Hans de Goede To: libcamera-devel@lists.libcamera.org Cc: Jacopo Mondi , =?utf-8?q?Niklas_S=C3=B6?= =?utf-8?q?derlund?= , Loic Poulain , Hans de Goede , Kieran Bingham Subject: [PATCH v9 1/8] libcamera: Create IPA by name Date: Tue, 18 Aug 2026 16:05:41 +0200 Message-ID: <20260818140548.179663-2-johannes.goede@oss.qualcomm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260818140548.179663-1-johannes.goede@oss.qualcomm.com> References: <20260818140548.179663-1-johannes.goede@oss.qualcomm.com> MIME-Version: 1.0 X-Proofpoint-Spam-Info: AW1haW4tMjYwODE4MDEwMyBTYWx0ZWRfX/mJxtsPgP+oO mCE7wzCbow5Nlkr7QHEAF09hy28GsOAvTqliVZVvSO7N3b3Idp1y6DXVLGOrnonwIsMgip27QwB ZD975lRVGhxLIWHtaXgLEz0OsK1Xo0U= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE4MDEwMyBTYWx0ZWRfX3Bq3PIcm+TZy ZkMfEAJGHiTIhdzitMV526Q3DTP9xUJk6jQs/xS2hXOyQl4YBtfK6MDXox4RlzqUKBbU7nmjw7O o55VLxt0afY2Zm8IdhkFD6Zjo7CElIA/sq13ZtMS9JNtZooImN2QMP57j+fOnM7k0YXNR88U1FZ ALRyVBN0di0rGsAeU/QjAzVCoA9XbFwcHIRRxm8eedQviyv4EzU2xozROvtthfTeu2zBmPEyzBk 2QXGwegFSpxQBBDqoT/rpIiEkM3wbtdxx/ErhVCX53o9ouhytKce58rvyi95eOgg4cTPMjB3dom PYPPnUA6VBbNPEDq4XpGjbAPmHShfiEx1NMmdyfcBbrIA0i2wk6TESU7pPtIy7v1RgFkcS5Vlz8 VZNHSMJvGizapeVO8fYpMho2ShRcTietEWfuRXEYSrrU80Si5nGj9IBkUhKeDYg4he8OZMoDskt vpFonhsWgkK0ePye+hQ== X-Proofpoint-ORIG-GUID: dTWVIraF5VvNz_Mf_dU_Bceo_7Xfvpf2 X-Authority-Analysis: v=2.4 cv=HNrz0Itv c=1 sm=1 tr=0 ts=6a8466c1 cx=c_pps a=HLyN3IcIa5EE8TELMZ618Q==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=P1BnusSwAAAA:8 a=EUspDBNiAAAA:8 a=UNDMa8c6wnfCkPawyUwA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=bTQJ7kPSJx9SKPbeHEYW:22 a=D0XLA9XvdZm18NrgonBM:22 X-Proofpoint-GUID: dTWVIraF5VvNz_Mf_dU_Bceo_7Xfvpf2 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293, Aquarius:18.0.1176, Hydra:6.1.134, FMLib:17.12.100.49 definitions=2026-08-18_02,2026-08-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 clxscore=1015 adultscore=0 malwarescore=0 phishscore=0 spamscore=0 bulkscore=0 priorityscore=1501 impostorscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608180103 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" Currently createIPA() / IPAManager::module() assume that there is a 1:1 relationship between pipeline handlers and IPAs and IPA matching is done based on matching the pipe to ipaModuleInfo.pipelineName[]. One way to allow using a single IPA with multiple pipelines would be to allow the IPA to declare itself compatible with more than one pipeline, turning ipaModuleInfo.pipelineName[] into e.g. a vector. But the way ipaModuleInfo is loaded as an ELF symbol requires it to be a simple flat C-struct. Instead, move the IPA creation procedure to be name-based, introducing a PipelineHandler::createIPA(name, minVer, maxVer) overload that allows to specify the name of the IPA module to match. Pipeline handlers that wants to use their name as matching criteria can continue doing so using the already existing PipelineHandler::createIPA(minVer, maxVer) overload. Reviewed-by: Kieran Bingham Tested-by: Niklas Söderlund Signed-off-by: Jacopo Mondi Signed-off-by: Hans de Goede Reviewed-by: Barnabás Pőcze --- Changes in v9: - Remove no longer needed PipelineHandler forward decl. from ipa_manager.h - Remove no longer needed pipeline_handler.h include from ipa_manager.cpp, ipa_module.[cpp|h] Changes in v5: - Rebase on top of db998e618aaa ("libcamera: pipeline_handler: Add createIPA() function") which moved the createIPA() wrapper for pipeline-handlers into the PipelineHandler class Changes in v4: - Rebase, change author to Hans' new email address Changes in v1 from Hans' original patch: - Slightly different approach addressing the review comments on Hans' v1 by creating an overload for PipelineHandler::createIPA() that allows pipelines to specify the IPA module name. --- include/libcamera/internal/ipa_manager.h | 7 +++--- include/libcamera/internal/ipa_module.h | 6 ++--- include/libcamera/internal/pipeline_handler.h | 9 ++++++- src/libcamera/ipa_manager.cpp | 9 +++---- src/libcamera/ipa_module.cpp | 16 ++++++------ src/libcamera/pipeline_handler.cpp | 25 +++++++++++++++++-- test/ipa/ipa_interface_test.cpp | 2 +- 7 files changed, 48 insertions(+), 26 deletions(-) diff --git a/include/libcamera/internal/ipa_manager.h b/include/libcamera/internal/ipa_manager.h index aaa3ca37c..23c262b14 100644 --- a/include/libcamera/internal/ipa_manager.h +++ b/include/libcamera/internal/ipa_manager.h @@ -25,7 +25,6 @@ LOG_DECLARE_CATEGORY(IPAManager) class CameraManager; class GlobalConfiguration; class IPAModule; -class PipelineHandler; class IPAManager { @@ -34,10 +33,10 @@ public: ~IPAManager(); template - std::unique_ptr createIPA(PipelineHandler *pipe, uint32_t minVersion, + std::unique_ptr createIPA(const char *name, uint32_t minVersion, uint32_t maxVersion) { - IPAModule *m = module(pipe, minVersion, maxVersion); + IPAModule *m = module(name, minVersion, maxVersion); if (!m) return nullptr; @@ -68,7 +67,7 @@ private: std::vector &files); unsigned int addDir(const char *libDir, unsigned int maxDepth = 0); - IPAModule *module(PipelineHandler *pipe, uint32_t minVersion, + IPAModule *module(const char *name, uint32_t minVersion, uint32_t maxVersion); bool isSignatureValid(IPAModule *ipa) const; diff --git a/include/libcamera/internal/ipa_module.h b/include/libcamera/internal/ipa_module.h index 15f19492c..a4cfe864c 100644 --- a/include/libcamera/internal/ipa_module.h +++ b/include/libcamera/internal/ipa_module.h @@ -16,8 +16,6 @@ #include #include -#include "libcamera/internal/pipeline_handler.h" - namespace libcamera { class IPAModule : public Loggable @@ -36,8 +34,8 @@ public: IPAInterface *createInterface(); - bool match(PipelineHandler *pipe, - uint32_t minVersion, uint32_t maxVersion) const; + bool match(const char *name, uint32_t minVersion, + uint32_t maxVersion) const; protected: std::string logPrefix() const override; diff --git a/include/libcamera/internal/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h index 6922ce18e..b60c07b13 100644 --- a/include/libcamera/internal/pipeline_handler.h +++ b/include/libcamera/internal/pipeline_handler.h @@ -76,7 +76,14 @@ public: std::unique_ptr createIPA(uint32_t minVersion, uint32_t maxVersion) { IPAManager *ipaManager = manager_->_d()->ipaManager(); - return ipaManager->createIPA(this, minVersion, maxVersion); + return ipaManager->createIPA(name_, minVersion, maxVersion); + } + + template + std::unique_ptr createIPA(const char *ipaName, uint32_t minVersion, uint32_t maxVersion) + { + IPAManager *ipaManager = manager_->_d()->ipaManager(); + return ipaManager->createIPA(ipaName, minVersion, maxVersion); } protected: diff --git a/src/libcamera/ipa_manager.cpp b/src/libcamera/ipa_manager.cpp index 41918e4c2..845a09f10 100644 --- a/src/libcamera/ipa_manager.cpp +++ b/src/libcamera/ipa_manager.cpp @@ -21,7 +21,6 @@ #include "libcamera/internal/global_configuration.h" #include "libcamera/internal/ipa_module.h" #include "libcamera/internal/ipa_proxy.h" -#include "libcamera/internal/pipeline_handler.h" /** * \file ipa_manager.h @@ -248,15 +247,15 @@ unsigned int IPAManager::addDir(const char *libDir, unsigned int maxDepth) /** * \brief Retrieve an IPA module that matches a given pipeline handler - * \param[in] pipe The pipeline handler + * \param[in] name The IPA module string identifier * \param[in] minVersion Minimum acceptable version of IPA module * \param[in] maxVersion Maximum acceptable version of IPA module */ -IPAModule *IPAManager::module(PipelineHandler *pipe, uint32_t minVersion, +IPAModule *IPAManager::module(const char *name, uint32_t minVersion, uint32_t maxVersion) { for (const auto &module : modules_) { - if (module->match(pipe, minVersion, maxVersion)) + if (module->match(name, minVersion, maxVersion)) return module.get(); } @@ -266,7 +265,7 @@ IPAModule *IPAManager::module(PipelineHandler *pipe, uint32_t minVersion, /** * \fn IPAManager::createIPA() * \brief Create an IPA proxy that matches a given pipeline handler - * \param[in] pipe The pipeline handler that wants a matching IPA proxy + * \param[in] name The IPA module name * \param[in] minVersion Minimum acceptable version of IPA module * \param[in] maxVersion Maximum acceptable version of IPA module * diff --git a/src/libcamera/ipa_module.cpp b/src/libcamera/ipa_module.cpp index e6ea61e44..b7d770444 100644 --- a/src/libcamera/ipa_module.cpp +++ b/src/libcamera/ipa_module.cpp @@ -24,8 +24,6 @@ #include #include -#include "libcamera/internal/pipeline_handler.h" - /** * \file ipa_module.h * \brief Image Processing Algorithm module @@ -462,22 +460,22 @@ IPAInterface *IPAModule::createInterface() } /** - * \brief Verify if the IPA module matches a given pipeline handler - * \param[in] pipe Pipeline handler to match with + * \brief Verify if the IPA module matches a given name + * \param[in] name The IPA module name * \param[in] minVersion Minimum acceptable version of IPA module * \param[in] maxVersion Maximum acceptable version of IPA module * - * This function checks if this IPA module matches the \a pipe pipeline handler, + * This function checks if this IPA module matches the requested \a name * and the input version range. * - * \return True if the pipeline handler matches the IPA module, or false otherwise + * \return True if the IPA module matches, or false otherwise */ -bool IPAModule::match(PipelineHandler *pipe, - uint32_t minVersion, uint32_t maxVersion) const +bool IPAModule::match(const char *name, uint32_t minVersion, + uint32_t maxVersion) const { return info_.pipelineVersion >= minVersion && info_.pipelineVersion <= maxVersion && - !strcmp(info_.pipelineName, pipe->name()); + !strcmp(info_.name, name); } std::string IPAModule::logPrefix() const diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp index e7145c1d4..25fc11989 100644 --- a/src/libcamera/pipeline_handler.cpp +++ b/src/libcamera/pipeline_handler.cpp @@ -836,11 +836,32 @@ void PipelineHandler::disconnect() */ /** - * \fn PipelineHandler::createIPA() - * \brief Create an IPA proxy that matches this pipeline handler + * \fn PipelineHandler::createIPA(const char *ipaName, uint32_t minVersion, uint32_t maxVersion) + * \brief Create an IPA proxy that matches the requested name and version + * \param[in] ipaName The IPA module name * \param[in] minVersion Minimum acceptable version of IPA module * \param[in] maxVersion Maximum acceptable version of IPA module * + * Create an IPA module using \a ipaName as the matching identifier. This + * overload allows pipeline handlers to create an IPA module by specifying its + * name instead of relying on the fact that the IPA module matches the pipeline + * handler's one. + * + * \return A newly created IPA proxy, or nullptr if no matching IPA module is + * found or if the IPA proxy fails to initialize + */ + +/** + * \fn PipelineHandler::createIPA(uint32_t minVersion, uint32_t maxVersion) + * \brief Create an IPA proxy that matches the pipeline handler name and the + * requested version + * \param[in] minVersion Minimum acceptable version of IPA module + * \param[in] maxVersion Maximum acceptable version of IPA module + * + * Create an IPA module using the pipeline handler name as the matching + * identifier. This overload allows pipeline handler to create an IPA module + * whose name matches the pipeline handler one. + * * \return A newly created IPA proxy, or nullptr if no matching IPA module is * found or if the IPA proxy fails to initialize */ diff --git a/test/ipa/ipa_interface_test.cpp b/test/ipa/ipa_interface_test.cpp index 271c4e2c9..0b01a396e 100644 --- a/test/ipa/ipa_interface_test.cpp +++ b/test/ipa/ipa_interface_test.cpp @@ -99,7 +99,7 @@ protected: EventDispatcher *dispatcher = thread()->eventDispatcher(); Timer timer; - ipa_ = ipaManager_->createIPA(pipe_.get(), 0, 0); + ipa_ = ipaManager_->createIPA(pipe_->name(), 0, 0); if (!ipa_) { cerr << "Failed to create VIMC IPA interface" << endl; return TestFail; From patchwork Tue Aug 18 14:05:42 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Hans de Goede X-Patchwork-Id: 27839 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 D8822C3333 for ; Tue, 18 Aug 2026 14:06:02 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id F140E682F2; Tue, 18 Aug 2026 16:05:59 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.b="YSGjx/KU"; dkim=pass (2048-bit key; unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="f131TfFJ"; dkim-atps=neutral Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id D96CF682DF for ; Tue, 18 Aug 2026 16:05:55 +0200 (CEST) Received: from pps.filterd (m0279863.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67IE0nqC1502806 for ; Tue, 18 Aug 2026 14:05:54 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= oVec6ekxoaI51J5kCpx3d59duRT6/16r0AqO/O3nL7Y=; b=YSGjx/KU/mDHRu79 nbOGzgly27mmQLJzW/jX3tstR7M+7IYkB6UNKtFtjXE0aw1uFsMpyTgzDRAKS6zS n5AgpVSC7hHAj7as0ayLIWjKacWAVpuPNR9P1oNsqcDskDBI8S+P36Wq64RJ2/z/ rGQkweO2LBiVrw95Zxec4QzAQzHoN6usN6UIQEVWvyh4S+mME0n3g4j+phvIEOEI zmmsNBSIqMEUWM2lZivGVQ5Jfdm4RQGxbTXvr/q9FyG0e+8Ue12koYh+PbwKAOxb Tr91q35EGxBg/kAks78a2v5dLnHzFNjV/xqREgPONc9EIHNqqssCgW4jagGBQl2t VfW5/A== Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g4prn0kb2-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 18 Aug 2026 14:05:53 +0000 (GMT) Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-936aa34873bso426634085a.3 for ; Tue, 18 Aug 2026 07:05:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787061953; x=1787666753; darn=lists.libcamera.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=oVec6ekxoaI51J5kCpx3d59duRT6/16r0AqO/O3nL7Y=; b=f131TfFJ3ENFOHYVtzSSN9avXTNHi02IaIkLLa5AETmy7TxLFbbge+OHawlZ/bR/5Z tLhpOLvsZb9dx3MGAMylMi8HxB5r/othD1bo/k9vWHcY1dKhwtMXRsSIOpeXtc4dP7O6 cfl6A8YFn830cG8cMIrKomTNg2Ukp4jlZEllmhKe/GVebb29iLIrnq/W0ejZCRBwXO2y aM/UMH7sz7ftqX2csmqEyDMgu/1rAyW0siLekfGwn8eXC8SlfvSPQG1Sz6Dz5/Uupvuz yHLxn91xxMPu/jaJrN/aRUoQ2B9oA0dWAlrfoX0p8ASbzgvCjpJMjdK6SMmSHi6lcUKf RvJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787061953; x=1787666753; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=oVec6ekxoaI51J5kCpx3d59duRT6/16r0AqO/O3nL7Y=; b=P7p3Ta+jTDktPY2yP/t8rx0m8PciaFDNaQUbrVy3GkIq6TiS9ZicBVa2Va3kb7VU/L 8HHRrzEm1ekkIbof1Le4J+L+VrcqMCB540buOdMxHtdcn7elpIxV80FLmF5cIqaSM9WR qSv91FVaSpZZLc0nGyfo8/t7pHVSjs8JX9xCy7XMfa/VMpXZjInKOAN4hZ3sBXqQuBJA rJHafOGFTBxe6pG7QUUkBDDyqdeC73w9OvE3CwEqzoYeCjLcHL4eKu4AJ5Bmy3/YGTQb UBsP4VXIAn+IOrkZnpyM4GKE+xc0hBbivc54gDD7kBID0D1UesA23tDAzSy29hnMzZyu WpZA== X-Gm-Message-State: AOJu0YwchsCTmX7dpmQ8te9WrkDFDY9HU8crSY+4h9qu8RNVDz71EAwm do8BiIGvOkoV4M6n9anQPWnBmM1xuVIs+wnIFHKfY5lVeHQvY7G2BBDGx0UWdgNJAZNfjY52XKF LkCsAMi4DSES/IQpoF666W/D1N/aFDqv09IM6vQSJB5+SVS3J9IWO2TMI5lFdpA4WAKQc4BFyk6 uWMheTPfpN X-Gm-Gg: AR+sD13BZVAckursgdWS4VZuv5YeoiW81dMv2Jwllf86Br2w7iM5/fOtYtG8hlKdaC+ LiGMu3P4joQ4dk67aSW7eP9yFMkoKKnQoCP7kuf/qirQA7oHAAOK13LULnTJinuebLPvm85RL4x 74Rt6YA/s8/oneTEFNhNHy6rY0A6iOCc2xbqJFYn55Wdn1Dn2AEvJYBBNj1NNH0xn1jhJ2tAD1o yXOge5BklUBP+zKiaKvuyP9yQrJL5MorqG+YzbA86Pty+UDWhYyNpZmoOhrSIJUvVWi87YsKwNZ iU/QNbRgIbQvO2AaLL11q1uIMauvBkcStTcGh/hY6VK18YX8wXsmcRxWc/iknE6uq9SMI+6MUNs WEBcYiSgBBEijklOw+Xdr4EZ050h/pZyKuDx7eyEo3C/zZHYw3AjGnRpzmx8nWmuYGfF+YOqrg8 mMCEcJBvKpApWy7/8= X-Received: by 2002:a05:620a:22e9:b0:92e:6637:d98 with SMTP id af79cd13be357-936d2286961mr2691958485a.18.1787061952905; Tue, 18 Aug 2026 07:05:52 -0700 (PDT) X-Received: by 2002:a05:620a:22e9:b0:92e:6637:d98 with SMTP id af79cd13be357-936d2286961mr2691947585a.18.1787061952396; Tue, 18 Aug 2026 07:05:52 -0700 (PDT) Received: from shalem (2001-1c00-0c32-7800-5bfa-a036-83f0-f9ec.cable.dynamic.v6.ziggo.nl. [2001:1c00:c32:7800:5bfa:a036:83f0:f9ec]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6a3d85a30b7sm1874967a12.30.2026.08.18.07.05.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 07:05:51 -0700 (PDT) From: Hans de Goede To: libcamera-devel@lists.libcamera.org Cc: Jacopo Mondi , =?utf-8?q?Niklas_S=C3=B6?= =?utf-8?q?derlund?= , Loic Poulain , Hans de Goede , =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= , Kieran Bingham Subject: [PATCH v9 2/8] ipa: ipa_module: Remove pipelineName Date: Tue, 18 Aug 2026 16:05:42 +0200 Message-ID: <20260818140548.179663-3-johannes.goede@oss.qualcomm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260818140548.179663-1-johannes.goede@oss.qualcomm.com> References: <20260818140548.179663-1-johannes.goede@oss.qualcomm.com> MIME-Version: 1.0 X-Proofpoint-Spam-Info: AW1haW4tMjYwODE4MDEwMyBTYWx0ZWRfX35fFGaGh3Tw7 /xViMFK4k30oompDkN1m2jL5zgs/Rs+L5qCgj08pD3uRG5pimTXQ4VAsMM4qcUdpEv4pKlJh5eb 7KeulSJsPn9FYnttMA+e2IUMiFS7k9Q= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE4MDEwMyBTYWx0ZWRfXyUzeQLb1oCBB 9YQD2faQcxfXcfkW+i3f9LLP0bZU4tBrdcz5S0qOzKovEhh+uqMmcaXworakfzYYXewTiRYIBa/ MVkePlBEwsN48COG+jhM59nSSCiTM2OUR+a/j1GN3T9F6vj5W0FhKebjoU0n6cbeZH03+rJeeBI +tQ/+6hkmLVr7dlixDhUQwFv6OfMWZLuSFmSgdg6mr8nSDcQY9hqvxxaHCh1an2JkxEyrxqF2B0 PTKZlTuO+m7Y4rB3cq6agE07RWYTmMI7QSUaYH0Mz5ygtXoZCtdvBx0vUcZknAok1tXtg3wXa6N nTQZnep2d6cDgMYBFX0/UVk6kOCjwakqN27LyhONkSuGD3xI/V11MAeTiv3DwllznVbgki7FF5P SgoeQ06K1/oi79uZiY5S1YLFakcn2m3jgGkDJrXm4NC52TfxZ3lNXcQyYb9LQXLiElX9KL1TJCt 6St8QaiAcoui4mB9cJQ== X-Proofpoint-ORIG-GUID: LcwtMTcWWWehHtcxyF3eLX_p5Nq3_u94 X-Authority-Analysis: v=2.4 cv=HNrz0Itv c=1 sm=1 tr=0 ts=6a8466c1 cx=c_pps a=hnmNkyzTK/kJ09Xio7VxxA==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=yOCtJkima9RkubShWh1s:22 a=P1BnusSwAAAA:8 a=EUspDBNiAAAA:8 a=lvZftHTMWe99GEGio_gA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=PEH46H7Ffwr30OY-TuGO:22 a=D0XLA9XvdZm18NrgonBM:22 X-Proofpoint-GUID: LcwtMTcWWWehHtcxyF3eLX_p5Nq3_u94 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293, Aquarius:18.0.1176, Hydra:6.1.134, FMLib:17.12.100.49 definitions=2026-08-18_02,2026-08-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 clxscore=1015 adultscore=0 malwarescore=0 phishscore=0 spamscore=0 bulkscore=0 priorityscore=1501 impostorscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608180103 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: Jacopo Mondi All the IPA modules declare a pipelineName that is identical to their name. As we now support creating IPAs by name (either explicitly provided by the pipeline handlers or by using the pipeline name), the duplicated information in IPAModuleInfo is redundant. Remove it. Reviewed-by: Barnabás Pőcze Reviewed-by: Kieran Bingham Reviewed-by: Hans de Goede Tested-by: Niklas Söderlund Signed-off-by: Jacopo Mondi Signed-off-by: Hans de Goede --- include/libcamera/ipa/ipa_module_info.h | 1 - src/ipa/ipu3/ipu3.cpp | 1 - src/ipa/mali-c55/mali-c55.cpp | 1 - src/ipa/rkisp1/rkisp1.cpp | 1 - src/ipa/rpi/pisp/pisp.cpp | 1 - src/ipa/rpi/vc4/vc4.cpp | 1 - src/ipa/simple/soft_simple.cpp | 1 - src/ipa/vimc/vimc.cpp | 1 - src/libcamera/ipa_module.cpp | 15 ++++++--------- test/ipa/ipa_module_test.cpp | 3 --- 10 files changed, 6 insertions(+), 20 deletions(-) diff --git a/include/libcamera/ipa/ipa_module_info.h b/include/libcamera/ipa/ipa_module_info.h index 3507a6d76..436ec82d7 100644 --- a/include/libcamera/ipa/ipa_module_info.h +++ b/include/libcamera/ipa/ipa_module_info.h @@ -16,7 +16,6 @@ namespace libcamera { struct IPAModuleInfo { int moduleAPIVersion; uint32_t pipelineVersion; - char pipelineName[256]; char name[256]; } __attribute__((packed)); diff --git a/src/ipa/ipu3/ipu3.cpp b/src/ipa/ipu3/ipu3.cpp index 4bdc4b767..42d475ecc 100644 --- a/src/ipa/ipu3/ipu3.cpp +++ b/src/ipa/ipu3/ipu3.cpp @@ -672,7 +672,6 @@ const struct IPAModuleInfo ipaModuleInfo = { IPA_MODULE_API_VERSION, 1, "ipu3", - "ipu3", }; /** diff --git a/src/ipa/mali-c55/mali-c55.cpp b/src/ipa/mali-c55/mali-c55.cpp index da0dbe4b3..37350eb28 100644 --- a/src/ipa/mali-c55/mali-c55.cpp +++ b/src/ipa/mali-c55/mali-c55.cpp @@ -382,7 +382,6 @@ const struct IPAModuleInfo ipaModuleInfo = { IPA_MODULE_API_VERSION, 1, "mali-c55", - "mali-c55", }; IPAInterface *ipaCreate() diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp index 58ef163d8..e0dde542c 100644 --- a/src/ipa/rkisp1/rkisp1.cpp +++ b/src/ipa/rkisp1/rkisp1.cpp @@ -481,7 +481,6 @@ const struct IPAModuleInfo ipaModuleInfo = { IPA_MODULE_API_VERSION, 1, "rkisp1", - "rkisp1", }; IPAInterface *ipaCreate() diff --git a/src/ipa/rpi/pisp/pisp.cpp b/src/ipa/rpi/pisp/pisp.cpp index fd28fc385..88deccfd1 100644 --- a/src/ipa/rpi/pisp/pisp.cpp +++ b/src/ipa/rpi/pisp/pisp.cpp @@ -1147,7 +1147,6 @@ const IPAModuleInfo ipaModuleInfo = { IPA_MODULE_API_VERSION, 1, "rpi/pisp", - "rpi/pisp", }; IPAInterface *ipaCreate() diff --git a/src/ipa/rpi/vc4/vc4.cpp b/src/ipa/rpi/vc4/vc4.cpp index b6ca44e7a..f30eee7ff 100644 --- a/src/ipa/rpi/vc4/vc4.cpp +++ b/src/ipa/rpi/vc4/vc4.cpp @@ -633,7 +633,6 @@ const struct IPAModuleInfo ipaModuleInfo = { IPA_MODULE_API_VERSION, 1, "rpi/vc4", - "rpi/vc4", }; IPAInterface *ipaCreate() diff --git a/src/ipa/simple/soft_simple.cpp b/src/ipa/simple/soft_simple.cpp index 629e1a32d..d4ab91e30 100644 --- a/src/ipa/simple/soft_simple.cpp +++ b/src/ipa/simple/soft_simple.cpp @@ -343,7 +343,6 @@ const struct IPAModuleInfo ipaModuleInfo = { IPA_MODULE_API_VERSION, 0, "simple", - "simple", }; IPAInterface *ipaCreate() diff --git a/src/ipa/vimc/vimc.cpp b/src/ipa/vimc/vimc.cpp index 4162b848f..bae48ea90 100644 --- a/src/ipa/vimc/vimc.cpp +++ b/src/ipa/vimc/vimc.cpp @@ -183,7 +183,6 @@ const struct IPAModuleInfo ipaModuleInfo = { IPA_MODULE_API_VERSION, 0, "vimc", - "vimc", }; IPAInterface *ipaCreate() diff --git a/src/libcamera/ipa_module.cpp b/src/libcamera/ipa_module.cpp index b7d770444..264bb1f2d 100644 --- a/src/libcamera/ipa_module.cpp +++ b/src/libcamera/ipa_module.cpp @@ -213,18 +213,15 @@ Span elfLoadSymbol(Span elf, const char *symbol) * \var IPAModuleInfo::pipelineVersion * \brief The pipeline handler version that the IPA module is for * - * \var IPAModuleInfo::pipelineName - * \brief The name of the pipeline handler that the IPA module is for - * - * This name is used to match a pipeline handler with the module. - * * \var IPAModuleInfo::name * \brief The name of the IPA module * - * The name may be used to build file system paths to IPA-specific resources. - * It shall only contain printable characters, and may not contain '*', '?' or - * '\'. For IPA modules included in libcamera, it shall match the directory of - * the IPA module in the source tree. + * This name is used to match the IPA module. + * + * The name may also be used to build file system paths to IPA-specific + * resources. It shall only contain printable characters, and may not contain + * '*', '?' or '\'. For IPA modules included in libcamera, it shall match the + * directory of the IPA module in the source tree. * * \todo Allow user to choose to isolate open source IPAs */ diff --git a/test/ipa/ipa_module_test.cpp b/test/ipa/ipa_module_test.cpp index 1c97da324..af71c3285 100644 --- a/test/ipa/ipa_module_test.cpp +++ b/test/ipa/ipa_module_test.cpp @@ -37,12 +37,10 @@ protected: cerr << "IPA module information mismatch: expected:" << endl << "moduleAPIVersion = " << testInfo.moduleAPIVersion << endl << "pipelineVersion = " << testInfo.pipelineVersion << endl - << "pipelineName = " << testInfo.pipelineName << endl << "name = " << testInfo.name << "got: " << endl << "moduleAPIVersion = " << info.moduleAPIVersion << endl << "pipelineVersion = " << info.pipelineVersion << endl - << "pipelineName = " << info.pipelineName << endl << "name = " << info.name << endl; } @@ -58,7 +56,6 @@ protected: IPA_MODULE_API_VERSION, 0, "vimc", - "vimc", }; count += runTest("src/ipa/vimc/ipa_vimc.so", testInfo); From patchwork Tue Aug 18 14:05:43 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Hans de Goede X-Patchwork-Id: 27840 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 4A981C3308 for ; Tue, 18 Aug 2026 14:06:04 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id AF7D868304; Tue, 18 Aug 2026 16:06:03 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.b="MW3pJ3qU"; dkim=pass (2048-bit key; unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="R12paK8H"; dkim-atps=neutral Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 8EB0E682FB for ; Tue, 18 Aug 2026 16:05:58 +0200 (CEST) Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67IE0iGl1018155 for ; Tue, 18 Aug 2026 14:05:57 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=EQ1XZRbZGRy B3as4gr3aCKmf2sK+9RMxmTWtjPgyi3Q=; b=MW3pJ3qUeU5kvjuWV1As8UGrX5R 2TFt5TSJcSdqF3ZyaCKl51Y79fDqkOiBS1VbVUu2jZRMEBhUW7jOEbiKhK1F2G1u 1mHp8IMoAZbdKG9jh9olMSBsaBiHFhf6aFAksZdt+g+H5ePANV9PF6rE942VZc4u lIKUHdT1hydTN0qyZH8/DG5lQYzJoK3uBeh+QK4KHFirlL36My/yTc8LdYBb7eqh d6GBKfMO5tIAVPXN9lneGj5hTm0sLjtDjINMr0hxJdnbxal1UfKg9JUT7FCTFB0R 7yBBs1jEdQPstiov9bmG5IUTzDsyzsMHLG1YYbKC+NGIBeAWBKmDI+kThAg== Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g4qxj0a49-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 18 Aug 2026 14:05:56 +0000 (GMT) Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-51c1b4d961dso10572171cf.1 for ; Tue, 18 Aug 2026 07:05:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787061956; x=1787666756; darn=lists.libcamera.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=EQ1XZRbZGRyB3as4gr3aCKmf2sK+9RMxmTWtjPgyi3Q=; b=R12paK8HMDAfaRnsew0a01HYQmE0b0bhBxrGH8Wi6VoXWdvf6FqmruM3G9PNpy+7NX QY8PyWeqv8m85IYOPNdyRcMFte/QmMRqaCuaaHrZnN7Oa44wXj0RenUTZFds8VEJSkxi vMrh1JUXPLKlLUWvANhPcuwPAJtZ4Qps85aHSHzfZ8tsQZF26FxHusaVt0vMD+V68BWa h5MM4UkerQ4Y9VW4O85JRYKxiGHqrnbcWoUdPjodVb6PN79UOsxVSWwgvYGA+/dsMk7W 6zyEK/v/Lj4wjrgQAE5O35OXDi0zgRHOlG+WJQ2PkldDO+EHKvmxmANmKIePhmKsPR7M UuIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787061956; x=1787666756; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=EQ1XZRbZGRyB3as4gr3aCKmf2sK+9RMxmTWtjPgyi3Q=; b=aXz+64K7w6aS+1x1I7NKZ+h0XMpTr8gTFI6d7qPqY8QjI9T8Ftn/b/gvz2F7Z4LpuW 9romRFP5sRcKy4U/yHmOeeyISFPkEwXGuullhaUUCZ1pnaQ6dKud/iDEEiikdcxz6GY+ TMXI20noJtXDSMeCzdLLb4RbGarMKagG50Rlnl+VnStmNZz7SB4/qfBWgaI9Xkauj/Ar Rbpad5annKW1G0qmgbYew/NYigQ77pCaHVIBnciO+1vNfojBTozHI2AiHYcw2uW2BcAP umA0YZsfffPBT/bL2m/9btmztc1EdFJVpk8kg7B7mcpoPs93IszvcHkV+ApOhs793OQ6 WJ1g== X-Gm-Message-State: AOJu0YwBWHuIKYJ3PFALPu2K0Gyc7YgeG7nJllPichIVAo2/SEHa8fL+ D3x7rjIrz1sRkg1H/eai/QYdxpmYPsTNB5UnPSzYwWbAuPAfuUCNsAMRRrQ981oWYeIRPl/EKQi 0faG9XLC6K7Y+0gY4RKuiB8uPVj8OJbwalINJyA9fAZ+KsPo6ely6mV2EvCKwQT5qAT2EtPsCWT aLI9o28x3Z X-Gm-Gg: AR+sD11+ZeNebmtN/i+rH+AHDHly36ppRDGBeyvkrjiL0zcIE85VaoHsW0zCzVjEzTu YYD27Lnkeh6KPF/ikrSs8EZVtnRDrE02qwEQtGQCxzctFmsbTclMr3MzM6x+Lc+zXnXhx3bLfpZ fJEV64Er7KraNrOW0bHgMdmCD+t+VS6rMB+XuOhfK2Y2sNGKx0kjGClZrX4GVm2qmTGShDbSB0b TK3VRszB/mpTTOsXYISzfqhbs5GJYQ3DhdxCOtKri5uJl91crsLR8wvbKNUoaPFNvIzm9ao4esA fO3AlAXjTmQ1SyCijcPJNZZ4Lz2Xcq2xHwVxfSZlJ1K2L6Q1+C/8KbI4qhBP8/ugsyMr07iu9jr 6agXTDbbKX3P01ft2PR7AiBNLnCkcsCAf9qZzYk5SWJ5aek44Nq7JAqPUsrRmCBkMBRf24D92mn 2MWePYJmnQd9b0ME8= X-Received: by 2002:a05:622a:248e:b0:517:c65c:4987 with SMTP id d75a77b69052e-52dbee79e57mr76970421cf.22.1787061955572; Tue, 18 Aug 2026 07:05:55 -0700 (PDT) X-Received: by 2002:a05:622a:248e:b0:517:c65c:4987 with SMTP id d75a77b69052e-52dbee79e57mr76965171cf.22.1787061953793; Tue, 18 Aug 2026 07:05:53 -0700 (PDT) Received: from shalem (2001-1c00-0c32-7800-5bfa-a036-83f0-f9ec.cable.dynamic.v6.ziggo.nl. [2001:1c00:c32:7800:5bfa:a036:83f0:f9ec]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6a3d85a30b7sm1874967a12.30.2026.08.18.07.05.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 07:05:52 -0700 (PDT) From: Hans de Goede To: libcamera-devel@lists.libcamera.org Cc: Jacopo Mondi , =?utf-8?q?Niklas_S=C3=B6?= =?utf-8?q?derlund?= , Loic Poulain , Hans de Goede Subject: [PATCH v9 3/8] ipa: Allow pipelines to have differently named IPA Date: Tue, 18 Aug 2026 16:05:43 +0200 Message-ID: <20260818140548.179663-4-johannes.goede@oss.qualcomm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260818140548.179663-1-johannes.goede@oss.qualcomm.com> References: <20260818140548.179663-1-johannes.goede@oss.qualcomm.com> MIME-Version: 1.0 X-Proofpoint-Spam-Info: AW1haW4tMjYwODE4MDEwMyBTYWx0ZWRfX1U4nYHisUA/I GCBbNL2D4WwZ9Ha1DHKXE5Uy2TlPodazs9VOMG7ocQg0VcYwf0/3hUFnwAdfn5EZoMi/u4k6+yn 2TLUJBRo2esvVKR2jqRZ2h33NsRw8bw= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE4MDEwMyBTYWx0ZWRfX/K8mq7UlV8CD wee7o5SRClCNdiPORHKDKZxJq2n54JSxaNE01nfXoyP0Y9840/BQqWs5rMhJUbhP38A43llskSX JDMxtCMXaTB8/FA4sGHqIMGqwJPoyRjQsFOh29xH6fGUuOGeO7g58LHk5MeEpk7BDrmClsQK2Qp RzmuW6IUtmTMNX2kRxnq99lMLGQ2tbCSX2A16u/fTdeXwyO4xyA+oEsxqxtxIqT3TyVfBmUuz1Z bBO7g6dstO/dAFAy0H8jEzHnR28m2/TRbpSbMJEnsQ1eAF00Ey4K8VI1+Ts2Jf7pCB4Gj15MIVn ZE1OujFR0zNsdLf9KyKF0GeOuv7GxyNbOF/ka3XUEFr1PQosGpzhaKnW24xtwm6107RIPbVo7Nn h1xVage16G0phTuk1ymJX1mbE4Owd+YbRdXElxO6Y34XIw7pM+t6OdtpVyP2Gy6YULsboLri5PE UrQwpV5s3fB/oIsCqbQ== X-Proofpoint-ORIG-GUID: oR54lO9TIVKwkxF8_LS7riS-z-wPCtMv X-Proofpoint-GUID: oR54lO9TIVKwkxF8_LS7riS-z-wPCtMv X-Authority-Analysis: v=2.4 cv=bvB8wkai c=1 sm=1 tr=0 ts=6a8466c4 cx=c_pps a=JbAStetqSzwMeJznSMzCyw==:117 a=xqWC_Br6kY4A:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=YMgV9FUhrdKAYTUUvYB2:22 a=P1BnusSwAAAA:8 a=EUspDBNiAAAA:8 a=c6ydndUcIca2Pb-fbGsA:9 a=uxP6HrT_eTzRwkO_Te1X:22 a=D0XLA9XvdZm18NrgonBM:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293, Aquarius:18.0.1176, Hydra:6.1.134, FMLib:17.12.100.49 definitions=2026-08-18_02,2026-08-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 lowpriorityscore=0 spamscore=0 phishscore=0 malwarescore=0 clxscore=1015 impostorscore=0 priorityscore=1501 bulkscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608180103 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: Jacopo Mondi Right now the build system assumes a 1-to-1 matching between a pipeline handler name and an IPA module. This, as also acknowledged by a \todo comment, is quite a rigid requirement and only allows a 1-to-1 matching between pipeline and IPA names. The more platforms libcamera supports, the more it is likely that a pipeline handler could re-use an IPA module. This is particularly relevant for the softISP IPA module which could theoretically be plugged to any pipeline. When building IPAs, the build system iterates the list of enabled pipeline handlers and for each of them tries to verify if the 'ipas' list contains a corresponding entry for it. The 'ipas' meson options is an array option and, as no default value is specified for it, it contains by default all its possible choices. In this way if no value is specified for the 'ipas' option, compiling the pipeline handlers ['X','Y', 'Z'] will compile the ['X', 'Y', 'Z'] IPAs. If instead the user specifies '-Dipas=X' during the configuration then only IPA module ['X'] will be built, regardless of which pipeline is enabled. Building an IPA module will anyway require to build a corresponding pipeline with the same name. Relax the 1-to-1 'pipeline'-'IPA' naming requirement by introducing a dictionary that associates pipelines with IPA modules. For each enabled pipeline: 1) Make sure an IPA module exists for it 2) Make sure the IPA module is enabled by the 'ipas' option 3) Make sure the IPA is compiled once only This will require every new pipeline to add an entry to the dictionary and specify which IPA module they would like to use. Reviewed-by: Hans de Goede Signed-off-by: Jacopo Mondi Signed-off-by: Hans de Goede Reviewed-by: Barnabás Pőcze --- Changes in v7: - Drop R-Car Gen4 mention from commit message Changes in v3: - New patch in v3 of this patch-series --- src/ipa/meson.build | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/src/ipa/meson.build b/src/ipa/meson.build index eb7846e47..c583c7efd 100644 --- a/src/ipa/meson.build +++ b/src/ipa/meson.build @@ -24,6 +24,16 @@ subdir('libipa') ipa_sign = files('ipa-sign.sh') +supported_ipas = { + 'ipu3': 'ipu3', + 'mali-c55': 'mali-c55', + 'rkisp1': 'rkisp1', + 'rpi/pisp': 'rpi/pisp', + 'rpi/vc4': 'rpi/vc4', + 'simple': 'simple', + 'vimc': 'vimc' +} + ipa_modules = get_option('ipas') # Tests require the vimc IPA, similar to vimc pipline-handler for their @@ -39,24 +49,34 @@ ipa_names = [] subdirs = [] foreach pipeline : pipelines - # The current implementation expects the IPA module name to match the - # pipeline name. - # \todo Make the IPA naming scheme more flexible. - if not ipa_modules.contains(pipeline) + # Make sure an IPA exists for the pipeline + if not supported_ipas.has_key(pipeline) continue endif - enabled_ipa_names += pipeline + + ipa = supported_ipas.get(pipeline) + + # Only build IPAs specified with '-Dipas' + if not ipa_modules.contains(ipa) + continue + endif + + # If enabled already do not add it twice + if enabled_ipa_names.contains(ipa) + continue + endif + enabled_ipa_names += ipa # Allow multi-level directory structuring for the IPAs if needed. - pipeline = pipeline.split('/')[0] - if pipeline in subdirs + ipa = ipa.split('/')[0] + if ipa in subdirs continue endif - subdirs += pipeline - subdir(pipeline) + subdirs += ipa + subdir(ipa) - # Don't reuse the pipeline variable below, the subdirectory may have + # Don't reuse the ipa variable below, the subdirectory may have # overwritten it. endforeach From patchwork Tue Aug 18 14:05:44 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Hans de Goede X-Patchwork-Id: 27841 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 1E303C3334 for ; Tue, 18 Aug 2026 14:06:07 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 5895768305; Tue, 18 Aug 2026 16:06:06 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.b="HLWSoTf/"; dkim=pass (2048-bit key; unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="g05w3mge"; dkim-atps=neutral Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id DCE2A682EE for ; Tue, 18 Aug 2026 16:05:59 +0200 (CEST) Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67IE0Z8V2564176 for ; Tue, 18 Aug 2026 14:05:58 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= Dsi2Vw+XNd/RoJQJe3h88SfzJLuMAiqlvlVtYEPGWl8=; b=HLWSoTf/VPJjT0Qd dzi9h0HQkxPkRcPsJGK2P98FmhB3G9OCiZwk/i2JZq3O3vC6jeTe69h9ONR+NFUd brDRswHGe+zsJqkQ1X/FkmPH3H1u/Y5LKqWT1EHLyT7GkvNlHJNLh6jZ9GTTvbpf eE9yiSV+wxhwMa9HC9SfF1bg9JvF74pld5DwBYdETn0qG7s5wPDZxOimpC/yIbXv oOkGO1mMrs1rknf2cVfowX8AC1ov03q7AhYlP8hi9V1R97xJTAyZITNR+dLqEXPD y0wGasShxzOFvp5H+W6CiDPRoqon6nnjj2JSqywqYqtGjBO8lAZQ1KyN3z7ZGQJ9 EI+E3w== Received: from mail-vs1-f70.google.com (mail-vs1-f70.google.com [209.85.217.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g4frmtgkp-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 18 Aug 2026 14:05:57 +0000 (GMT) Received: by mail-vs1-f70.google.com with SMTP id ada2fe7eead31-77543522a77so29296137.2 for ; Tue, 18 Aug 2026 07:05:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787061957; x=1787666757; darn=lists.libcamera.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=Dsi2Vw+XNd/RoJQJe3h88SfzJLuMAiqlvlVtYEPGWl8=; b=g05w3mge5PVw69PPJYujrDmxo4T4AUfiveq5IcXUWV3o2gviRUxFmLMtEGS4vWPIx7 8zB4MP822FVfGQH2fdvaSiwYhkWKUw7at32L2hf9CrP0CiJV7eEQELririZsBYsLVhMh i+y56z5k62+1/Fm98esrr0gq32ECmXpAnKxwmYSzK6c0PCTb10XR9geKAO8d4WcEDbvc PpiV94Xz+J23L2ZAS07NYFc68nzqaELpQfRcJ8i8TQMeGtNilpbHWsbk3CfGmTttZJ3Y LDzsu8QaDyslavqAUHym3Z+WXhc8TRLrlZ1fevA1Lx9QbZ5Aqcwy7sxtvHVbElbYDq4i j3FA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787061957; x=1787666757; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Dsi2Vw+XNd/RoJQJe3h88SfzJLuMAiqlvlVtYEPGWl8=; b=TBNc/eb+TWoUOwKcLzkvzxmKPksXHGzIruqLaL1TZU7MDR+HdqTp07/aGWbV6Aqcv3 Rf1A7qhyGaD7hAgerTzDfnMghUFHP/wBybnii21ZMuUyGPhfQKFqZ142DhrH3GGu9ovr /J6+aNskDnsME7/K0xbOq61kFiFHQa/SKLHYDncrjNzaPR/pdIvwbS6G5n1eqdYabBGE 8rLODdpjvPP+oLIpFI1I3b8xHfFqkEO+n4OAIRneAx0z5IOniawMlHNM5HxPvOTw9Tom pN1SBfxcLw0Cl7kNLPkrAteoMpuwfsGYUSpIU5z9bZFxNDtZ5/lBE+7cZPxHvv32Z8nn vmMA== X-Gm-Message-State: AOJu0YwbwLcLrhnMo8KZknmfZFuapJr/D7frogjK4Eli63aInkGATx+l 3JMhy7iN1D0pEiQDFXUUbAUoht9EFmmc53zYhj+8Im/d1r5ZfHsTQTTl0unYaX/QPYCy2pm8WWJ FsUD2WRuiSN1S+4s/x+Oer/9ngEWfyJ5mcLbky/LXGTV0l+E65i9+7yZVhjZnZXGcFnVj6R9x+2 Q6jSs5w+y2 X-Gm-Gg: AR+sD12SX+kNfjm5uTpMzkbSfQjkqrFxNWJuYmRMeufO16OhV0P81DJyfIOvCm/6PQb 2ZZ0qe2HJuraoioPVuBPwpnAxhQUBDqGPkkEJccRN8AHdNUP267Xb00oni+jnUWVorWbkBFKKpO b3w+ec8n3quI9JlCge8Vvwb/XfK/S0WKPZKICgHY9N7bpLqoSnpHjRkrUhNJ4phye7+7pFfNjOJ h5aw8UAQKeUfnsCePnRl8RT0c46AxSjE8vJEaJHoCAidOyU69r9vFNVnWWe22lznI/NDQDecATv b3S4YCoFwIDYGirTCaaYZMOHc3wWRL9C651lf4ns1ptvWBYiojjyp/uW137eYfoOJU7y5h5LT4h XPFULdmMJ+EiVU2/AboETxOGeir/kaNffbl8tUHoxzpt0dOp8mvq+JwN6ovQblzfuf1CcMnVmb0 Go0z8G4+A+qJ2xwDg= X-Received: by 2002:a05:6102:148e:b0:738:472f:2cb1 with SMTP id ada2fe7eead31-76f2b9179b0mr5783446137.8.1787061956853; Tue, 18 Aug 2026 07:05:56 -0700 (PDT) X-Received: by 2002:a05:6102:148e:b0:738:472f:2cb1 with SMTP id ada2fe7eead31-76f2b9179b0mr5783415137.8.1787061956351; Tue, 18 Aug 2026 07:05:56 -0700 (PDT) Received: from shalem (2001-1c00-0c32-7800-5bfa-a036-83f0-f9ec.cable.dynamic.v6.ziggo.nl. [2001:1c00:c32:7800:5bfa:a036:83f0:f9ec]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6a3d85a30b7sm1874967a12.30.2026.08.18.07.05.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 07:05:55 -0700 (PDT) From: Hans de Goede To: libcamera-devel@lists.libcamera.org Cc: Jacopo Mondi , =?utf-8?q?Niklas_S=C3=B6?= =?utf-8?q?derlund?= , Loic Poulain , Hans de Goede , =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= Subject: [PATCH v9 4/8] pipeline: rpi: Explictly pass pipe()->name() when creating IPA Date: Tue, 18 Aug 2026 16:05:44 +0200 Message-ID: <20260818140548.179663-5-johannes.goede@oss.qualcomm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260818140548.179663-1-johannes.goede@oss.qualcomm.com> References: <20260818140548.179663-1-johannes.goede@oss.qualcomm.com> MIME-Version: 1.0 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE4MDEwMyBTYWx0ZWRfX3ZMv/+rh/jQh 1CrO85WDRRWmxX4pCOSwcRQIEXjCbjIJSKzt9ugAVBemUCRxonBjRScl1Ss2luAoSQu8yz6OlVF BHpxA4Hs2hIqR3Kfu5bP10OtYqv5RHivlg+URPiOjWEa8xV8SNoUo+mkufq7vJKc33kyjQ8vjo2 sUXnWI1CwNe3QkVrXMZAJcndXwRLLKWHJ7k+Z0mzzTSm5tPQ8xU8DYsynoDMIsnYg/EqT9TNmSh Hgkzc866wMNeJVBq8fCq9r3rNNlvuo5KN+5d7RQNL9xREI/X8C4v+UQ8ehbK37qBTcYDtpYYxoc 6u4CMUa2o2IIVNE1yhN8au0nH0EMBT/8FrSy/DIMHQNVemDn6K+zpLDc4iDWBsWEuTgO9z19WCI QOwWaSLJUXxeVky463ijwxqnTo0uRfHVGronXUuCYRXgohZJh7ydQh6xSp3EnWACyywGe2VQmGi szIP9fW2msiBm+897iA== X-Proofpoint-GUID: ZLdFXI5A7wkPmLaSk2aAOU2D7wbh0e7j X-Proofpoint-ORIG-GUID: ZLdFXI5A7wkPmLaSk2aAOU2D7wbh0e7j X-Authority-Analysis: v=2.4 cv=GtlyPE1C c=1 sm=1 tr=0 ts=6a8466c5 cx=c_pps a=N1BjEkVkxJi3uNfLdpvX3g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=P1BnusSwAAAA:8 a=EUspDBNiAAAA:8 a=PI23gj2s8gul_AyujO4A:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=crWF4MFLhNY0qMRaF8an:22 a=D0XLA9XvdZm18NrgonBM:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwODE4MDEwMyBTYWx0ZWRfX2SzkrOUEXjGX HaQQBVpQLge6bSKJ4V7xwxMuHo4hDaSeOrnGHlTwlRdYo+UQjTBIX6/v8FZpPTCFahW56iVHnPX 61AZLWf65gHHPseUAkElWWq6yhUuMLA= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293, Aquarius:18.0.1176, Hydra:6.1.134, FMLib:17.12.100.49 definitions=2026-08-18_02,2026-08-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 malwarescore=0 impostorscore=0 lowpriorityscore=0 phishscore=0 adultscore=0 bulkscore=0 clxscore=1015 spamscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608180103 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" Switch to explicitly specifying the pipeline-name as the name of the IPA to create. This is a preparation patch for switching the default IPA creation to matching IPA by IPA proxy type, which does not work for rpi because the same IPAProxyRPi type is used for both the rpi/vc4 and rpi/pisp pipeline handlers. Reviewed-by: Jacopo Mondi Reviewed-by: Barnabás Pőcze Signed-off-by: Hans de Goede --- Changes in v7: - Add a comment explaining why pipe()->name() is used when creating the IPA Changes in v6: - New patch in v6 of this patch-series --- src/libcamera/pipeline/rpi/common/pipeline_base.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/libcamera/pipeline/rpi/common/pipeline_base.cpp b/src/libcamera/pipeline/rpi/common/pipeline_base.cpp index 5a5acf6a1..802b2b3c7 100644 --- a/src/libcamera/pipeline/rpi/common/pipeline_base.cpp +++ b/src/libcamera/pipeline/rpi/common/pipeline_base.cpp @@ -1165,7 +1165,13 @@ int CameraData::loadIPA(ipa::RPi::InitResult *result) { int ret; - ipa_ = pipe()->createIPA(1, 1); + /* + * Explicitly pass pipe()->name() to select the IPA to create. + * The default behavior of creating the IPA by the IPA proxy type name + * does not work because the same IPAProxyRPi type is used for both + * the rpi/vc4 and rpi/pisp pipeline handlers. + */ + ipa_ = pipe()->createIPA(pipe()->name(), 1, 1); if (!ipa_) return -ENOENT; From patchwork Tue Aug 18 14:05:45 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Hans de Goede X-Patchwork-Id: 27842 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 81B8DC3335 for ; Tue, 18 Aug 2026 14:06:08 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id AF9106830A; Tue, 18 Aug 2026 16:06:07 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.b="YdnhD/NF"; dkim=pass (2048-bit key; unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Owty7Qkg"; dkim-atps=neutral Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 7EC14682F5 for ; Tue, 18 Aug 2026 16:06:01 +0200 (CEST) Received: from pps.filterd (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67IE0gfd572142 for ; Tue, 18 Aug 2026 14:05:59 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= MvtDlnTCbU10sf5gIRmjb6W/obZ7emCV/14p261HxMw=; b=YdnhD/NFrdx/jnl1 qSGOmGW66Jt+LJv8sF90nfUBIfqJ6wQHTKj7giQ2i8wy2iEnsp++UV/2VEs/djkU cdMNFqIBh8OGooRbF3q/HiT/UPvmsHJdi0ZlnnjfBmNeJ0RKY5PzowhJEIofE9wx vpao4ZERzeLoo/ITn8dthxTi0oMqN8/BDQY2wBlbgQNzncYtOtL2r+SZx4nt3isN 5GtcuI/EZGJdPuaGb0dWAs9xYTD4txNYUo8zYBS0bmvuJHp1x14Exh5gMCzlUbR1 bDGywM1nsjyX02mRmBb3Ygf7iBShw86o76dQhD1WNUkSaPI9qlvgci6G1ppkBEGD w7iuTw== Received: from mail-qk1-f197.google.com (mail-qk1-f197.google.com [209.85.222.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g4f5ptkh4-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 18 Aug 2026 14:05:59 +0000 (GMT) Received: by mail-qk1-f197.google.com with SMTP id af79cd13be357-936d067836eso500884785a.0 for ; Tue, 18 Aug 2026 07:05:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787061958; x=1787666758; darn=lists.libcamera.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=MvtDlnTCbU10sf5gIRmjb6W/obZ7emCV/14p261HxMw=; b=Owty7QkgL/+g2sFFl+a9o8ssLM30kmGoDl0UeJta5zEX3b8Ghmu/6pTLHktTbE7fyz inDJXSRffb6CvkDydSQikzTtxWZlF6/CEYKk8lRTYEk+zBlGTCW8iK2ikaX78NB3MtIw 0lIHMdWY2e3fbSupAT804MdAzxfTAPkxKEx2U9wjcplfNEPsq9Mm3jwxifjqmtFPwYcN VWULW8Bc5pM2JBsBaHh8dimXPqpfnDERmWNfe8K4FKqqkfI89hQeyHxN9UoDQNUcRbgH u5rUD0IFfkzIJ1jtHUIMBQi1aEwPsII3XQTPujj9eJAOqAQedXqNhDN/XU8HaGZBvCdv zuWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787061958; x=1787666758; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=MvtDlnTCbU10sf5gIRmjb6W/obZ7emCV/14p261HxMw=; b=rfAnIHqLgb/l6xO8bE6VTeOo/baMWXkjxp5pkg/C0JDoXVjShf7IrI/+kmc+vMQJhz Vw9gZQUENPj0aEYYHLz+E2qIYyRbvly3fg8mHkC2p3LhD6C/i1yMYj3st3VlraPpHnGh E7NH8gf8KKrjabSIPCuJpUhWHVz7BOGkkPE4+BSFL+Fo3+0GZLsB38Dycu7pF/iGEOU7 tbQiNKoD8NnJmpRNg8h8xyTjjH7vpEcKOd7XKjeYcn66DEjuhA9bQ01j4QpEkMIwDWns 4vpqcl7TzkaJiS3RskXQ38at2wB/wlTUPHME4eCGmYW9sZrVMydkRHnalVQehu/PYGt6 8bgg== X-Gm-Message-State: AOJu0YxiYttDCDphbGS4ppizb8m+KWfG6m02Xhj6/I05Kv+P22AJIG4N ZhJIJtcNQ7kqjfxDKcxh/xhIceYXFNhphWj4gWmu1WFvRKgqxg0ppt0CtIxJcii0OYmSfO+xvDB Xv2IVuy0C3JGzdkA4L6rSZcxtO7il2X4S1/Fa0Q/VABAMAOrpJ93OVEOscWju4sgQN7bPD1Uw5a bO3BYRXolq X-Gm-Gg: AR+sD10hq5E5HL8/yQd5+kJ9z0ZP/Ry6EIXBHtdHe4LfvCCigOfIz1M/c2EOuGeodyo qD8tuF1UGEDss9ZtrcJIQMfPTODZyxsfQPDeBU8SwKGrNeGGdt8vr0Zf67eVzYQE2mT8x3dXvOX NIxRrZvGoK4BTycTz/x7hEu0gKeAr4fgQBE4r5CodEY6Noldi2hsvCS8i/R0NtA451XlcUiTle1 J0XZcl/55gE9LvVPS9vtKN409Ctzhzo0b4cmQy7rJkz/DnoMXMgKRJR+Ql1VPWyUEjoLgcqpodH L4U9TfnRe+1yroqONskKMnm9DnU1i0CICulc5uQg0TttotuEG1fkfi4e3UMlUYNhsxT/rENBT6y zHo9VpqX3dueHM0d6R4WWhL0ssXO7p8prMcq9Q/MKODCriw9kFgpivggUG0zSlrsafX/8ITP+r2 RC4srupBsSSy9BuoY= X-Received: by 2002:a05:620a:2710:b0:92e:5fe2:fd35 with SMTP id af79cd13be357-936d2373319mr3509393285a.32.1787061958138; Tue, 18 Aug 2026 07:05:58 -0700 (PDT) X-Received: by 2002:a05:620a:2710:b0:92e:5fe2:fd35 with SMTP id af79cd13be357-936d2373319mr3509377685a.32.1787061957586; Tue, 18 Aug 2026 07:05:57 -0700 (PDT) Received: from shalem (2001-1c00-0c32-7800-5bfa-a036-83f0-f9ec.cable.dynamic.v6.ziggo.nl. [2001:1c00:c32:7800:5bfa:a036:83f0:f9ec]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6a3d85a30b7sm1874967a12.30.2026.08.18.07.05.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 07:05:56 -0700 (PDT) From: Hans de Goede To: libcamera-devel@lists.libcamera.org Cc: Jacopo Mondi , =?utf-8?q?Niklas_S=C3=B6?= =?utf-8?q?derlund?= , Loic Poulain , Hans de Goede , =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= Subject: [PATCH v9 5/8] libcamera: Create IPA by IPA proxy type name Date: Tue, 18 Aug 2026 16:05:45 +0200 Message-ID: <20260818140548.179663-6-johannes.goede@oss.qualcomm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260818140548.179663-1-johannes.goede@oss.qualcomm.com> References: <20260818140548.179663-1-johannes.goede@oss.qualcomm.com> MIME-Version: 1.0 X-Authority-Analysis: v=2.4 cv=S+/pBosP c=1 sm=1 tr=0 ts=6a8466c7 cx=c_pps a=50t2pK5VMbmlHzFWWp8p/g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=DJpcGTmdVt4CTyJn9g5Z:22 a=P1BnusSwAAAA:8 a=EUspDBNiAAAA:8 a=SXN59QJeJGJC3baiLVEA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=IoWCM6iH3mJn3m4BftBB:22 a=D0XLA9XvdZm18NrgonBM:22 X-Proofpoint-GUID: aOfxfT-DYf-If4y2mYtx1ALazQWSo3IU X-Proofpoint-ORIG-GUID: aOfxfT-DYf-If4y2mYtx1ALazQWSo3IU X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE4MDEwMyBTYWx0ZWRfX9yu3Xxl5+zes aE7qKGzL0fA6eunNvhbOogs+AOcAWa7Ys7iXr55GkAeYsknaJJgSz2fCuYKpR6pRBT1ucLVzu+5 yL3p+5VrHGFi2YFLLBwbVeV7Ng2Nph9oFXJH4+CL6gc9YyF12LHw12fhn3NuTcsTZWCXq/wfRjT Vc93cj1UHB60vKR+7Vrz4eNvAL0c4ABbQnN0PS8XRn7vQHizijrYE6Wp+eLsQHnQv/BvqxKifW8 XxDefJ3BYn8qCcdjvwn8xCrn2cfx+143ELzHAf4bLeeli7CWhFIs+NfhS3BkwBJxw6MRUzi7Chh GHiiHqWav1wJBM/RBaiIO29Akm6aaC6DF9b6lYPn0CcloYin8IXgBQckcupGCJsOaSHpKSk8enN A2a0oF5pHFVmJ5BFame0D+88hZW+RoLoZm1Ni1cbCR834GAdKLBwnI+xqt9YAeAXBHNHPeSYbnr 9netXkbHBzT1lyF4lkw== X-Proofpoint-Spam-Info: AW1haW4tMjYwODE4MDEwMyBTYWx0ZWRfXwY1Ztedcevyh elCBGSO/nnDDSCv2VQh5kcNOlPHjW5H4Wd4DAi3jXAK97UdRQu4bkUML40VAvNQvTsovW93S+ol h4L2p8HFwwQ2cxhaqIN6z4iq+xZG8Lw= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293, Aquarius:18.0.1176, Hydra:6.1.134, FMLib:17.12.100.49 definitions=2026-08-18_02,2026-08-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 phishscore=0 malwarescore=0 spamscore=0 lowpriorityscore=0 clxscore=1015 bulkscore=0 impostorscore=0 adultscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608180103 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" Currently createIPA() / IPAManager::module() assume that there is a 1:1 relationship between pipeline handlers and IPAs and IPA matching is done based on matching the pipe's name to ipaModuleInfo.name[]. This coupling between pipeline name and which IPA to create is undesirable and makes it impossible to for example use the softISP as a fallback in other pipeline handlers than the simple pipeline handler. The actual API contract between the IPA and the pipeline handler is given by the IPA proxy type. Add a static IPAProxyXXX::name() to the generated IPAProxyXXX classes and use this in PipelineHandler::createIPA() instead of using PipelineHandler::name(). This requires changing the name, as well as the subdirectory of the softISP IPA from "simple" to "softisp", which is the more sensible name anyway. Note: this means that softISP IPA config files will now be looked for under /usr/share/libcamera/ipa/softisp instead of /usr/share/libcamera/ipa/simple! Reviewed-by: Jacopo Mondi Reviewed-by: Barnabás Pőcze Signed-off-by: Hans de Goede --- Changes in v8: - Fix CI failure caused by extra trailing ';' Changes in v7: - Rename the softISP IPA from "simple" to "softisp" instead of "soft" - Mark PipelineHandler::createIPA() overload with an explicit IPA name argument as deprecated Changes in v6: - New patch in v6 of this patch-series --- Documentation/Doxyfile-internal.in | 2 +- include/libcamera/internal/pipeline_handler.h | 2 +- include/libcamera/internal/software_isp/software_isp.h | 4 ++-- include/libcamera/ipa/meson.build | 2 +- include/libcamera/ipa/{soft.mojom => softisp.mojom} | 0 meson_options.txt | 4 ++-- src/ipa/meson.build | 2 +- src/ipa/{simple => softisp}/algorithms/adjust.cpp | 0 src/ipa/{simple => softisp}/algorithms/adjust.h | 0 src/ipa/{simple => softisp}/algorithms/agc.cpp | 0 src/ipa/{simple => softisp}/algorithms/agc.h | 0 src/ipa/{simple => softisp}/algorithms/algorithm.h | 0 src/ipa/{simple => softisp}/algorithms/awb.cpp | 0 src/ipa/{simple => softisp}/algorithms/awb.h | 2 +- src/ipa/{simple => softisp}/algorithms/blc.cpp | 0 src/ipa/{simple => softisp}/algorithms/blc.h | 0 src/ipa/{simple => softisp}/algorithms/ccm.cpp | 0 src/ipa/{simple => softisp}/algorithms/ccm.h | 0 src/ipa/{simple => softisp}/algorithms/meson.build | 0 src/ipa/{simple => softisp}/data/meson.build | 2 +- src/ipa/{simple => softisp}/data/uncalibrated.yaml | 0 src/ipa/{simple => softisp}/ipa_context.cpp | 0 src/ipa/{simple => softisp}/ipa_context.h | 0 src/ipa/{simple => softisp}/meson.build | 0 src/ipa/{simple => softisp}/module.h | 2 +- src/ipa/{simple => softisp}/soft_simple.cpp | 4 ++-- src/libcamera/pipeline_handler.cpp | 8 +++++--- .../libcamera_templates/module_ipa_proxy.h.tmpl | 2 ++ 28 files changed, 20 insertions(+), 16 deletions(-) rename include/libcamera/ipa/{soft.mojom => softisp.mojom} (100%) rename src/ipa/{simple => softisp}/algorithms/adjust.cpp (100%) rename src/ipa/{simple => softisp}/algorithms/adjust.h (100%) rename src/ipa/{simple => softisp}/algorithms/agc.cpp (100%) rename src/ipa/{simple => softisp}/algorithms/agc.h (100%) rename src/ipa/{simple => softisp}/algorithms/algorithm.h (100%) rename src/ipa/{simple => softisp}/algorithms/awb.cpp (100%) rename src/ipa/{simple => softisp}/algorithms/awb.h (97%) rename src/ipa/{simple => softisp}/algorithms/blc.cpp (100%) rename src/ipa/{simple => softisp}/algorithms/blc.h (100%) rename src/ipa/{simple => softisp}/algorithms/ccm.cpp (100%) rename src/ipa/{simple => softisp}/algorithms/ccm.h (100%) rename src/ipa/{simple => softisp}/algorithms/meson.build (100%) rename src/ipa/{simple => softisp}/data/meson.build (79%) rename src/ipa/{simple => softisp}/data/uncalibrated.yaml (100%) rename src/ipa/{simple => softisp}/ipa_context.cpp (100%) rename src/ipa/{simple => softisp}/ipa_context.h (100%) rename src/ipa/{simple => softisp}/meson.build (100%) rename src/ipa/{simple => softisp}/module.h (91%) rename src/ipa/{simple => softisp}/soft_simple.cpp (99%) diff --git a/Documentation/Doxyfile-internal.in b/Documentation/Doxyfile-internal.in index b64b6a6fe..70b7e7ef1 100644 --- a/Documentation/Doxyfile-internal.in +++ b/Documentation/Doxyfile-internal.in @@ -28,7 +28,7 @@ EXCLUDE = @TOP_SRCDIR@/include/libcamera/base/span.h \ @TOP_SRCDIR@/src/libcamera/sensor/camera_sensor_raw.cpp \ @TOP_SRCDIR@/src/libcamera/tracepoints.cpp \ @TOP_BUILDDIR@/include/libcamera/internal/tracepoints.h \ - @TOP_BUILDDIR@/include/libcamera/ipa/soft_ipa_interface.h \ + @TOP_BUILDDIR@/include/libcamera/ipa/softisp_ipa_interface.h \ @TOP_BUILDDIR@/src/libcamera/proxy/ HTML_OUTPUT = internal-api diff --git a/include/libcamera/internal/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h index b60c07b13..2a2ba95a4 100644 --- a/include/libcamera/internal/pipeline_handler.h +++ b/include/libcamera/internal/pipeline_handler.h @@ -76,7 +76,7 @@ public: std::unique_ptr createIPA(uint32_t minVersion, uint32_t maxVersion) { IPAManager *ipaManager = manager_->_d()->ipaManager(); - return ipaManager->createIPA(name_, minVersion, maxVersion); + return ipaManager->createIPA(T::name(), minVersion, maxVersion); } template diff --git a/include/libcamera/internal/software_isp/software_isp.h b/include/libcamera/internal/software_isp/software_isp.h index 4f72dce9b..3205a2e14 100644 --- a/include/libcamera/internal/software_isp/software_isp.h +++ b/include/libcamera/internal/software_isp/software_isp.h @@ -25,8 +25,8 @@ #include #include -#include -#include +#include +#include #include "libcamera/internal/camera_sensor.h" #include "libcamera/internal/dma_buf_allocator.h" diff --git a/include/libcamera/ipa/meson.build b/include/libcamera/ipa/meson.build index 3ee3ada30..fb518526a 100644 --- a/include/libcamera/ipa/meson.build +++ b/include/libcamera/ipa/meson.build @@ -68,7 +68,7 @@ pipeline_ipa_mojom_mapping = { 'rkisp1': 'rkisp1.mojom', 'rpi/pisp': 'raspberrypi.mojom', 'rpi/vc4': 'raspberrypi.mojom', - 'simple': 'soft.mojom', + 'simple': 'softisp.mojom', 'vimc': 'vimc.mojom', } diff --git a/include/libcamera/ipa/soft.mojom b/include/libcamera/ipa/softisp.mojom similarity index 100% rename from include/libcamera/ipa/soft.mojom rename to include/libcamera/ipa/softisp.mojom diff --git a/meson_options.txt b/meson_options.txt index 20baacc4f..e829ebe60 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -48,8 +48,8 @@ option('gstreamer', option('ipas', type : 'array', - choices : ['ipu3', 'mali-c55', 'rkisp1', 'rpi/pisp', 'rpi/vc4', 'simple', - 'vimc'], + choices : ['ipu3', 'mali-c55', 'rkisp1', 'rpi/pisp', 'rpi/vc4', + 'softisp', 'vimc'], description : 'Select which IPA modules to build') option('lc-compliance', diff --git a/src/ipa/meson.build b/src/ipa/meson.build index c583c7efd..ab4a1897f 100644 --- a/src/ipa/meson.build +++ b/src/ipa/meson.build @@ -30,7 +30,7 @@ supported_ipas = { 'rkisp1': 'rkisp1', 'rpi/pisp': 'rpi/pisp', 'rpi/vc4': 'rpi/vc4', - 'simple': 'simple', + 'simple': 'softisp', 'vimc': 'vimc' } diff --git a/src/ipa/simple/algorithms/adjust.cpp b/src/ipa/softisp/algorithms/adjust.cpp similarity index 100% rename from src/ipa/simple/algorithms/adjust.cpp rename to src/ipa/softisp/algorithms/adjust.cpp diff --git a/src/ipa/simple/algorithms/adjust.h b/src/ipa/softisp/algorithms/adjust.h similarity index 100% rename from src/ipa/simple/algorithms/adjust.h rename to src/ipa/softisp/algorithms/adjust.h diff --git a/src/ipa/simple/algorithms/agc.cpp b/src/ipa/softisp/algorithms/agc.cpp similarity index 100% rename from src/ipa/simple/algorithms/agc.cpp rename to src/ipa/softisp/algorithms/agc.cpp diff --git a/src/ipa/simple/algorithms/agc.h b/src/ipa/softisp/algorithms/agc.h similarity index 100% rename from src/ipa/simple/algorithms/agc.h rename to src/ipa/softisp/algorithms/agc.h diff --git a/src/ipa/simple/algorithms/algorithm.h b/src/ipa/softisp/algorithms/algorithm.h similarity index 100% rename from src/ipa/simple/algorithms/algorithm.h rename to src/ipa/softisp/algorithms/algorithm.h diff --git a/src/ipa/simple/algorithms/awb.cpp b/src/ipa/softisp/algorithms/awb.cpp similarity index 100% rename from src/ipa/simple/algorithms/awb.cpp rename to src/ipa/softisp/algorithms/awb.cpp diff --git a/src/ipa/simple/algorithms/awb.h b/src/ipa/softisp/algorithms/awb.h similarity index 97% rename from src/ipa/simple/algorithms/awb.h rename to src/ipa/softisp/algorithms/awb.h index ff0a7a28e..59ab6fd79 100644 --- a/src/ipa/simple/algorithms/awb.h +++ b/src/ipa/softisp/algorithms/awb.h @@ -14,7 +14,7 @@ #include "libipa/awb.h" #include "libipa/fixedpoint.h" -#include "simple/ipa_context.h" +#include "softisp/ipa_context.h" #include "algorithm.h" diff --git a/src/ipa/simple/algorithms/blc.cpp b/src/ipa/softisp/algorithms/blc.cpp similarity index 100% rename from src/ipa/simple/algorithms/blc.cpp rename to src/ipa/softisp/algorithms/blc.cpp diff --git a/src/ipa/simple/algorithms/blc.h b/src/ipa/softisp/algorithms/blc.h similarity index 100% rename from src/ipa/simple/algorithms/blc.h rename to src/ipa/softisp/algorithms/blc.h diff --git a/src/ipa/simple/algorithms/ccm.cpp b/src/ipa/softisp/algorithms/ccm.cpp similarity index 100% rename from src/ipa/simple/algorithms/ccm.cpp rename to src/ipa/softisp/algorithms/ccm.cpp diff --git a/src/ipa/simple/algorithms/ccm.h b/src/ipa/softisp/algorithms/ccm.h similarity index 100% rename from src/ipa/simple/algorithms/ccm.h rename to src/ipa/softisp/algorithms/ccm.h diff --git a/src/ipa/simple/algorithms/meson.build b/src/ipa/softisp/algorithms/meson.build similarity index 100% rename from src/ipa/simple/algorithms/meson.build rename to src/ipa/softisp/algorithms/meson.build diff --git a/src/ipa/simple/data/meson.build b/src/ipa/softisp/data/meson.build similarity index 79% rename from src/ipa/simple/data/meson.build rename to src/ipa/softisp/data/meson.build index 92795ee4c..fd9aa0fab 100644 --- a/src/ipa/simple/data/meson.build +++ b/src/ipa/softisp/data/meson.build @@ -6,5 +6,5 @@ conf_files = files([ # The install_dir must match the name from the IPAModuleInfo install_data(conf_files, - install_dir : ipa_data_dir / 'simple', + install_dir : ipa_data_dir / 'softisp', install_tag : 'runtime') diff --git a/src/ipa/simple/data/uncalibrated.yaml b/src/ipa/softisp/data/uncalibrated.yaml similarity index 100% rename from src/ipa/simple/data/uncalibrated.yaml rename to src/ipa/softisp/data/uncalibrated.yaml diff --git a/src/ipa/simple/ipa_context.cpp b/src/ipa/softisp/ipa_context.cpp similarity index 100% rename from src/ipa/simple/ipa_context.cpp rename to src/ipa/softisp/ipa_context.cpp diff --git a/src/ipa/simple/ipa_context.h b/src/ipa/softisp/ipa_context.h similarity index 100% rename from src/ipa/simple/ipa_context.h rename to src/ipa/softisp/ipa_context.h diff --git a/src/ipa/simple/meson.build b/src/ipa/softisp/meson.build similarity index 100% rename from src/ipa/simple/meson.build rename to src/ipa/softisp/meson.build diff --git a/src/ipa/simple/module.h b/src/ipa/softisp/module.h similarity index 91% rename from src/ipa/simple/module.h rename to src/ipa/softisp/module.h index 8d4d53fb2..b5d99ba08 100644 --- a/src/ipa/simple/module.h +++ b/src/ipa/softisp/module.h @@ -9,7 +9,7 @@ #include -#include +#include #include "libcamera/internal/software_isp/debayer_params.h" #include "libcamera/internal/software_isp/swisp_stats.h" diff --git a/src/ipa/simple/soft_simple.cpp b/src/ipa/softisp/soft_simple.cpp similarity index 99% rename from src/ipa/simple/soft_simple.cpp rename to src/ipa/softisp/soft_simple.cpp index d4ab91e30..e84feeea7 100644 --- a/src/ipa/simple/soft_simple.cpp +++ b/src/ipa/softisp/soft_simple.cpp @@ -20,7 +20,7 @@ #include #include -#include +#include #include "libcamera/internal/software_isp/debayer_params.h" #include "libcamera/internal/software_isp/swisp_stats.h" @@ -342,7 +342,7 @@ extern "C" { const struct IPAModuleInfo ipaModuleInfo = { IPA_MODULE_API_VERSION, 0, - "simple", + "softisp", }; IPAInterface *ipaCreate() diff --git a/src/libcamera/pipeline_handler.cpp b/src/libcamera/pipeline_handler.cpp index 25fc11989..a803f6208 100644 --- a/src/libcamera/pipeline_handler.cpp +++ b/src/libcamera/pipeline_handler.cpp @@ -844,8 +844,10 @@ void PipelineHandler::disconnect() * * Create an IPA module using \a ipaName as the matching identifier. This * overload allows pipeline handlers to create an IPA module by specifying its - * name instead of relying on the fact that the IPA module matches the pipeline - * handler's one. + * name instead of relying on the fact that the IPA module matches the IPA + * proxy's type name. + * + * \deprecated This method is deprecated and *MUST* not be used in new code. * * \return A newly created IPA proxy, or nullptr if no matching IPA module is * found or if the IPA proxy fails to initialize @@ -858,7 +860,7 @@ void PipelineHandler::disconnect() * \param[in] minVersion Minimum acceptable version of IPA module * \param[in] maxVersion Maximum acceptable version of IPA module * - * Create an IPA module using the pipeline handler name as the matching + * Create an IPA module using the IPA proxy's type name as the matching * identifier. This overload allows pipeline handler to create an IPA module * whose name matches the pipeline handler one. * diff --git a/utils/codegen/ipc/generators/libcamera_templates/module_ipa_proxy.h.tmpl b/utils/codegen/ipc/generators/libcamera_templates/module_ipa_proxy.h.tmpl index d48b90dcf..259ed47c3 100644 --- a/utils/codegen/ipc/generators/libcamera_templates/module_ipa_proxy.h.tmpl +++ b/utils/codegen/ipc/generators/libcamera_templates/module_ipa_proxy.h.tmpl @@ -40,6 +40,8 @@ class {{proxy_name}}Isolated; class {{proxy_name}} : public IPAProxy, public {{interface_name}}, public Object { public: + static constexpr const char *name() { return "{{module_name}}"; } + using Threaded = {{proxy_name}}Threaded; using Isolated = {{proxy_name}}Isolated; From patchwork Tue Aug 18 14:05:46 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Hans de Goede X-Patchwork-Id: 27843 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 B9EC4C3336 for ; Tue, 18 Aug 2026 14:06:09 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 06DF768302; Tue, 18 Aug 2026 16:06:09 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.b="fGYx+mzY"; dkim=pass (2048-bit key; unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="URRbe2k4"; dkim-atps=neutral Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 9FBB9682E8 for ; Tue, 18 Aug 2026 16:06:02 +0200 (CEST) Received: from pps.filterd (m0279867.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67IE0q5o2564555 for ; Tue, 18 Aug 2026 14:06:01 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= fly3WdQF6GPyb4AgJxLSh/ugCawFwFt7NFiTxhMnd5w=; b=fGYx+mzYXs4MJ5lG bXqy4Rtue0CWZDUpdsIQMm8SACRmm5EnjuALM+BCCQGsXBGBmV0L1hGcO0X/Q6Vl eI7YUTS7kuY6M/MSVYp3iE3KNp/wcToGCMrTgLfXGT6J+NvSyjXb98t/m8zTKom0 SPeqzyy47P/Nfl5Wf2Sxi0phkwMLR+e/zukS3kfea3qGv1PkzPcMtqo1VR39ZBf1 75L2vxwoBvICKxHp7EQ3PPfY4x4mArfFkvCLJnx+RshV/kKHo+0sTYushiJHFNET myOdZYI7hi9KUyNV8IEUJirShK4YvKu36wGcHvIKWLjM9A0eGaXBSAMF/FY3m191 EgbHoQ== Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g4frmtgky-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 18 Aug 2026 14:06:00 +0000 (GMT) Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-936d067836eso500887485a.0 for ; Tue, 18 Aug 2026 07:06:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787061960; x=1787666760; darn=lists.libcamera.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=fly3WdQF6GPyb4AgJxLSh/ugCawFwFt7NFiTxhMnd5w=; b=URRbe2k4lpN1hOomtXTVS/MoFyEyLuzdRDPDXb/YIRNVn0TDLVv3zEA4PPB2riMJ6i Hoxm7EaWvcmjkBCZrR38meJoD5aL8PzRQYdMMhGn+SEr5nvKu7yiAw2EB//3/wc93eLB IFQVLfwBVcslPj14GqlFYcn6oZK3HL8wxOdxuQOoI7HLElUMFQZXJ8F1pyMD/W2sbJJK BdW/TG7b7KkizPSnBWfrWEUpGfNCu+nNkxXPDWvkLpoe0PeA2Nw3a3rZuyn6osuEARLD 6HRaPrFAwsTdwdytBJrqj0TQcwl0wJE/y/YPBipJo2zZX/PsE4aOWoHiNyg2pxoiv4AP ss0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787061960; x=1787666760; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=fly3WdQF6GPyb4AgJxLSh/ugCawFwFt7NFiTxhMnd5w=; b=UQdFLHkCZidzyA6e6CTNhTzqy9TE42c0Xy1ccyCUSVuedfweev4OSWg2bBQiVb+/cp sZSfdMJkSs3PacrtNxVsBDQ5O/oz4XGVtgr+h7xrRt/ar1zFmSEZrJ2in24DNrqP6gwg eCo+A0LPbws3pfv9HBJ1rWl0mVnoQWWUKb+HXIdLmIkFBgE0tpzjr9wh5cvJk9vV25ua skM7mccmkOP1O0VXSMoFf94/OOdIok8PunQ/DJF5qgoYNljYZNnpE7H1NNaM1um7lnOQ zeqKdSRFvcOmPjxKUqMdc3cqE4af/jIpB3YzK7+KJRoMNpZRu3reYthV+3DnLjbHug+t yxyw== X-Gm-Message-State: AOJu0YwbiqLQ8ciFeMXVkhGWKcEXbnNo8FKi+Cf4MgOdG662KZXOosxg eCyj7PBfm1Xvhqlvu7VY/yftI6F8Jsj8Bllu3OLiPfRCQrxK82iNeUmeMytKdmCtbpKOUkarNOS wPslI3/1K3pisI1rjKF9NCEF3krd0sfHiieEUlmifaotT3JsZp0bsXH4mwbug3Ms2nNskSrHzXy Ux8JW0vUyN X-Gm-Gg: AR+sD117KRZGwnPqCGroEmfuSF/4kw2JEtubh7jCb6XaluSPmNxMFzZzLShICE5Xf0r yRfrQ9o4ioftm6kmNUYNkq4iJfAfEURRNeU69UE3txn/EHWw5NVP9vmILWPsjeIe1F19ZEE8ZpA Hxq8NcdlIBB6A4zWfiQW5JmG4EkeqUkUZ460VeLDzSvZCU1esYVjTqIk8Bi0oS2jY6uoJn+FTeX idsKjP6WTqANxvlpFi9TwxZGUj7aTNadOqN+tZdRjRbyfcrZ3bHUoPzFK9bkbJhfQ7/G6XGcJoi 37Wav3TeQ5nIwhILri1F5oIn/CWBDHcjGl/Jm4W4FEgFbQvjGDWTqynpJJ+gKQlxSPz0kPkdUPg 57cYVTCZEXc8MeJDZoxBM26CJdpENuqTn3Ae0Km/kLoMs3dBJPnHF1Za3FZk03n4voeKx7FQa/7 ZGDZgP8cITO95WwC8= X-Received: by 2002:a05:620a:8812:b0:936:d2a2:5fe with SMTP id af79cd13be357-936d2a24ffemr3504874585a.6.1787061959430; Tue, 18 Aug 2026 07:05:59 -0700 (PDT) X-Received: by 2002:a05:620a:8812:b0:936:d2a2:5fe with SMTP id af79cd13be357-936d2a24ffemr3504856685a.6.1787061958769; Tue, 18 Aug 2026 07:05:58 -0700 (PDT) Received: from shalem (2001-1c00-0c32-7800-5bfa-a036-83f0-f9ec.cable.dynamic.v6.ziggo.nl. [2001:1c00:c32:7800:5bfa:a036:83f0:f9ec]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6a3d85a30b7sm1874967a12.30.2026.08.18.07.05.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 07:05:58 -0700 (PDT) From: Hans de Goede To: libcamera-devel@lists.libcamera.org Cc: Jacopo Mondi , =?utf-8?q?Niklas_S=C3=B6?= =?utf-8?q?derlund?= , Loic Poulain , Hans de Goede , =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= Subject: [PATCH v9 6/8] ipa: softisp: Rename IPASoftSimple to IPASoftIsp Date: Tue, 18 Aug 2026 16:05:46 +0200 Message-ID: <20260818140548.179663-7-johannes.goede@oss.qualcomm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260818140548.179663-1-johannes.goede@oss.qualcomm.com> References: <20260818140548.179663-1-johannes.goede@oss.qualcomm.com> MIME-Version: 1.0 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE4MDEwMyBTYWx0ZWRfX1chKYLMEbQY4 A95AdHfiQ8i8JRF/07JC+RfPj5Tutu0XptgQivslx/t2LEA7/1LTER94s0AJfP3P9uWvzvnidox p2PITRWya5R4AK7coVkIjXI1IqNjj86WXMMuQ/cXNI3WYS0qUywEV0GXijQERHj4ynnQjw/lBea 31ZNmphZs/oqUyblLdxdEzq2KJW+fI24EDaoywPFksbV8T+ZbQKC4LS/YmAmLIbQrkxMHFTCmjx ZE4GJTnG2t/J0DUGIOqNQzWJM21fWi+MaZsF/5ugYd1qAEBwk5bL0hBYLwWg/WFWiDOoIk7mpaF mJF3AJLlgeOUA32C46vt1Yq/k44r5JBt0CVhrBnr9W5IB4cS5zSnSz6QT2Cpg/pO/0Ed/aL2LQF Vcw9blM4vABCnB59OyiADg8H3JeXUFwpTM/S1M91TDlfnoXGx9hV0kWtBsL/9k+nm4hKjY3JjK3 hwHxEIqc0wIIci+XWmg== X-Proofpoint-GUID: THPqi1h8P6anagwL20DPbCoVllBeCHIa X-Proofpoint-ORIG-GUID: THPqi1h8P6anagwL20DPbCoVllBeCHIa X-Authority-Analysis: v=2.4 cv=GtlyPE1C c=1 sm=1 tr=0 ts=6a8466c8 cx=c_pps a=HLyN3IcIa5EE8TELMZ618Q==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=eoimf2acIAo5FJnRuUoq:22 a=P1BnusSwAAAA:8 a=EUspDBNiAAAA:8 a=ITOby1vZJKKE0CwQNbMA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=bTQJ7kPSJx9SKPbeHEYW:22 a=D0XLA9XvdZm18NrgonBM:22 X-Proofpoint-Spam-Info: AW1haW4tMjYwODE4MDEwMyBTYWx0ZWRfX1NUx4ysrct+O leJATB+PiGGs1ChyV/7zqQ3gcitIoXwLjxFVdTmEH7cXPJnlz/bt+rTYp4Ot6vDKF7eE74SpAxO XK2WhTGxmbxVr4FdPmcgtbmTmkEawr8= X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293, Aquarius:18.0.1176, Hydra:6.1.134, FMLib:17.12.100.49 definitions=2026-08-18_02,2026-08-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 malwarescore=0 impostorscore=0 lowpriorityscore=0 phishscore=0 adultscore=0 bulkscore=0 clxscore=1015 spamscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608180103 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 simple_soft IPA is the IPA for the software ISP and the software ISP may be plugged into any pipeline, drop the Simple part from the class names and replace Soft with SoftIsp. Also rename the IPA.so file from soft_simple to softisp. Reviewed-by: Jacopo Mondi Reviewed-by: Barnabás Pőcze Signed-off-by: Hans de Goede --- Changes in v7: - New patch in v7 of this patch-series --- .../internal/software_isp/software_isp.h | 2 +- include/libcamera/ipa/softisp.mojom | 4 +- src/ipa/softisp/algorithms/adjust.cpp | 8 +- src/ipa/softisp/algorithms/agc.cpp | 8 +- src/ipa/softisp/algorithms/awb.cpp | 16 ++-- src/ipa/softisp/algorithms/awb.h | 6 +- src/ipa/softisp/algorithms/blc.cpp | 6 +- src/ipa/softisp/algorithms/ccm.cpp | 2 +- src/ipa/softisp/algorithms/meson.build | 2 +- src/ipa/softisp/ipa_context.h | 2 +- src/ipa/softisp/meson.build | 10 +-- .../softisp/{soft_simple.cpp => softisp.cpp} | 74 +++++++++---------- src/libcamera/software_isp/software_isp.cpp | 2 +- 13 files changed, 71 insertions(+), 71 deletions(-) rename src/ipa/softisp/{soft_simple.cpp => softisp.cpp} (83%) diff --git a/include/libcamera/internal/software_isp/software_isp.h b/include/libcamera/internal/software_isp/software_isp.h index 3205a2e14..2363a91c8 100644 --- a/include/libcamera/internal/software_isp/software_isp.h +++ b/include/libcamera/internal/software_isp/software_isp.h @@ -101,7 +101,7 @@ private: DmaBufAllocator dmaHeap_; bool ccmEnabled_; - std::unique_ptr ipa_; + std::unique_ptr ipa_; std::deque queuedInputBuffers_; std::deque queuedOutputBuffers_; }; diff --git a/include/libcamera/ipa/softisp.mojom b/include/libcamera/ipa/softisp.mojom index 77328c5fd..66cf311b3 100644 --- a/include/libcamera/ipa/softisp.mojom +++ b/include/libcamera/ipa/softisp.mojom @@ -12,7 +12,7 @@ struct IPAConfigInfo { libcamera.ControlInfoMap sensorControls; }; -interface IPASoftInterface { +interface IPASoftIspInterface { init(libcamera.IPASettings settings, libcamera.SharedFD fdStats, libcamera.SharedFD fdParams, @@ -31,7 +31,7 @@ interface IPASoftInterface { libcamera.ControlList sensorControls); }; -interface IPASoftEventInterface { +interface IPASoftIspEventInterface { setSensorControls(libcamera.ControlList sensorControls); setIspParams(); metadataReady(uint32 frame, libcamera.ControlList metadata); diff --git a/src/ipa/softisp/algorithms/adjust.cpp b/src/ipa/softisp/algorithms/adjust.cpp index 8bf39c4c8..52eb81d76 100644 --- a/src/ipa/softisp/algorithms/adjust.cpp +++ b/src/ipa/softisp/algorithms/adjust.cpp @@ -22,7 +22,7 @@ namespace ipa::soft::algorithms { constexpr float kDefaultContrast = 1.0f; constexpr float kDefaultSaturation = 1.0f; -LOG_DEFINE_CATEGORY(IPASoftAdjust) +LOG_DEFINE_CATEGORY(IPASoftIspAdjust) int Adjust::init(IPAContext &context, [[maybe_unused]] const ValueNode &tuningData) { @@ -54,19 +54,19 @@ void Adjust::queueRequest(typename Module::Context &context, const auto &gamma = controls.get(controls::Gamma); if (gamma.has_value()) { context.activeState.knobs.gamma = gamma.value(); - LOG(IPASoftAdjust, Debug) << "Setting gamma to " << gamma.value(); + LOG(IPASoftIspAdjust, Debug) << "Setting gamma to " << gamma.value(); } const auto &contrast = controls.get(controls::Contrast); if (contrast.has_value()) { context.activeState.knobs.contrast = contrast; - LOG(IPASoftAdjust, Debug) << "Setting contrast to " << contrast.value(); + LOG(IPASoftIspAdjust, Debug) << "Setting contrast to " << contrast.value(); } const auto &saturation = controls.get(controls::Saturation); if (saturation.has_value()) { context.activeState.knobs.saturation = saturation; - LOG(IPASoftAdjust, Debug) << "Setting saturation to " << saturation.value(); + LOG(IPASoftIspAdjust, Debug) << "Setting saturation to " << saturation.value(); } } diff --git a/src/ipa/softisp/algorithms/agc.cpp b/src/ipa/softisp/algorithms/agc.cpp index a13a75528..72f000628 100644 --- a/src/ipa/softisp/algorithms/agc.cpp +++ b/src/ipa/softisp/algorithms/agc.cpp @@ -17,7 +17,7 @@ namespace libcamera { -LOG_DEFINE_CATEGORY(IPASoftExposure) +LOG_DEFINE_CATEGORY(IPASoftIspExposure) namespace ipa::soft::algorithms { @@ -118,7 +118,7 @@ void Agc::updateExposure(IPAContext &context, IPAFrameContext &frameContext, dou context.activeState.agc.exposure = exposure; context.activeState.agc.again = again; - LOG(IPASoftExposure, Debug) + LOG(IPASoftIspExposure, Debug) << "exposureMSV " << exposureMSV << " error " << error << " factor " << factor << " exp " << exposure << " again " << again; @@ -172,7 +172,7 @@ void Agc::process(IPAContext &context, unsigned int num = 0; if (yHistValsPerBin == 0) { - LOG(IPASoftExposure, Debug) + LOG(IPASoftIspExposure, Debug) << "Not adjusting exposure due to insufficient histogram data"; return; } @@ -183,7 +183,7 @@ void Agc::process(IPAContext &context, } for (unsigned int i = 0; i < kExposureBinsCount; i++) { - LOG(IPASoftExposure, Debug) << i << ": " << exposureBins[i]; + LOG(IPASoftIspExposure, Debug) << i << ": " << exposureBins[i]; denom += exposureBins[i]; num += exposureBins[i] * (i + 1); } diff --git a/src/ipa/softisp/algorithms/awb.cpp b/src/ipa/softisp/algorithms/awb.cpp index 0bd6b66ce..84f01b832 100644 --- a/src/ipa/softisp/algorithms/awb.cpp +++ b/src/ipa/softisp/algorithms/awb.cpp @@ -16,7 +16,7 @@ namespace libcamera { -LOG_DEFINE_CATEGORY(IPASoftAwb) +LOG_DEFINE_CATEGORY(IPASoftIspAwb) namespace ipa::soft::algorithms { @@ -25,12 +25,12 @@ namespace ipa::soft::algorithms { */ static constexpr unsigned int kDefaultLux = 500; -class SimpleAwbStats final : public AwbStats +class SoftIspAwbStats final : public AwbStats { public: - SimpleAwbStats() = default; + SoftIspAwbStats() = default; - SimpleAwbStats(const RGB &rgbMeans) + SoftIspAwbStats(const RGB &rgbMeans) { rgbMeans_ = rgbMeans; @@ -112,8 +112,8 @@ void Awb::prepare(IPAContext &context, params->gains = frameContext.awb.gains; } -SimpleAwbStats Awb::calculateRgbMeans(IPAContext &context, - const SwIspStats *stats) const +SoftIspAwbStats Awb::calculateRgbMeans(IPAContext &context, + const SwIspStats *stats) const { if (!stats->valid) return {}; @@ -141,7 +141,7 @@ SimpleAwbStats Awb::calculateRgbMeans(IPAContext &context, static_cast(sum.g()) / nPixels, static_cast(sum.b()) / nPixels } }; - return SimpleAwbStats(rgbMeans); + return SoftIspAwbStats(rgbMeans); } /** @@ -151,7 +151,7 @@ void Awb::process(IPAContext &context, [[maybe_unused]] const uint32_t frame, IPAFrameContext &frameContext, const SwIspStats *stats, ControlList &metadata) { - SimpleAwbStats awbStats = calculateRgbMeans(context, stats); + SoftIspAwbStats awbStats = calculateRgbMeans(context, stats); awbAlgo_.process(context.activeState.awb, frameContext.awb, awbStats, kDefaultLux, metadata); diff --git a/src/ipa/softisp/algorithms/awb.h b/src/ipa/softisp/algorithms/awb.h index 59ab6fd79..37893932b 100644 --- a/src/ipa/softisp/algorithms/awb.h +++ b/src/ipa/softisp/algorithms/awb.h @@ -22,7 +22,7 @@ namespace libcamera { namespace ipa::soft::algorithms { -class SimpleAwbStats; +class SoftIspAwbStats; class Awb : public Algorithm { @@ -48,8 +48,8 @@ public: ControlList &metadata) override; private: - SimpleAwbStats calculateRgbMeans(IPAContext &context, - const SwIspStats *stats) const; + SoftIspAwbStats calculateRgbMeans(IPAContext &context, + const SwIspStats *stats) const; /* * There actually is no Q register format for SoftISP, but allow the diff --git a/src/ipa/softisp/algorithms/blc.cpp b/src/ipa/softisp/algorithms/blc.cpp index e45a913cd..fca76f442 100644 --- a/src/ipa/softisp/algorithms/blc.cpp +++ b/src/ipa/softisp/algorithms/blc.cpp @@ -17,7 +17,7 @@ namespace libcamera { namespace ipa::soft::algorithms { -LOG_DEFINE_CATEGORY(IPASoftBL) +LOG_DEFINE_CATEGORY(IPASoftIspBL) BlackLevel::BlackLevel() { @@ -90,7 +90,7 @@ void BlackLevel::process(IPAContext &context, const unsigned int total = std::accumulate(begin(histogram), end(histogram), 0); if (total == 0) { - LOG(IPASoftBL, Debug) << "Not guessing black level, histogram is empty"; + LOG(IPASoftIspBL, Debug) << "Not guessing black level, histogram is empty"; return; } @@ -107,7 +107,7 @@ void BlackLevel::process(IPAContext &context, context.activeState.blc.level = i * histogramRatio; context.activeState.blc.lastExposure = frameContext.sensor.exposure; context.activeState.blc.lastGain = frameContext.sensor.gain; - LOG(IPASoftBL, Debug) + LOG(IPASoftIspBL, Debug) << "Auto-set black level: " << i << "/" << SwIspStats::kYHistogramSize << " (" << 100 * (seen - histogram[i]) / total << "% below, " diff --git a/src/ipa/softisp/algorithms/ccm.cpp b/src/ipa/softisp/algorithms/ccm.cpp index 8b6da543a..58e17bbeb 100644 --- a/src/ipa/softisp/algorithms/ccm.cpp +++ b/src/ipa/softisp/algorithms/ccm.cpp @@ -14,7 +14,7 @@ namespace libcamera { namespace ipa::soft::algorithms { -LOG_DEFINE_CATEGORY(IPASoftCcm) +LOG_DEFINE_CATEGORY(IPASoftIspCcm) /** * \copydoc libcamera::ipa::Algorithm::init diff --git a/src/ipa/softisp/algorithms/meson.build b/src/ipa/softisp/algorithms/meson.build index 73c637220..d240409e5 100644 --- a/src/ipa/softisp/algorithms/meson.build +++ b/src/ipa/softisp/algorithms/meson.build @@ -1,6 +1,6 @@ # SPDX-License-Identifier: CC0-1.0 -soft_simple_ipa_algorithms = files([ +softisp_ipa_algorithms = files([ 'adjust.cpp', 'awb.cpp', 'agc.cpp', diff --git a/src/ipa/softisp/ipa_context.h b/src/ipa/softisp/ipa_context.h index ff312ae8f..bccf95775 100644 --- a/src/ipa/softisp/ipa_context.h +++ b/src/ipa/softisp/ipa_context.h @@ -2,7 +2,7 @@ /* * Copyright (C) 2024-2026 Red Hat, Inc. * - * Simple pipeline IPA Context + * Software ISP IPA Context */ #pragma once diff --git a/src/ipa/softisp/meson.build b/src/ipa/softisp/meson.build index 2f9f15f4a..755b7eaab 100644 --- a/src/ipa/softisp/meson.build +++ b/src/ipa/softisp/meson.build @@ -3,16 +3,16 @@ subdir('algorithms') subdir('data') -ipa_name = 'ipa_soft_simple' +ipa_name = 'ipa_softisp' -soft_simple_sources = files([ +softisp_sources = files([ 'ipa_context.cpp', - 'soft_simple.cpp', + 'softisp.cpp', ]) -soft_simple_sources += soft_simple_ipa_algorithms +softisp_sources += softisp_ipa_algorithms -mod = shared_module(ipa_name, soft_simple_sources, +mod = shared_module(ipa_name, softisp_sources, name_prefix : '', include_directories : [ipa_includes], dependencies : [libcamera_private, libipa_dep], diff --git a/src/ipa/softisp/soft_simple.cpp b/src/ipa/softisp/softisp.cpp similarity index 83% rename from src/ipa/softisp/soft_simple.cpp rename to src/ipa/softisp/softisp.cpp index e84feeea7..111325d7d 100644 --- a/src/ipa/softisp/soft_simple.cpp +++ b/src/ipa/softisp/softisp.cpp @@ -2,7 +2,7 @@ /* * Copyright (C) 2023, Linaro Ltd * - * Simple Software Image Processing Algorithm module + * Software ISP Image Processing Algorithm module */ #include @@ -32,7 +32,7 @@ #include "module.h" namespace libcamera { -LOG_DEFINE_CATEGORY(IPASoft) +LOG_DEFINE_CATEGORY(IPASoftIsp) using namespace std::literals::chrono_literals; @@ -41,15 +41,15 @@ namespace ipa::soft { /* Maximum number of frame contexts to be held */ static constexpr uint32_t kMaxFrameContexts = 16; -class IPASoftSimple : public ipa::soft::IPASoftInterface, public Module +class IPASoftIsp : public ipa::soft::IPASoftIspInterface, public Module { public: - IPASoftSimple() + IPASoftIsp() : context_(kMaxFrameContexts) { } - ~IPASoftSimple(); + ~IPASoftIsp(); int init(const IPASettings &settings, const SharedFD &fdStats, @@ -83,7 +83,7 @@ private: struct IPAContext context_; }; -IPASoftSimple::~IPASoftSimple() +IPASoftIsp::~IPASoftIsp() { if (stats_) munmap(stats_, sizeof(SwIspStats)); @@ -91,17 +91,17 @@ IPASoftSimple::~IPASoftSimple() munmap(params_, sizeof(DebayerParams)); } -int IPASoftSimple::init(const IPASettings &settings, - const SharedFD &fdStats, - const SharedFD &fdParams, - const IPACameraSensorInfo &sensorInfo, - const ControlInfoMap &sensorControls, - ControlInfoMap *ipaControls, - bool *ccmEnabled) +int IPASoftIsp::init(const IPASettings &settings, + const SharedFD &fdStats, + const SharedFD &fdParams, + const IPACameraSensorInfo &sensorInfo, + const ControlInfoMap &sensorControls, + ControlInfoMap *ipaControls, + bool *ccmEnabled) { camHelper_ = CameraSensorHelperFactoryBase::create(settings.sensorModel); if (!camHelper_) { - LOG(IPASoft, Warning) + LOG(IPASoftIsp, Warning) << "Failed to create camera sensor helper for " << settings.sensorModel; } @@ -112,7 +112,7 @@ int IPASoftSimple::init(const IPASettings &settings, File file(settings.configurationFile); if (!file.open(File::OpenModeFlag::ReadOnly)) { int ret = file.error(); - LOG(IPASoft, Error) + LOG(IPASoftIsp, Error) << "Failed to open configuration file " << settings.configurationFile << ": " << strerror(-ret); return ret; @@ -124,10 +124,10 @@ int IPASoftSimple::init(const IPASettings &settings, /* \todo Use the IPA configuration file for real. */ unsigned int version = (*data)["version"].get(0); - LOG(IPASoft, Debug) << "Tuning file version " << version; + LOG(IPASoftIsp, Debug) << "Tuning file version " << version; if (!data->contains("algorithms")) { - LOG(IPASoft, Error) << "Tuning file doesn't contain algorithms"; + LOG(IPASoftIsp, Error) << "Tuning file doesn't contain algorithms"; return -EINVAL; } @@ -141,12 +141,12 @@ int IPASoftSimple::init(const IPASettings &settings, stats_ = nullptr; if (!fdStats.isValid()) { - LOG(IPASoft, Error) << "Invalid Statistics handle"; + LOG(IPASoftIsp, Error) << "Invalid Statistics handle"; return -ENODEV; } if (!fdParams.isValid()) { - LOG(IPASoft, Error) << "Invalid Parameters handle"; + LOG(IPASoftIsp, Error) << "Invalid Parameters handle"; return -ENODEV; } @@ -154,7 +154,7 @@ int IPASoftSimple::init(const IPASettings &settings, void *mem = mmap(nullptr, sizeof(DebayerParams), PROT_WRITE, MAP_SHARED, fdParams.get(), 0); if (mem == MAP_FAILED) { - LOG(IPASoft, Error) << "Unable to map Parameters"; + LOG(IPASoftIsp, Error) << "Unable to map Parameters"; return -errno; } @@ -170,7 +170,7 @@ int IPASoftSimple::init(const IPASettings &settings, void *mem = mmap(nullptr, sizeof(SwIspStats), PROT_READ, MAP_SHARED, fdStats.get(), 0); if (mem == MAP_FAILED) { - LOG(IPASoft, Error) << "Unable to map Statistics"; + LOG(IPASoftIsp, Error) << "Unable to map Statistics"; return -errno; } @@ -187,19 +187,19 @@ int IPASoftSimple::init(const IPASettings &settings, * for V4L2_CID_EXPOSURE depend on the configured sensor resolution. */ if (sensorControls.find(V4L2_CID_EXPOSURE) == sensorControls.end()) { - LOG(IPASoft, Error) << "Don't have exposure control"; + LOG(IPASoftIsp, Error) << "Don't have exposure control"; return -EINVAL; } if (sensorControls.find(V4L2_CID_ANALOGUE_GAIN) == sensorControls.end()) { - LOG(IPASoft, Error) << "Don't have gain control"; + LOG(IPASoftIsp, Error) << "Don't have gain control"; return -EINVAL; } return 0; } -int IPASoftSimple::configure(const IPAConfigInfo &configInfo) +int IPASoftIsp::configure(const IPAConfigInfo &configInfo) { sensorInfoMap_ = configInfo.sensorControls; @@ -216,7 +216,7 @@ int IPASoftSimple::configure(const IPAConfigInfo &configInfo) context_.configuration.agc.exposureMin = exposureInfo.min().get(); context_.configuration.agc.exposureMax = exposureInfo.max().get(); if (!context_.configuration.agc.exposureMin) { - LOG(IPASoft, Warning) << "Minimum exposure is zero, that can't be linear"; + LOG(IPASoftIsp, Warning) << "Minimum exposure is zero, that can't be linear"; context_.configuration.agc.exposureMin = 1; } @@ -255,7 +255,7 @@ int IPASoftSimple::configure(const IPAConfigInfo &configInfo) return ret; } - LOG(IPASoft, Info) + LOG(IPASoftIsp, Info) << "Exposure " << context_.configuration.agc.exposureMin << "-" << context_.configuration.agc.exposureMax << ", gain " << context_.configuration.agc.againMin << "-" @@ -265,17 +265,17 @@ int IPASoftSimple::configure(const IPAConfigInfo &configInfo) return 0; } -int IPASoftSimple::start() +int IPASoftIsp::start() { return 0; } -void IPASoftSimple::stop() +void IPASoftIsp::stop() { context_.frameContexts.clear(); } -void IPASoftSimple::queueRequest(const uint32_t frame, const ControlList &controls) +void IPASoftIsp::queueRequest(const uint32_t frame, const ControlList &controls) { IPAFrameContext &frameContext = context_.frameContexts.alloc(frame); @@ -283,7 +283,7 @@ void IPASoftSimple::queueRequest(const uint32_t frame, const ControlList &contro algo->queueRequest(context_, frame, frameContext, controls); } -void IPASoftSimple::computeParams(const uint32_t frame) +void IPASoftIsp::computeParams(const uint32_t frame) { context_.activeState.combinedMatrix = Matrix::identity(); @@ -295,9 +295,9 @@ void IPASoftSimple::computeParams(const uint32_t frame) setIspParams.emit(); } -void IPASoftSimple::processStats(const uint32_t frame, - [[maybe_unused]] const uint32_t bufferId, - const ControlList &sensorControls) +void IPASoftIsp::processStats(const uint32_t frame, + [[maybe_unused]] const uint32_t bufferId, + const ControlList &sensorControls) { IPAFrameContext &frameContext = context_.frameContexts.get(frame); @@ -314,7 +314,7 @@ void IPASoftSimple::processStats(const uint32_t frame, /* Sanity check */ if (!sensorControls.contains(V4L2_CID_EXPOSURE) || !sensorControls.contains(V4L2_CID_ANALOGUE_GAIN)) { - LOG(IPASoft, Error) << "Control(s) missing"; + LOG(IPASoftIsp, Error) << "Control(s) missing"; return; } @@ -328,9 +328,9 @@ void IPASoftSimple::processStats(const uint32_t frame, setSensorControls.emit(ctrls); } -std::string IPASoftSimple::logPrefix() const +std::string IPASoftIsp::logPrefix() const { - return "IPASoft"; + return "IPASoftIsp"; } } /* namespace ipa::soft */ @@ -347,7 +347,7 @@ const struct IPAModuleInfo ipaModuleInfo = { IPAInterface *ipaCreate() { - return new ipa::soft::IPASoftSimple(); + return new ipa::soft::IPASoftIsp(); } } /* extern "C" */ diff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp index c7165771c..d1fe02a2e 100644 --- a/src/libcamera/software_isp/software_isp.cpp +++ b/src/libcamera/software_isp/software_isp.cpp @@ -136,7 +136,7 @@ SoftwareIsp::SoftwareIsp(PipelineHandler *pipe, const CameraSensor *sensor, debayer_->inputBufferReady.connect(this, &SoftwareIsp::inputReady); debayer_->outputBufferReady.connect(this, &SoftwareIsp::outputReady); - ipa_ = pipe->createIPA(0, 0); + ipa_ = pipe->createIPA(0, 0); if (!ipa_) { LOG(SoftwareIsp, Error) << "Creating IPA for software ISP failed"; From patchwork Tue Aug 18 14:05:47 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Hans de Goede X-Patchwork-Id: 27844 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 52E85C3338 for ; Tue, 18 Aug 2026 14:06:11 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 7B3FE68305; Tue, 18 Aug 2026 16:06:10 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.b="IUbRXLvq"; dkim=pass (2048-bit key; unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="Ju/ZuoCe"; dkim-atps=neutral Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 2DDC668305 for ; Tue, 18 Aug 2026 16:06:04 +0200 (CEST) Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67IE0mjg292879 for ; Tue, 18 Aug 2026 14:06:02 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= JJW5ojuOXBE2OX7wazqLPTyUetrSIGmVm152XimyfME=; b=IUbRXLvq0IPjgZ5u IVo3UBAbGKTLfUWrZdnJ+XHVrBNVMNk7VE1gTRFYM/PurelgCrWIfkEYZnJJAKFv Ka1PqPCVKkGUI7oRH4lQytMVycXEsIl+oJNvg2sCuOPdXCg6I/+1eHE73MBqfxWJ iIy83xIOsJyWpUlZI5HZ4NPPSf/t3rGyjFSMuVAkuTAkGxs7Z1zrSFKrnTSwNUDs 0tFO6ceAf0SLPc8hpbQidvg1WRVfkEugP2mYPjagw0ahPBhpuVk/jZRAADwDHpvj wWJ4+j3RI4myaSSRL8ESBSmBzSeivik9QnQLlzR+R0nMLg1HaaEjQzlPkitDY7Ij 3xobsQ== Received: from mail-qt1-f197.google.com (mail-qt1-f197.google.com [209.85.160.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g4resg45s-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 18 Aug 2026 14:06:02 +0000 (GMT) Received: by mail-qt1-f197.google.com with SMTP id d75a77b69052e-51ebdfceddcso51759631cf.3 for ; Tue, 18 Aug 2026 07:06:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787061962; x=1787666762; darn=lists.libcamera.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=JJW5ojuOXBE2OX7wazqLPTyUetrSIGmVm152XimyfME=; b=Ju/ZuoCepw5Mve20GoV9uuKF2cSHLDmHTrKzbyCPmSZnDw02S1Rf7Y0EW8TY3W/c1c y6jUcFor9cUxQ9/TlnQ48NMeUu22bSDwLsVmu+bpInh0RF4IAMtUkY4zgnuKD8/UPdFy fLOcinIWfE3jQ8Sxmf5HywbDb8bgInXHLh/cPeYXSIWcxeKvQzZTBav/oL0vKeRyrQcU 6EcFxwK/tr/MGWifnIEdPym8FEbutOfA6I3zpNmYPqU0an0YBzILPZdKXpWJ0ssK4jL6 Dm+83pep5TNLJ5nveOkifH0h8ggJft7LqE5HcQLWj7+RmXmDxRiAbmhXta7hm6YK/n1v 0B0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787061962; x=1787666762; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=JJW5ojuOXBE2OX7wazqLPTyUetrSIGmVm152XimyfME=; b=W1B8l6+a40PdvBEJVd1IvWJqMJ+ig5VY+8bQ3DbSHeV2IRyTC53v3umSyWSGFCd7KI fWFtr/J+cSRUzBbRLI8rHzwmZhzDwKKPWf9GYDdEFx4kVSGxykoeTc0EgRN8Sz/WvCKP SRjaoRFNAtEM4vHYC8yRdhqFl1WZrAjrWLVYi015YtcvQ/0lgovrETcE8w1XIWrhw5YS oFwIcARE9gy8IqammDwN2iQyIc9LRuo2r3ZtRsj5FekH7o4gKd9IEEhnaYM5ma7/EJHI +5gbyPpzyjLFTwb6xmWQotn9rXIZoqM7uL+ZGhIzcvmsy4dfLEz0/90oYtjCxSzTwifK bdsw== X-Gm-Message-State: AOJu0YzNxdtqUnrgO3d6pDgsJAWcT03MFdxZrNabCzIRPNc5et+AJHzi 6pFIoAkKUumGn2hLawA4A8HLbHLzaSrR4bWKQhnYwkjCPeRw2Xm4jkrKUcIOfcr/Hwzndlp/YmM HmnMA9l43KThxYdhI9OBtLbRk2SaSxNo2N9Ai2Q09ONu9CEDkAm/yh/z0i4Lm9b/S6Venu1zDI8 FBy4etLrst X-Gm-Gg: AR+sD10kI+L5y4A//QszB2Da5pbfsxFD9wfn6e9EDe0xAJaNmWwrQ97fr2x+gBOtckS wlSFeu7mWwb9dpVzzRh2ZDTAm5eSDvxZcZ6xtemVBJjoMfriHgzfzIgu23T706dSNueDo5Olod2 XahIUZIt4ls7oQv/U76jtv5OP9m2/cGcGY/douaIfQkf7/OH8LqvW+0Q+ziwvJEcwD5/W6hQFyI WOz370eDyZXmIdPnc/hgGGOcmppFVqOHzvTMY77V5Lz7vwGWx78krRIaVq95vICjcEcQ8rE0FFx PTAAjouPN2xoJr+wqPHVto29mRNopYwRLnmuwuHj6X55Ovwh0Ekl0o9vvGrIBmVaGnMwXlKou7k eYFrGRNtKVfP/8i+BMks/DfStn14ECqIvP2oQrSS/uSAsS8MmIxyxpZxSDXoXtwWwYDWDO+pbB+ b5UY3/vA2XIxDOJOU= X-Received: by 2002:ac8:7f8b:0:b0:51b:f40b:2fb3 with SMTP id d75a77b69052e-52d8530e04emr334308791cf.9.1787061961259; Tue, 18 Aug 2026 07:06:01 -0700 (PDT) X-Received: by 2002:ac8:7f8b:0:b0:51b:f40b:2fb3 with SMTP id d75a77b69052e-52d8530e04emr334307551cf.9.1787061960599; Tue, 18 Aug 2026 07:06:00 -0700 (PDT) Received: from shalem (2001-1c00-0c32-7800-5bfa-a036-83f0-f9ec.cable.dynamic.v6.ziggo.nl. [2001:1c00:c32:7800:5bfa:a036:83f0:f9ec]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6a3d85a30b7sm1874967a12.30.2026.08.18.07.05.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 07:05:59 -0700 (PDT) From: Hans de Goede To: libcamera-devel@lists.libcamera.org Cc: Jacopo Mondi , =?utf-8?q?Niklas_S=C3=B6?= =?utf-8?q?derlund?= , Loic Poulain , Hans de Goede , =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= Subject: [PATCH v9 7/8] ipa: softisp: Rename ipa::soft namespace to ipa::softisp Date: Tue, 18 Aug 2026 16:05:47 +0200 Message-ID: <20260818140548.179663-8-johannes.goede@oss.qualcomm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260818140548.179663-1-johannes.goede@oss.qualcomm.com> References: <20260818140548.179663-1-johannes.goede@oss.qualcomm.com> MIME-Version: 1.0 X-Authority-Analysis: v=2.4 cv=Ne/WEWD4 c=1 sm=1 tr=0 ts=6a8466ca cx=c_pps a=EVbN6Ke/fEF3bsl7X48z0g==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_glEPmIy2e8OvE2BGh3C:22 a=P1BnusSwAAAA:8 a=EUspDBNiAAAA:8 a=S-_Sen47HszD1NjcceEA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=a_PwQJl-kcHnX1M80qC6:22 a=D0XLA9XvdZm18NrgonBM:22 X-Proofpoint-GUID: GHPrMlXs3L6RV3fVNpdRUZEsx8NQK5C1 X-Proofpoint-ORIG-GUID: GHPrMlXs3L6RV3fVNpdRUZEsx8NQK5C1 X-Proofpoint-Spam-Info: AW1haW4tMjYwODE4MDEwMyBTYWx0ZWRfX7gJBWRZLmp9g jt2XEElyQuwJYGEfyW1BUKZs8FjjXojzxcxyrEpzIbPeG8Cj43r4i4cxJ0NB6GcnpCWNg8vBmcq SKL/w2nLlY342QIZ9ytnWmdbJeC7PFs= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE4MDEwMyBTYWx0ZWRfX6LJnKPI6jjZP WqvEpNsMBn0TeP0u3xd+7Y0TbJMArWiLoNnbymrVMTdrhiKkZeNEtwLoB9KUF3989OOPsyLFeQx /7Ydg3/quPIbvB0rU9r7eFLkfgqRRS8o3MEyRnjYmncVJ1W2hYTR8MvuMNqufK97+Fn1V73sMtz bG7wX2Pey1RKekEOBDQUbbfsaVFjYBPGkgsAAd7ZErSxxeJMugYTNhrD5MMzy+w0yKMbyKRuZ3V k8BnhRR9A2nU/esQAFbyyXc6feM85J8JLyZz8Hs1QXsjHXfmshJzFJwUhzLmzj7Q70bEBbmolxU VJlMhyxFVmKk3ko3Dd8otk49bG/7VdLnpUqGf3jEbDpUupIRZ3WnoLLwFGXgrYsbz/fpKjVgxSp +t9NZlFee0FMF8LHjqLnN0jRhVLKWhMdHW39WFFoJFaYrT/f3xDYfWvqJTlLwChkNucvL+L7R46 Bmd1PnY9i8lyXgdUJTw== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293, Aquarius:18.0.1176, Hydra:6.1.134, FMLib:17.12.100.49 definitions=2026-08-18_02,2026-08-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 priorityscore=1501 malwarescore=0 suspectscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 bulkscore=0 impostorscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608180103 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" Rename ipa::soft namespace to ipa::softisp to match the softisp IPA name. Reviewed-by: Jacopo Mondi Reviewed-by: Barnabás Pőcze Signed-off-by: Hans de Goede --- Changes in v7: - New patch in v7 of this patch-series --- include/libcamera/internal/software_isp/software_isp.h | 4 ++-- include/libcamera/ipa/softisp.mojom | 2 +- src/ipa/softisp/algorithms/adjust.cpp | 4 ++-- src/ipa/softisp/algorithms/adjust.h | 4 ++-- src/ipa/softisp/algorithms/agc.cpp | 4 ++-- src/ipa/softisp/algorithms/agc.h | 4 ++-- src/ipa/softisp/algorithms/algorithm.h | 4 ++-- src/ipa/softisp/algorithms/awb.cpp | 4 ++-- src/ipa/softisp/algorithms/awb.h | 4 ++-- src/ipa/softisp/algorithms/blc.cpp | 4 ++-- src/ipa/softisp/algorithms/blc.h | 4 ++-- src/ipa/softisp/algorithms/ccm.cpp | 4 ++-- src/ipa/softisp/algorithms/ccm.h | 4 ++-- src/ipa/softisp/ipa_context.cpp | 4 ++-- src/ipa/softisp/ipa_context.h | 4 ++-- src/ipa/softisp/module.h | 4 ++-- src/ipa/softisp/softisp.cpp | 8 ++++---- src/libcamera/pipeline/simple/simple.cpp | 2 +- src/libcamera/software_isp/software_isp.cpp | 4 ++-- 19 files changed, 38 insertions(+), 38 deletions(-) diff --git a/include/libcamera/internal/software_isp/software_isp.h b/include/libcamera/internal/software_isp/software_isp.h index 2363a91c8..64c77e65c 100644 --- a/include/libcamera/internal/software_isp/software_isp.h +++ b/include/libcamera/internal/software_isp/software_isp.h @@ -65,7 +65,7 @@ public: int configure(const StreamConfiguration &inputCfg, const std::vector> &outputCfgs, - const ipa::soft::IPAConfigInfo &configInfo); + const ipa::softisp::IPAConfigInfo &configInfo); int exportBuffers(const Stream *stream, unsigned int count, std::vector> *buffers); @@ -101,7 +101,7 @@ private: DmaBufAllocator dmaHeap_; bool ccmEnabled_; - std::unique_ptr ipa_; + std::unique_ptr ipa_; std::deque queuedInputBuffers_; std::deque queuedOutputBuffers_; }; diff --git a/include/libcamera/ipa/softisp.mojom b/include/libcamera/ipa/softisp.mojom index 66cf311b3..55b6e4d7f 100644 --- a/include/libcamera/ipa/softisp.mojom +++ b/include/libcamera/ipa/softisp.mojom @@ -4,7 +4,7 @@ * \todo Document the interface and remove the related EXCLUDE_PATTERNS entry. */ -module ipa.soft; +module ipa.softisp; import "include/libcamera/ipa/core.mojom"; diff --git a/src/ipa/softisp/algorithms/adjust.cpp b/src/ipa/softisp/algorithms/adjust.cpp index 52eb81d76..56e2cf0e8 100644 --- a/src/ipa/softisp/algorithms/adjust.cpp +++ b/src/ipa/softisp/algorithms/adjust.cpp @@ -17,7 +17,7 @@ namespace libcamera { -namespace ipa::soft::algorithms { +namespace ipa::softisp::algorithms { constexpr float kDefaultContrast = 1.0f; constexpr float kDefaultSaturation = 1.0f; @@ -129,6 +129,6 @@ void Adjust::process([[maybe_unused]] IPAContext &context, REGISTER_IPA_ALGORITHM(Adjust, "Adjust") -} /* namespace ipa::soft::algorithms */ +} /* namespace ipa::softisp::algorithms */ } /* namespace libcamera */ diff --git a/src/ipa/softisp/algorithms/adjust.h b/src/ipa/softisp/algorithms/adjust.h index 49c1f26c3..1acf7cdf1 100644 --- a/src/ipa/softisp/algorithms/adjust.h +++ b/src/ipa/softisp/algorithms/adjust.h @@ -15,7 +15,7 @@ namespace libcamera { -namespace ipa::soft::algorithms { +namespace ipa::softisp::algorithms { constexpr float kDefaultGamma = 2.2f; @@ -45,6 +45,6 @@ private: void applySaturation(Matrix &ccm, float saturation); }; -} /* namespace ipa::soft::algorithms */ +} /* namespace ipa::softisp::algorithms */ } /* namespace libcamera */ diff --git a/src/ipa/softisp/algorithms/agc.cpp b/src/ipa/softisp/algorithms/agc.cpp index 72f000628..63b41544c 100644 --- a/src/ipa/softisp/algorithms/agc.cpp +++ b/src/ipa/softisp/algorithms/agc.cpp @@ -19,7 +19,7 @@ namespace libcamera { LOG_DEFINE_CATEGORY(IPASoftIspExposure) -namespace ipa::soft::algorithms { +namespace ipa::softisp::algorithms { /* * The number of bins to use for the optimal exposure calculations. @@ -194,6 +194,6 @@ void Agc::process(IPAContext &context, REGISTER_IPA_ALGORITHM(Agc, "Agc") -} /* namespace ipa::soft::algorithms */ +} /* namespace ipa::softisp::algorithms */ } /* namespace libcamera */ diff --git a/src/ipa/softisp/algorithms/agc.h b/src/ipa/softisp/algorithms/agc.h index 112d9f5a1..369446192 100644 --- a/src/ipa/softisp/algorithms/agc.h +++ b/src/ipa/softisp/algorithms/agc.h @@ -11,7 +11,7 @@ namespace libcamera { -namespace ipa::soft::algorithms { +namespace ipa::softisp::algorithms { class Agc : public Algorithm { @@ -28,6 +28,6 @@ private: void updateExposure(IPAContext &context, IPAFrameContext &frameContext, double exposureMSV); }; -} /* namespace ipa::soft::algorithms */ +} /* namespace ipa::softisp::algorithms */ } /* namespace libcamera */ diff --git a/src/ipa/softisp/algorithms/algorithm.h b/src/ipa/softisp/algorithms/algorithm.h index 41f631703..53db01c9d 100644 --- a/src/ipa/softisp/algorithms/algorithm.h +++ b/src/ipa/softisp/algorithms/algorithm.h @@ -13,10 +13,10 @@ namespace libcamera { -namespace ipa::soft { +namespace ipa::softisp { using Algorithm = libcamera::ipa::Algorithm; -} /* namespace ipa::soft */ +} /* namespace ipa::softisp */ } /* namespace libcamera */ diff --git a/src/ipa/softisp/algorithms/awb.cpp b/src/ipa/softisp/algorithms/awb.cpp index 84f01b832..55fd326fc 100644 --- a/src/ipa/softisp/algorithms/awb.cpp +++ b/src/ipa/softisp/algorithms/awb.cpp @@ -18,7 +18,7 @@ namespace libcamera { LOG_DEFINE_CATEGORY(IPASoftIspAwb) -namespace ipa::soft::algorithms { +namespace ipa::softisp::algorithms { /* * \todo Replace it with a proper Lux algorithm @@ -159,6 +159,6 @@ void Awb::process(IPAContext &context, [[maybe_unused]] const uint32_t frame, REGISTER_IPA_ALGORITHM(Awb, "Awb") -} /* namespace ipa::soft::algorithms */ +} /* namespace ipa::softisp::algorithms */ } /* namespace libcamera */ diff --git a/src/ipa/softisp/algorithms/awb.h b/src/ipa/softisp/algorithms/awb.h index 37893932b..c92bdbfd5 100644 --- a/src/ipa/softisp/algorithms/awb.h +++ b/src/ipa/softisp/algorithms/awb.h @@ -20,7 +20,7 @@ namespace libcamera { -namespace ipa::soft::algorithms { +namespace ipa::softisp::algorithms { class SoftIspAwbStats; @@ -59,6 +59,6 @@ private: AwbAlgorithm> awbAlgo_; }; -} /* namespace ipa::soft::algorithms */ +} /* namespace ipa::softisp::algorithms */ } /* namespace libcamera */ diff --git a/src/ipa/softisp/algorithms/blc.cpp b/src/ipa/softisp/algorithms/blc.cpp index fca76f442..e35aabc35 100644 --- a/src/ipa/softisp/algorithms/blc.cpp +++ b/src/ipa/softisp/algorithms/blc.cpp @@ -15,7 +15,7 @@ namespace libcamera { -namespace ipa::soft::algorithms { +namespace ipa::softisp::algorithms { LOG_DEFINE_CATEGORY(IPASoftIspBL) @@ -119,6 +119,6 @@ void BlackLevel::process(IPAContext &context, REGISTER_IPA_ALGORITHM(BlackLevel, "BlackLevel") -} /* namespace ipa::soft::algorithms */ +} /* namespace ipa::softisp::algorithms */ } /* namespace libcamera */ diff --git a/src/ipa/softisp/algorithms/blc.h b/src/ipa/softisp/algorithms/blc.h index 2933ff1ff..1d602927f 100644 --- a/src/ipa/softisp/algorithms/blc.h +++ b/src/ipa/softisp/algorithms/blc.h @@ -14,7 +14,7 @@ namespace libcamera { -namespace ipa::soft::algorithms { +namespace ipa::softisp::algorithms { class BlackLevel : public Algorithm { @@ -37,6 +37,6 @@ private: std::optional definedLevel_; }; -} /* namespace ipa::soft::algorithms */ +} /* namespace ipa::softisp::algorithms */ } /* namespace libcamera */ diff --git a/src/ipa/softisp/algorithms/ccm.cpp b/src/ipa/softisp/algorithms/ccm.cpp index 58e17bbeb..039074494 100644 --- a/src/ipa/softisp/algorithms/ccm.cpp +++ b/src/ipa/softisp/algorithms/ccm.cpp @@ -12,7 +12,7 @@ namespace libcamera { -namespace ipa::soft::algorithms { +namespace ipa::softisp::algorithms { LOG_DEFINE_CATEGORY(IPASoftIspCcm) @@ -79,6 +79,6 @@ void Ccm::process([[maybe_unused]] IPAContext &context, REGISTER_IPA_ALGORITHM(Ccm, "Ccm") -} /* namespace ipa::soft::algorithms */ +} /* namespace ipa::softisp::algorithms */ } /* namespace libcamera */ diff --git a/src/ipa/softisp/algorithms/ccm.h b/src/ipa/softisp/algorithms/ccm.h index 27f11bcbd..2a2030a41 100644 --- a/src/ipa/softisp/algorithms/ccm.h +++ b/src/ipa/softisp/algorithms/ccm.h @@ -19,7 +19,7 @@ namespace libcamera { -namespace ipa::soft::algorithms { +namespace ipa::softisp::algorithms { class Ccm : public Algorithm { @@ -45,6 +45,6 @@ private: CcmAlgorithm> ccmAlgo_; }; -} /* namespace ipa::soft::algorithms */ +} /* namespace ipa::softisp::algorithms */ } /* namespace libcamera */ diff --git a/src/ipa/softisp/ipa_context.cpp b/src/ipa/softisp/ipa_context.cpp index 3f94bbebf..0c7cbbf78 100644 --- a/src/ipa/softisp/ipa_context.cpp +++ b/src/ipa/softisp/ipa_context.cpp @@ -13,7 +13,7 @@ * \brief Context and state information shared between the algorithms */ -namespace libcamera::ipa::soft { +namespace libcamera::ipa::softisp { /** * \struct IPASessionConfiguration @@ -99,4 +99,4 @@ namespace libcamera::ipa::soft { * \brief Black level used for the gamma table computation */ -} /* namespace libcamera::ipa::soft */ +} /* namespace libcamera::ipa::softisp */ diff --git a/src/ipa/softisp/ipa_context.h b/src/ipa/softisp/ipa_context.h index bccf95775..2eed32f88 100644 --- a/src/ipa/softisp/ipa_context.h +++ b/src/ipa/softisp/ipa_context.h @@ -24,7 +24,7 @@ namespace libcamera { -namespace ipa::soft { +namespace ipa::softisp { struct IPASessionConfiguration { struct { @@ -91,6 +91,6 @@ struct IPAContext { bool ccmEnabled = false; }; -} /* namespace ipa::soft */ +} /* namespace ipa::softisp */ } /* namespace libcamera */ diff --git a/src/ipa/softisp/module.h b/src/ipa/softisp/module.h index b5d99ba08..b7f79aadf 100644 --- a/src/ipa/softisp/module.h +++ b/src/ipa/softisp/module.h @@ -20,11 +20,11 @@ namespace libcamera { -namespace ipa::soft { +namespace ipa::softisp { using Module = ipa::Module; -} /* namespace ipa::soft */ +} /* namespace ipa::softisp */ } /* namespace libcamera */ diff --git a/src/ipa/softisp/softisp.cpp b/src/ipa/softisp/softisp.cpp index 111325d7d..b3f0d3fa6 100644 --- a/src/ipa/softisp/softisp.cpp +++ b/src/ipa/softisp/softisp.cpp @@ -36,12 +36,12 @@ LOG_DEFINE_CATEGORY(IPASoftIsp) using namespace std::literals::chrono_literals; -namespace ipa::soft { +namespace ipa::softisp { /* Maximum number of frame contexts to be held */ static constexpr uint32_t kMaxFrameContexts = 16; -class IPASoftIsp : public ipa::soft::IPASoftIspInterface, public Module +class IPASoftIsp : public ipa::softisp::IPASoftIspInterface, public Module { public: IPASoftIsp() @@ -333,7 +333,7 @@ std::string IPASoftIsp::logPrefix() const return "IPASoftIsp"; } -} /* namespace ipa::soft */ +} /* namespace ipa::softisp */ /* * External IPA module interface @@ -347,7 +347,7 @@ const struct IPAModuleInfo ipaModuleInfo = { IPAInterface *ipaCreate() { - return new ipa::soft::IPASoftIsp(); + return new ipa::softisp::IPASoftIsp(); } } /* extern "C" */ diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp index e26f438d9..02a98f594 100644 --- a/src/libcamera/pipeline/simple/simple.cpp +++ b/src/libcamera/pipeline/simple/simple.cpp @@ -1603,7 +1603,7 @@ int SimplePipelineHandler::configure(Camera *camera, CameraConfiguration *c) if (data->converter_) { return data->converter_->configure(inputCfg, outputCfgs); } else { - ipa::soft::IPAConfigInfo configInfo; + ipa::softisp::IPAConfigInfo configInfo; configInfo.sensorControls = data->sensor_->controls(); return data->swIsp_->configure(inputCfg, outputCfgs, configInfo); } diff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp index d1fe02a2e..f29f78c98 100644 --- a/src/libcamera/software_isp/software_isp.cpp +++ b/src/libcamera/software_isp/software_isp.cpp @@ -136,7 +136,7 @@ SoftwareIsp::SoftwareIsp(PipelineHandler *pipe, const CameraSensor *sensor, debayer_->inputBufferReady.connect(this, &SoftwareIsp::inputReady); debayer_->outputBufferReady.connect(this, &SoftwareIsp::outputReady); - ipa_ = pipe->createIPA(0, 0); + ipa_ = pipe->createIPA(0, 0); if (!ipa_) { LOG(SoftwareIsp, Error) << "Creating IPA for software ISP failed"; @@ -285,7 +285,7 @@ uint32_t SoftwareIsp::preferredInputStride(const PixelFormat &inputFormat, const */ int SoftwareIsp::configure(const StreamConfiguration &inputCfg, const std::vector> &outputCfgs, - const ipa::soft::IPAConfigInfo &configInfo) + const ipa::softisp::IPAConfigInfo &configInfo) { ASSERT(ipa_ && debayer_); From patchwork Tue Aug 18 14:05:48 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Hans de Goede X-Patchwork-Id: 27845 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 57F5CC330A for ; Tue, 18 Aug 2026 14:06:13 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id CA80368301; Tue, 18 Aug 2026 16:06:12 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.b="V14IYJUu"; dkim=pass (2048-bit key; unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="EAvMs7mn"; dkim-atps=neutral Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 8058568307 for ; Tue, 18 Aug 2026 16:06:06 +0200 (CEST) Received: from pps.filterd (m0279862.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 67IE1A7L1085260 for ; Tue, 18 Aug 2026 14:06:05 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= 6ojiK8/yPfAa1toBNXbb2+xkfwkif46AM64OhQcn3ME=; b=V14IYJUuYFm0of7c K34TKbNFlBDT6k38vSxo2/TBlhV1N29CeM0fCT3PGh7hoUtub+R4ks4E/6x6TCm6 WNqqC4bpaagrnJr6JrdUE1HwrA2gpJGJH6iDYF4wF7kfQYucTLX+Objfk88S3d/j PP+OqTbFahgaJgvCzVk+WmitIcGSWmgszADmF2IIbB66AI82tZp/t6qkA9UBfXC9 XbfKZYlGzqq4hqNb+gTbv/78rNCovOhTi3WeikcPCIhQc+KPHwpclOBsQ78Hl1Rj /EBXPV8uqP3QeKQ9uJztNtnXAsjZ5DTGyPJFJrKYdOiV4psKxwuTN3qDtvBga8zQ f8ZfQg== Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4g4fbaajn9-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 18 Aug 2026 14:06:04 +0000 (GMT) Received: by mail-qk1-f198.google.com with SMTP id af79cd13be357-92e8004d60eso824715585a.1 for ; Tue, 18 Aug 2026 07:06:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787061963; x=1787666763; darn=lists.libcamera.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=6ojiK8/yPfAa1toBNXbb2+xkfwkif46AM64OhQcn3ME=; b=EAvMs7mnUrAO9zSKh0cwVpkoU1DpWqkDrYRhoXO+/Cbpa5ZU9n0FSALkAUqEJ3fLUF XkgCRFoP1Zyt7Z4/v3w7H46gKU6Tu9crRi1ApiwBmwMuOoprKWAuz++ZIlwx6GvNMRS+ NQksjYhXctTkpNE62/CZMuLXK4qHwWrcZ2mTlwWVFUKfPR429be/wOJM+IILTCU2quNT oq9Q5GpOqDId960XsVX7pphvhWYf5dfss7Sa4B1I0sfYjNbDJf2btuQpdJunxKsYeTmH nkRSAZ/46IZN85a9g3BN/SrBw9Lz2OzpflxV72HdcqgmILX0eV5v48qTTbv9dc1oYgwD D0eg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787061963; x=1787666763; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=6ojiK8/yPfAa1toBNXbb2+xkfwkif46AM64OhQcn3ME=; b=JC2RxqFAIw2n8uSDTuWCX7o/RN+DWbG8X7flZo1K/e7Y2xp5Kafx/Rm9rQfRhijXOc I+VEA4Bqtt73E3b04Apj/kCvO2IEQ+pIgaQ1CyldD7dT9fbLZab9RXK55S2jN8JMlKoI nyec4b6RX/jcv+m7vxQrbOLhNgdA0467h9Dzw4OTAXB1bMXTYj3tQ0j03hkE/PcdDnHD pmLoLi2Vf9Y8krFXsznFTRY4MY2+QXMJJRwQ27umuGxZCaSgfjwByOvswPjBhyYnvdXG ZfjkqQWTPIQkQ7CS8cQ2O+z5+IyaE9x1eQy5y9uamk6HLBIXSuUHdW5LDjT90p5eqNCw beBg== X-Gm-Message-State: AOJu0Ywt1DauomAUlI8NM5QM9kjPr1/pauhaAh59fPw/WLziipQhIm6+ kbBDQwUHTIZOEVob3CTzhaqpqg0ri6DLomj3d5oDVVjyzIv6bSsEYvqj/fryASqaSVyAec35eXX v1t8yJdL9mo18lcOEAQnHOQjbeHRZizu0nv5sZMXZBpGTs16JKfHAoTYbV49xRQCZ4+PdAHgns9 RC5pvVXjar X-Gm-Gg: AR+sD12wUV7HtgL3GCl1nBftuHssWKAByaUlvfpqjc5UDwsiXVtXp6IbnUimDfl59pf ze8sGP7E3zQRHKD9tEdBZ7dB9sBtN41Co9ADsZzhe/79Gmpb7+rw3Mv4slgc4+Kz1TuY2nsGy7I k33f4b3upkuT/TyDeEKZ6vwov70OtxpktmCeHHd8P08dmbVskfvQrgmCvzjz/YO9I7yYyoNrqJp sEaecvb+D8kr47GwcYSuULMqHrkdPJ0LgxD0G9N9TcY5g1ISK+SxZrSP5eqCXj0ZOnfiKzBGs2/ IOiEFEVR1ZslN79jcvmtgQbz+6ir1uosRSRveJM4ciADE03KFw8o2rZSGfOh2W0+fyqrRIhHypC PglOrDVCUDK3CUF73sGn2vJgxbiyERYb2SufxCyyjkuWd/lJLBRd6arPeutfJ4hi+DzN+HNXKR+ uJ/fg5OzU1mN8CcKU= X-Received: by 2002:a05:620a:414a:b0:936:df55:69e1 with SMTP id af79cd13be357-936df556d10mr2756115985a.9.1787061963207; Tue, 18 Aug 2026 07:06:03 -0700 (PDT) X-Received: by 2002:a05:620a:414a:b0:936:df55:69e1 with SMTP id af79cd13be357-936df556d10mr2756100385a.9.1787061962526; Tue, 18 Aug 2026 07:06:02 -0700 (PDT) Received: from shalem (2001-1c00-0c32-7800-5bfa-a036-83f0-f9ec.cable.dynamic.v6.ziggo.nl. [2001:1c00:c32:7800:5bfa:a036:83f0:f9ec]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6a3d85a30b7sm1874967a12.30.2026.08.18.07.06.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 07:06:01 -0700 (PDT) From: Hans de Goede To: libcamera-devel@lists.libcamera.org Cc: Jacopo Mondi , =?utf-8?q?Niklas_S=C3=B6?= =?utf-8?q?derlund?= , Loic Poulain , Hans de Goede , Kieran Bingham , =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= Subject: [PATCH v9 8/8] ipa: softisp: Rename setIspParams signal to paramsComputed Date: Tue, 18 Aug 2026 16:05:48 +0200 Message-ID: <20260818140548.179663-9-johannes.goede@oss.qualcomm.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260818140548.179663-1-johannes.goede@oss.qualcomm.com> References: <20260818140548.179663-1-johannes.goede@oss.qualcomm.com> MIME-Version: 1.0 X-Proofpoint-Spam-Info: AW1haW4tMjYwODE4MDEwMyBTYWx0ZWRfX/RNXktWQTbKL cQThskB4eEbnBdJPfyhaZfQmTVPNZGdOhlYZHpLN2NnFaQn1haSKdMVTaO37MGMLP+gXLvPO3ug cRuf5kp0uKAl5Sgkd5+O0TMFNzaAu8A= X-Authority-Analysis: v=2.4 cv=VsITxe2n c=1 sm=1 tr=0 ts=6a8466cc cx=c_pps a=qKBjSQ1v91RyAK45QCPf5w==:117 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=Sv0fKeRqtYgA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=_K5XuSEh1TEqbUxoQ0s3:22 a=P1BnusSwAAAA:8 a=EUspDBNiAAAA:8 a=X9iWcBBwFAc5_HUTaPUA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 a=NFOGd7dJGGMPyQGDc5-O:22 a=D0XLA9XvdZm18NrgonBM:22 X-Proofpoint-ORIG-GUID: ZBpy4t9VoedYeITlENlk24VdIR0gqW8U X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE4MDEwMyBTYWx0ZWRfX8grwH5JedRg8 EtZadud7GsWqWvYd64DuFTH2QN1iyyYidyREC7QshyyZa7MB91QP4NJArS5uCpIbHgzCeueFIRg xD5Aci6k6ej8m42c5dVJsx8mf1OFNjsHi1XJskYpRYpN68tyX7QN0PMNn8lv7FP7BEo3AQaSLgA 1Tk2QtNQ9q+DTQFd5hdsmnIERvb2Uc00etuPWPMcUDX1U8eARDXkKh+BytHd+xXn1a5om0OcLgG oIjSbnqiwHp4ty3DAVk7DtlsZQ2ZKqQ8S8wNE9o29DLVHDheCQo8t1f/5W2sv8vb/XYoetK3kCf /e/DrETNFCzu59bFl9jidf2Nny8l2F+Tk+hFhvvFyRaP8dkmyUBzKlhKvJvcOgtYdQU/AZSL8sn /zxnYdOJwpWS2eMgCg4tNuCFmAy4iFynx0NdJTv1QRbKmQd/apPGwQjSX1VwNckgE0HqTuuzOqk /v77EGP9EosEpGMJqsA== X-Proofpoint-GUID: ZBpy4t9VoedYeITlENlk24VdIR0gqW8U X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293, Aquarius:18.0.1176, Hydra:6.1.134, FMLib:17.12.100.49 definitions=2026-08-18_02,2026-08-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 suspectscore=0 lowpriorityscore=0 malwarescore=0 clxscore=1015 bulkscore=0 priorityscore=1501 phishscore=0 adultscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2608180103 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" Rename the softisp IPA setIspParams signal to paramsComputed and pass the frame-number as argument to make the softisp IPA behavior consistent with other IPA implementations. Reviewed-by: Kieran Bingham Reviewed-by: Barnabás Pőcze Reviewed-by: Jacopo Mondi Signed-off-by: Hans de Goede --- Changes in v7: - New patch in v7 of this patch-series --- include/libcamera/internal/software_isp/software_isp.h | 2 +- include/libcamera/ipa/softisp.mojom | 2 +- src/ipa/softisp/softisp.cpp | 2 +- src/libcamera/software_isp/software_isp.cpp | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/include/libcamera/internal/software_isp/software_isp.h b/include/libcamera/internal/software_isp/software_isp.h index 64c77e65c..da893d242 100644 --- a/include/libcamera/internal/software_isp/software_isp.h +++ b/include/libcamera/internal/software_isp/software_isp.h @@ -89,7 +89,7 @@ public: Signal setSensorControls; private: - void saveIspParams(); + void saveIspParams(uint32_t frame); void setSensorCtrls(const ControlList &sensorControls); void statsReady(uint32_t frame, uint32_t bufferId); void inputReady(FrameBuffer *input); diff --git a/include/libcamera/ipa/softisp.mojom b/include/libcamera/ipa/softisp.mojom index 55b6e4d7f..a892d84f1 100644 --- a/include/libcamera/ipa/softisp.mojom +++ b/include/libcamera/ipa/softisp.mojom @@ -33,6 +33,6 @@ interface IPASoftIspInterface { interface IPASoftIspEventInterface { setSensorControls(libcamera.ControlList sensorControls); - setIspParams(); + paramsComputed(uint32 frame); metadataReady(uint32 frame, libcamera.ControlList metadata); }; diff --git a/src/ipa/softisp/softisp.cpp b/src/ipa/softisp/softisp.cpp index b3f0d3fa6..aec04c528 100644 --- a/src/ipa/softisp/softisp.cpp +++ b/src/ipa/softisp/softisp.cpp @@ -292,7 +292,7 @@ void IPASoftIsp::computeParams(const uint32_t frame) algo->prepare(context_, frame, frameContext, params_); params_->combinedMatrix = context_.activeState.combinedMatrix; - setIspParams.emit(); + paramsComputed.emit(frame); } void IPASoftIsp::processStats(const uint32_t frame, diff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp index f29f78c98..ae86c20a8 100644 --- a/src/libcamera/software_isp/software_isp.cpp +++ b/src/libcamera/software_isp/software_isp.cpp @@ -171,7 +171,7 @@ SoftwareIsp::SoftwareIsp(PipelineHandler *pipe, const CameraSensor *sensor, return; } - ipa_->setIspParams.connect(this, &SoftwareIsp::saveIspParams); + ipa_->paramsComputed.connect(this, &SoftwareIsp::saveIspParams); ipa_->metadataReady.connect(this, [this](uint32_t frame, const ControlList &metadata) { metadataReady.emit(frame, metadata); @@ -432,7 +432,7 @@ void SoftwareIsp::process(uint32_t frame, FrameBuffer *input, FrameBuffer *outpu ConnectionTypeQueued, frame, input, output, debayerParams_); } -void SoftwareIsp::saveIspParams() +void SoftwareIsp::saveIspParams([[maybe_unused]] uint32_t frame) { debayerParams_ = *sharedParams_; }