From patchwork Tue Aug 18 14:05:40 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans de Goede X-Patchwork-Id: 27837 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 09D0AC3308 for ; Tue, 18 Aug 2026 14:05:58 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id A5663682F5; Tue, 18 Aug 2026 16:05:56 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=qualcomm.com header.i=@qualcomm.com header.b="ie6k3tvK"; dkim=pass (2048-bit key; unprotected) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="T9ZFbtzY"; 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 69D2C67FEC for ; Tue, 18 Aug 2026 16:05:54 +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 67IE0lKV572245 for ; Tue, 18 Aug 2026 14:05:52 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:message-id :mime-version:subject:to; s=qcppdkim1; bh=Jy1SUehJCH9isht1pvtVT5 HAomJUBMQIP61jnYLdU8s=; b=ie6k3tvKj4G2/g6K8XbIYWO9jpuhv7B8sTQW1H viiFT27jpTOMVqU3yXroPZzzXeeXu7xrGs7hRJr6+y9GxAMCXKfJfce6uJ+2jOLs v8+35RDVl6a3BlE8xj/3U29WzcwrKWePQeAwrKUvNAOf/eS0OvUN3DY0VfDPM/7m kav0NHi6wYO7xFO6tLnTGqZFVE7NFn5mA+l2OowTBbzOAxDcgRvlbYmVvNnXlHRl zhwhVXCE7czMEYcHd+vW6jyqJ4bV/1yFNUODwiI+oQkiRmvXpac+GfRIYsb4zYPN PPXvP/sCf0Ylw0cUYAr0uABB/ZZCKIzrPSqZrqNxSDX4ZpBw== 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 4g4f5ptkgg-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Tue, 18 Aug 2026 14:05:52 +0000 (GMT) Received: by mail-qk1-f198.google.com with SMTP id af79cd13be357-934979ee9f1so608672485a.2 for ; Tue, 18 Aug 2026 07:05:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1787061951; x=1787666751; darn=lists.libcamera.org; h=content-transfer-encoding:content-type:mime-version:message-id:date :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Jy1SUehJCH9isht1pvtVT5HAomJUBMQIP61jnYLdU8s=; b=T9ZFbtzYdVYFkJkfCcWQWM90zlOA+b+3pyXIpSOsoQSFc1x9+02I1kH7kWoc/Ae3WQ rgx9zWmZqzwVgaPjah9aE8ceIqmpgh9ZBF3uwqIASuBm7nA9STqFcECPJhZkuRmHrdzS Ryq2gXPM4KA0rXP38qnS+1ENZ/wAySn2u0zgn3nYfRvRkW6tlZXQIpQhoV8oEwH6BW4U /wQtv3jYWSWjb2tjs7C4EbwfocBhCz5N6XfXDuHpNfiza9uNBPiEyzOtYtdqfD3xCvDb 3nJS40PRmbnqqDCqnlLMLpFZmNQUXVtGKK+6nZfqGZ9ZIrNwHLdPqRi+CY6YvfJtkQpz 2cTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787061951; x=1787666751; h=content-transfer-encoding:content-type:mime-version: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=Jy1SUehJCH9isht1pvtVT5HAomJUBMQIP61jnYLdU8s=; b=OwJef/ovOUQS0NY5Qce13wqWkTsFKYR6RpAyDu4P4itPD2uvznuEmqKlQoYN66EaSq w59G1AVDI+424IUt0JvZhgbEhgbdQu/oa0QU0imGrAdi0vZJDxDxb8Qjp37NeMEmHcnc RSwUeFSDWSLcH93Bgd9hG2zn95Dhj6j7oKDXWgCowf4J316Lf1RFhWujUKqR6dCsbeLJ NfY1Xkh9WlUxOirqyxRY9ZNSKEfKpuVhf5HV6Y48lIL2GMfnJ7wS8rBFO1vIpoKhr55c UaZywbMlwq9jD/7Y1fsQCRZVnE7jG1/Eags7Fh3Bhb7DJLuxKXEUsIZ3pF9uTjxeNGzm WgLw== X-Gm-Message-State: AOJu0Yy8paa2T4WIHMT3JCPwqXXZU/ToiDLoeichMq7Tj1riZCqQALrl bBgs8WKeiTjgproHBGFhMt533crBr+mGad6pe+84GLQ6RAMPIBzmPa/JlwBIkDXZAx2LimyIg0S WGvzUasUuNa5XgDh4CPm9pOrIWElmvzMhEn+IvHeAuMDFiqP8Jop34PuWTIs6xlKICdqqEe9bCb DoWSPiMWeP X-Gm-Gg: AR+sD12vhl4Naz0LIF1Czy4TyQkCKT4HQbD0snyQEsUbQyii7gVkMssukuzaN9m1QlQ aEO2gUUyMu4hReVsi0VuEEOHM2GAO6J509e86DMMPHuqACQwDqct6zYA9Z1vkxQjF20Mf7IFJmZ u8sVEgnGD5o4lLbvoEGVu4rn+rkaRdqUJOQafz9gXqcoOfE9GD+V7i6IJSgh/TMQS0N56H/ZOZ3 BO+4vly4+1Zm79LKnu5CJYYOBDXcHHF2ZLrLcK5WrfsJ5A3KiSlocB9MhOC23AodCWMiXmFUfiJ q8NMS03pnD9UOzCxSejjlLjVVm6T/4EWD8gBWU45bLkr9GKdsMvM6l1YpGQb3pi9laU6JWPWNG1 s7ubj2FMVs004zRJ5ASiRT4c8Poh3Zdc4I1lIloFuVpzLXwLnenNdtFPsW/CC0x4O+l6wqnRFVN lncGO7jy2Dqusi6+c= X-Received: by 2002:a05:620a:720a:b0:936:695a:185a with SMTP id af79cd13be357-936d2356e91mr2923401185a.44.1787061950989; Tue, 18 Aug 2026 07:05:50 -0700 (PDT) X-Received: by 2002:a05:620a:720a:b0:936:695a:185a with SMTP id af79cd13be357-936d2356e91mr2923383085a.44.1787061950169; Tue, 18 Aug 2026 07:05:50 -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.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 07:05:49 -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 0/8] ipa: Allow IPA creation by name Date: Tue, 18 Aug 2026 16:05:40 +0200 Message-ID: <20260818140548.179663-1-johannes.goede@oss.qualcomm.com> X-Mailer: git-send-email 2.55.0 MIME-Version: 1.0 X-Authority-Analysis: v=2.4 cv=S+/pBosP c=1 sm=1 tr=0 ts=6a8466c0 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=DJpcGTmdVt4CTyJn9g5Z:22 a=YAyIRdgMAAAA:8 a=e5mUnYsNAAAA:8 a=rA2dUZq7n2zCEeD_qkIA:9 a=QEXdDO2ut3YA:10 a=NFOGd7dJGGMPyQGDc5-O:22 a=o1rO4XtwZBNj6n05oSJ_:22 a=Vxmtnl_E_bksehYqCbjh:22 X-Proofpoint-GUID: orIy49V28j4nOlHKHfGPmX0qekAv4SWY X-Proofpoint-ORIG-GUID: orIy49V28j4nOlHKHfGPmX0qekAv4SWY X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE4MDEwMyBTYWx0ZWRfX2MeHl+s4YH6Y /XtSh/CF4FqFToGincSQdnqSY+9SOnw4M7XdzZIWMHhPFdnu10FXYQruMd8SEg5vRJ3FOqdFH2q 0flLzxfJA4/Ikubng1XPPxXXO7cyQBWi5uquGG8uO5suv98/zwkaW2csBh5+etwhGpDSknk4hk0 bgAu5gCXqDhdly8u+RpPjLkGabxLcog9bIDGnjDb53pGbn9KolVFkXeX9f8ls2Mi6CMFvlu8n20 KqOdZAP/wOBpFsZzcf7nkDv25fAZQ3qfgEywqSnUo45v4tRr0OruvsqpZa0yeN6yN4BFujjNcpP l1X4ZV3qE8RuowaFW0s1/a4fb2yzWDClM2Ho6ieh24+5dFZYhmLEfNd/Fbxlh+xy4xY8xgi6IKc a3ijM+jAYx442UsdihQYgCbWtM5QjoE5lJng5ktKt9sbd8NQDcXnuZV1wyqtOoLj/dV0otfZA7p zt56WCbGcYgr736cpyw== X-Proofpoint-Spam-Info: AW1haW4tMjYwODE4MDEwMyBTYWx0ZWRfX1ffpYKtB6nIv d6jkRO0ZnNeV604UvqiXG+O9cmY3Ez0/vXE/+yAiVbd4Fn0nV+jlP38zYdjGgb//MyrVbTb8+wv ZXDI7KX+UoIsRuabFDZcD/tKv088m64= 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" Hi All, This is v9 of my / Jacopo's "ipa: Allow IPA creation by name" series, This new version switches all pipeline handlers over to creating their IPA by IPA proxy type rather then by name, with the exception of the raspberry pi pipeline handlers which are switched to creating the IPA by explicitly passing the pipeline handler name since the rpi/vc4 and rpi/pisp IPAs share the same IPA proxy type. Use-cases for this / series blocked by this are: 1. Using a differently named IPA with the rcar-gen4 pipeline handler: https://patchwork.libcamera.org/project/libcamera/list/?series=6003 2. Using the softISP stats + IPA with the atomisp pipeline handler: https://patchwork.libcamera.org/project/libcamera/list/?series=5169 3. The new camss pipeline handler will use the softISP as a fallback on platforms where there is no hardware ISP support yet (so most platforms) the softISP needs to be able to load its IPA from both the "simple" and "camss" pipeline handlers, requiring something like this series. https://patchwork.libcamera.org/project/libcamera/list/?series=6070 This has been tested by Jacopo on R-Car Gen4 and on Mali-C55 and by me on Qualcomm Agetti and Hamoa SoCs with both the simple and camss pipeline handlers. I believe that this is ready for merging now. 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 v8: - Fix CI failure caused by extra trailing ';' https://gitlab.freedesktop.org/camera/libcamera-softisp/-/pipelines/1728425 Changes in v7: - Add a comment explaining why pipe()->name() is explicitly passed for the RPi IPA creation - Rename the softISP IPA from "simple" to "softisp" instead of "soft" - Mark PipelineHandler::createIPA() overload with an explicit IPA name argument as deprecated - 2 new patches to finish the IPA renaming to softisp / IPASoftIsp "ipa: softisp: Rename IPASoftSimple to IPASoftIsp" "ipa: softisp: Rename ipa::soft namespace to ipa::softisp" - Moved one patch from camss series here, it fits here better since this is all about making the Software ISP usuable from more places: "ipa: softisp: Rename setIspParams signal to paramsComputed" Changes in v6: - Drop patch switching softISP to create its IPA by name - Switch raspberry-pi pipeline-handlers to creating IPA by name - Switch all other pipeline-handlers to creating IPA by proxy type name - Rename "simple" softISP IPA to "soft" to match its proxy type name 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 - https://patchwork.libcamera.org/project/libcamera/list/?series=5940 Changes in v4: - Rebase, change author of first patch to my new email address - https://patchwork.libcamera.org/project/libcamera/list/?series=5876&state=* Changes in v3: - Add "ipa: Allow pipelines to have differently named IPA" patch - https://lists.libcamera.org/pipermail/libcamera-devel/2025-October/053821.html Changes in v2: - Update tags, fix stray blank line Changes in v1 from Hans' original patch: - Slightly different approach addressing the review comments on Hans' v1 by creating an overload for IPAManager::createIPA() that allows pipelines to specify the IPA module name. Regards, Hans Hans de Goede (6): libcamera: Create IPA by name pipeline: rpi: Explictly pass pipe()->name() when creating IPA libcamera: Create IPA by IPA proxy type name ipa: softisp: Rename IPASoftSimple to IPASoftIsp ipa: softisp: Rename ipa::soft namespace to ipa::softisp ipa: softisp: Rename setIspParams signal to paramsComputed Jacopo Mondi (2): ipa: ipa_module: Remove pipelineName ipa: Allow pipelines to have differently named IPA Documentation/Doxyfile-internal.in | 2 +- include/libcamera/internal/ipa_manager.h | 7 +- include/libcamera/internal/ipa_module.h | 6 +- include/libcamera/internal/pipeline_handler.h | 9 +- .../internal/software_isp/software_isp.h | 10 +-- include/libcamera/ipa/ipa_module_info.h | 1 - include/libcamera/ipa/meson.build | 2 +- .../ipa/{soft.mojom => softisp.mojom} | 8 +- meson_options.txt | 4 +- src/ipa/ipu3/ipu3.cpp | 1 - src/ipa/mali-c55/mali-c55.cpp | 1 - src/ipa/meson.build | 40 ++++++--- src/ipa/rkisp1/rkisp1.cpp | 1 - src/ipa/rpi/pisp/pisp.cpp | 1 - src/ipa/rpi/vc4/vc4.cpp | 1 - .../{simple => softisp}/algorithms/adjust.cpp | 12 +-- .../{simple => softisp}/algorithms/adjust.h | 4 +- .../{simple => softisp}/algorithms/agc.cpp | 12 +-- src/ipa/{simple => softisp}/algorithms/agc.h | 4 +- .../algorithms/algorithm.h | 4 +- .../{simple => softisp}/algorithms/awb.cpp | 20 ++--- src/ipa/{simple => softisp}/algorithms/awb.h | 12 +-- .../{simple => softisp}/algorithms/blc.cpp | 10 +-- src/ipa/{simple => softisp}/algorithms/blc.h | 4 +- .../{simple => softisp}/algorithms/ccm.cpp | 6 +- src/ipa/{simple => softisp}/algorithms/ccm.h | 4 +- .../algorithms/meson.build | 2 +- src/ipa/{simple => softisp}/data/meson.build | 2 +- .../data/uncalibrated.yaml | 0 src/ipa/{simple => softisp}/ipa_context.cpp | 4 +- src/ipa/{simple => softisp}/ipa_context.h | 6 +- src/ipa/{simple => softisp}/meson.build | 10 +-- src/ipa/{simple => softisp}/module.h | 6 +- .../soft_simple.cpp => softisp/softisp.cpp} | 85 +++++++++---------- src/ipa/vimc/vimc.cpp | 1 - src/libcamera/ipa_manager.cpp | 9 +- src/libcamera/ipa_module.cpp | 31 +++---- .../pipeline/rpi/common/pipeline_base.cpp | 8 +- src/libcamera/pipeline/simple/simple.cpp | 2 +- src/libcamera/pipeline_handler.cpp | 27 +++++- src/libcamera/software_isp/software_isp.cpp | 8 +- test/ipa/ipa_interface_test.cpp | 2 +- test/ipa/ipa_module_test.cpp | 3 - .../module_ipa_proxy.h.tmpl | 2 + 44 files changed, 216 insertions(+), 178 deletions(-) rename include/libcamera/ipa/{soft.mojom => softisp.mojom} (88%) rename src/ipa/{simple => softisp}/algorithms/adjust.cpp (91%) rename src/ipa/{simple => softisp}/algorithms/adjust.h (93%) rename src/ipa/{simple => softisp}/algorithms/agc.cpp (95%) rename src/ipa/{simple => softisp}/algorithms/agc.h (87%) rename src/ipa/{simple => softisp}/algorithms/algorithm.h (84%) rename src/ipa/{simple => softisp}/algorithms/awb.cpp (88%) rename src/ipa/{simple => softisp}/algorithms/awb.h (85%) rename src/ipa/{simple => softisp}/algorithms/blc.cpp (93%) rename src/ipa/{simple => softisp}/algorithms/blc.h (91%) rename src/ipa/{simple => softisp}/algorithms/ccm.cpp (94%) rename src/ipa/{simple => softisp}/algorithms/ccm.h (93%) rename src/ipa/{simple => softisp}/algorithms/meson.build (75%) 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 (97%) rename src/ipa/{simple => softisp}/ipa_context.h (95%) rename src/ipa/{simple => softisp}/meson.build (78%) rename src/ipa/{simple => softisp}/module.h (82%) rename src/ipa/{simple/soft_simple.cpp => softisp/softisp.cpp} (81%)