From patchwork Mon Jul 6 08:01:20 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 27200 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 74306C3308 for ; Mon, 6 Jul 2026 08:01:59 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 5605C65FFE; Mon, 6 Jul 2026 10:01:58 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="rdj/u/SV"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 11AD765EFF for ; Mon, 6 Jul 2026 10:01:57 +0200 (CEST) Received: from [192.168.125.177] (mob-109-113-60-81.net.vodafone.it [109.113.60.81]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id DA59E9CE; Mon, 6 Jul 2026 10:01:07 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1783324868; bh=lmpNA7iOrnlZDs3RjZosRoaZ+4GqvpYGLhrwD6AjRnU=; h=From:Subject:Date:To:Cc:From; b=rdj/u/SVadjmWfMquEX8uR8IO8HFL6GpxuXAk+P89acFW04l7HmxpvdbpUOrb/YFF +PeYxcsgz7T9TXhwNGGGw1+mZ+usjQ485YFM/c1xHso7s0gVfoHa2pBQT++CnL/cym do+TGJGtB1zWA/hVa2NlplhXLTP611osesiDSaoo= From: Jacopo Mondi Subject: [PATCH v3 00/35] ipa: libipa: Introduce libipa algorithms Date: Mon, 06 Jul 2026 10:01:20 +0200 Message-Id: <20260706-libipa-algorithms-v3-0-968757b038bb@ideasonboard.com> MIME-Version: 1.0 X-B4-Tracking: v=1; b=H4sIANBgS2oC/33NQQ6DIBCF4as0rEsDA2LoqvdoukAddBIVA8a0M d696KoL0+X/kvlmZQkjYWL3y8oiLpQojDnU9cLqzo0tcmpyMxBghJEF76miyXHXtyHS3A2JF9Y YU9VOOPAs300RPb0P8/nK3VGaQ/wcLxa5r/+0RXLB0WpbW1VqAHxQgy6FsQouNrc6DGxHF/iBQ J1BkCFvS62Ul4D6DNq27QvqZhD0AgEAAA== X-Change-ID: 20260615-libipa-algorithms-59666bca0a2f To: libcamera-devel@lists.libcamera.org, Stefan Klug Cc: Jacopo Mondi , Kieran Bingham , Daniel Scally , Laurent Pinchart X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=6571; i=jacopo.mondi@ideasonboard.com; h=from:subject:message-id; bh=lmpNA7iOrnlZDs3RjZosRoaZ+4GqvpYGLhrwD6AjRnU=; b=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBqS2DuHT++5/8Nw0LqhlZxErJnXM/00rH4bnVSJ JadpcafmDOJAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCaktg7gAKCRByNAaPFqFW POFZD/4rS3B6ppRLclHLEPA/sfKvc1tEvII8pn9veDeOW0RNJXUBkAVG+ERga+KwhPs7Y6NSBcZ qldjubjcpOgFHQF3+bHJO3GAxJl3ZF6qrVgwSalH/8fazhjcKSuK/xUl3vubiK4pkidj7WBPRFV 7vIHhxA7q/IMpGt4XnNcEdLhI9i2UG5R5recW5x4v7FKPBCxyArZ7L1ipCNWwMgrZ0VGS74jep2 7Rz+VvedLEndJQvvcmxsxrcyQPxyUQyXsO/ez/LXtY/DZAauGEpBUmC8xmbCZiqV5gmwBfnIJVn xYnG5taB/SkuHS4guY7s5HFmz4y+cnV7xH8zgsB1PhXXWnTyFApPkrcRwUqB70yh7QGxVvI4Msi 6FLRygq5p39LVDa5Mfxcxszw1EkkpHXOCKms+NKJEg3w+8vVLui4QO7x8jXEJnhO2gWV6SSLCTB O4qsdbigsDJgV5+h5E5LhuBbjbeH+BtWo6TaT59TfQUA4pJ25mP7qhZ1eT2N3WKIvqfE1okI5+x gWpSlKqFKcTGtxjWb8a6hdBcbjm6cAZCCGuW/w2ryCqruaFGzSmU6vnbb0AlmTIknUMjq2pMGY7 k+Wzw/bbxXwYsr7hPmecE5IKT/dsvsHWlr60m3l+cmnQlTOHKqnqoWBn/+ns+29JTNjK0xDkg9m Qamhv0jRDkS590Q== X-Developer-Key: i=jacopo.mondi@ideasonboard.com; a=openpgp; fpr=72392EDC88144A65C701EA9BA5826A2587AD026B 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" This series introduces the first algorithms in libipa: Awb, Lsc and Ccm. As most of the implementations of the common algorithms derive from RkISP1 it wasn't possible to separate the algorithm introduction with the RkISP1 IPA modifications to maintain bisectability. This series contains: - Awb (Grey and Bayes) - RkISP1 - Simple - Mali-C55 - Ccm - RkISP1 - Simple - Mali-C55 - Lsc (grid and polynomial) - RkISP1 - Mali-C55 Tested on RkISP1 with imx219 (Grey world awb and grid-based LSC) and on Mali-C55 with imx708 (Bayes AWB and grid-based LSC). More test on Simple and with polynomial LSC would be helpful :) Signed-off-by: Jacopo Mondi --- Changes in v3: - Address comments on Awb from Stefan: - Introduce AwbImplementation::Result - Move AwbStats implementation to IPAs - Drop AwbStats::rg()/bg() and re-implement AwbGray accordingly - Fix Saturation bug in Simple Ccm algorithm - Fix Simple Ccm gain limits using Q<2, 8> - Update Mali CCM and Gamma to latest uAPI patch version - Fix Mali CCM gain masking as reported by Dan - Break down libIPA Lsc implementation as requested by Stefan Changes in v2: - Introduce awb::Context to simplify ActiveState and FrameContext definition - Add mali uAPI header for CCM and Gamma - Do not rename Mali functions for hardware configuration in awb and lsc - Spelling and documentation --- Jacopo Mondi (32): ipa: libipa: awb: Reimplement AwbAlgorithm ipa: mali-c55: awb: Port to use libipa AwbAlgorithm ipa: libipa: Add CcmAlgorithm to libipa ipa: rkisp1: ccm: Port to use CcmAlgorithm include: linux: mali-c55: Update to support CCM and Gamma ipa: mali-c55: Implement Ccm algorithm ipa: rkisp1: lsc: Re-architecture Lsc support ipa: libipa: Introduce lsc_base.h ipa: libipa: lsc_polynomial: Rename LscPolynomial ipa: libipa: lsc_polynomial: Do not inline functions ipa: libipa: lsc: Move Interpolator to lsc_base ipa: rkisp1: lsc: Remove rogue empty line ipa: libipa: lsc_polynomial: Move LscPolynomial from RkISP1 ipa: libipa: lsc_table: Move LscTable from RkISP1 ipa: libipa: lsc_base: Add sampleForCrop documentation ipa: rksip1: lsc: Make parseSizes() a class function ipa: libipa: lsc: Introduce lsc::ActiveState ipa: libipa: lsc: Introduce lsc::FrameContext ipa: libipa: lsc: Introduce LscAlgorithm ipa: libipa: lsc: Move sizesListToPositions() back to rkisp1 ipa: rkisp1: lsc: Port to use LscAlgorithm ipa: libipa: lsc: Make Components a map<> ipa: libipa: lsc: Document Components parsing ipa: libipa: lsc_polynomial: Remove sensorSize_ ipa: libipa: lsc: Document LscDescriptor::sensorSize usage ipa: libipa: lsc: Template LscAlgorithm with register format ipa: libipa: lsc_base: Describe the function of lsc_base ipa: libipa: lsc: Template lsc::Components ipa: libipa: lsc: Rename sampleForCrop to resampleLscData ipa: libipa: lsc: Specialize Interpolator for uint8_t ipa: mali-c55: Add sensorInfo to IPAContext ipa: mali-c55: Port to use LscAlgorithm Kieran Bingham (2): ipa: simple: awb: Port to use libipa AwbAlgorithm ipa: simple: Use libipa CcmAlgorithm Laurent Pinchart (1): ipa: libipa: lsc_polynomial: Don't inline ValueNode accessor .../internal/software_isp/debayer_params.h | 4 +- include/linux/media/arm/mali-c55-config.h | 86 +++- src/ipa/libipa/awb.cpp | 472 ++++++++++++++++++--- src/ipa/libipa/awb.h | 109 ++++- src/ipa/libipa/awb_bayes.cpp | 52 +-- src/ipa/libipa/awb_bayes.h | 12 +- src/ipa/libipa/awb_grey.cpp | 25 +- src/ipa/libipa/awb_grey.h | 6 +- src/ipa/libipa/ccm.cpp | 245 +++++++++++ src/ipa/libipa/ccm.h | 77 ++++ src/ipa/libipa/lsc.cpp | 311 ++++++++++++++ src/ipa/libipa/lsc.h | 137 ++++++ src/ipa/libipa/lsc_base.cpp | 178 ++++++++ src/ipa/libipa/lsc_base.h | 90 ++++ src/ipa/libipa/lsc_polynomial.cpp | 175 +++++++- src/ipa/libipa/lsc_polynomial.h | 152 ++++--- src/ipa/libipa/lsc_table.cpp | 40 ++ src/ipa/libipa/lsc_table.h | 118 ++++++ src/ipa/libipa/meson.build | 8 + src/ipa/mali-c55/algorithms/awb.cpp | 213 +++++----- src/ipa/mali-c55/algorithms/awb.h | 28 +- src/ipa/mali-c55/algorithms/ccm.cpp | 173 ++++++++ src/ipa/mali-c55/algorithms/ccm.h | 66 +++ src/ipa/mali-c55/algorithms/lsc.cpp | 156 ++++--- src/ipa/mali-c55/algorithms/lsc.h | 32 +- src/ipa/mali-c55/algorithms/meson.build | 1 + src/ipa/mali-c55/ipa_context.cpp | 6 + src/ipa/mali-c55/ipa_context.h | 24 +- src/ipa/mali-c55/mali-c55.cpp | 29 +- src/ipa/mali-c55/params.h | 2 + src/ipa/rkisp1/algorithms/awb.cpp | 360 +++++----------- src/ipa/rkisp1/algorithms/awb.h | 18 +- src/ipa/rkisp1/algorithms/ccm.cpp | 97 +---- src/ipa/rkisp1/algorithms/ccm.h | 17 +- src/ipa/rkisp1/algorithms/lsc.cpp | 430 +++---------------- src/ipa/rkisp1/algorithms/lsc.h | 41 +- src/ipa/rkisp1/ipa_context.h | 49 +-- src/ipa/simple/algorithms/awb.cpp | 131 ++++-- src/ipa/simple/algorithms/awb.h | 29 ++ src/ipa/simple/algorithms/blc.cpp | 2 +- src/ipa/simple/algorithms/ccm.cpp | 72 ++-- src/ipa/simple/algorithms/ccm.h | 23 +- src/ipa/simple/ipa_context.h | 15 +- src/libcamera/software_isp/debayer_cpu.cpp | 12 +- 44 files changed, 3067 insertions(+), 1256 deletions(-) --- base-commit: 709ad59a8d90af3570be1c8d02dee0ec9e011954 change-id: 20260615-libipa-algorithms-59666bca0a2f Best regards,