| Message ID | 20260708-libipa-algorithms-v4-0-f0e99f035294@ideasonboard.com |
|---|---|
| Headers | show
Return-Path: <libcamera-devel-bounces@lists.libcamera.org> X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 7D612C3301 for <parsemail@patchwork.libcamera.org>; Wed, 8 Jul 2026 09:25:08 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id E315E66081; Wed, 8 Jul 2026 11:25:06 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="ugKwXmli"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 351C065FEF for <libcamera-devel@lists.libcamera.org>; Wed, 8 Jul 2026 11:25:05 +0200 (CEST) Received: from [192.168.1.182] (93-46-82-201.ip106.fastwebnet.it [93.46.82.201]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 48062E9C; Wed, 8 Jul 2026 11:24:15 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1783502655; bh=9bi+DBOGOyc++7DNkJO0uifoYBdtx/lBulP+TSGuilw=; h=From:Subject:Date:To:Cc:From; b=ugKwXmliELk7zY/7Sx6IZ/44vvaP0aWpcCYC5aOn1BH1Nl89pKdEHczMy0r9x1vSm odNHRubZVXwQFiDXd3WiE6BoObudreGlCLT09MUi0nJTDnSSycPvJa4zE0gbdK47P7 RYWFA0tci1HyyT+/6R6V104iQ+ZscPXa2Q+rIJl0= From: Jacopo Mondi <jacopo.mondi@ideasonboard.com> Subject: [PATCH v4 00/35] ipa: libipa: Introduce libipa algorithms Date: Wed, 08 Jul 2026 11:24:47 +0200 Message-Id: <20260708-libipa-algorithms-v4-0-f0e99f035294@ideasonboard.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-B4-Tracking: v=1; b=H4sIAGAXTmoC/33NQQ6CMBCF4auQrq0p09JSV97DuGhhgEmQktYQj eHuVje6QJf/S+abB0sYCRM7FA8WcaFEYcqhdgVrBjf1yKnNzUCAFrqs+EieZsfd2IdI1+GSeGW 11r5xwkHH8t0csaPb2zydcw+UriHe3y+W8rX+05aSC45W2cZKowDwSC26FCYfXGz3TbiwF7rAF wRyC4IMddYoKbsSUP2C5AcyQm9BMkNW16YyXsja+w1oXdcnXY3iWUsBAAA= X-Change-ID: 20260615-libipa-algorithms-59666bca0a2f To: libcamera-devel@lists.libcamera.org, Stefan Klug <stefan.klug@ideasonboard.com> Cc: Jacopo Mondi <jacopo.mondi@ideasonboard.com>, Kieran Bingham <kieran.bingham@ideasonboard.com>, Daniel Scally <dan.scally@ideasonboard.com>, Robert Mader <robert.mader@collabora.com>, Laurent Pinchart <laurent.pinchart@ideasonboard.com> X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=6844; i=jacopo.mondi@ideasonboard.com; h=from:subject:message-id; bh=9bi+DBOGOyc++7DNkJO0uifoYBdtx/lBulP+TSGuilw=; b=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBqThdr76c7mGwhwO1BXk2fLm+pkxnJ+rCZdcEmr 6AcCHWReDyJAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCak4XawAKCRByNAaPFqFW PDEJEACt/TEU+9CUTrITiQkMrX8pXK+Lrmq8s9Pz6OO8+XW1pwwMpeq7MMnUUNJNU+LQdaedwuz GGamU2OZz2YnpBpqupKM0f4yTOh8H4hK5cQwjMYK6LKcmcD7uQ1s3J8cy86XWR8Ng3sCKh0eOlG aNK9OCyLqk88wxsyq54rfDVPVw6d+2M/hbiqBX4s4kM2tAm1N1ZScU23XmttjxVnDGFKZQRtY7M aSQExPHDsphrB8vfWvV1xhRX719AXGlxWdUqx+3nsApgUB40Pi5efA3JYNax9RB+zPZgg290oKq hLi8oWXpWtMWqKSg6hOrPyb4iuUMv/bptnOGdLHJxfoFrD/GmzR/3u1SpYqfe1bkL8Tq8gv88J9 7ZlQ6UvJYVNnq6SbEdZELMdoHQLlsbYfRdvaKFyG6obz18LRHtDCpfOf7km6WB5ANcT+9LbXowp Ch2Aji3l8Jmwjl1uZKKWxvFz2J5LS9sAIRKOXVKE8qgPmSuPM7WQLXNxUYQB2PQSpjbjiyuNDPi Z/titX4SHzQG/hAT2eR3flTwXnJSw7ze4kwS3PJY1P+sNJn0LP1JyAeb7FwYzkn6vjp5aV98MsW oEB1v6Y0lOtQTmkh4/pLbDqA0tZrE/fYY3L/X4KiXSEVWr3dNuCEbOClZ8iClIwMbcqAVVF4rnD QGQX+Yd+De1V+8w== 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: <libcamera-devel.lists.libcamera.org> List-Unsubscribe: <https://lists.libcamera.org/options/libcamera-devel>, <mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe> List-Archive: <https://lists.libcamera.org/pipermail/libcamera-devel/> List-Post: <mailto:libcamera-devel@lists.libcamera.org> List-Help: <mailto:libcamera-devel-request@lists.libcamera.org?subject=help> List-Subscribe: <https://lists.libcamera.org/listinfo/libcamera-devel>, <mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe> Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" <libcamera-devel-bounces@lists.libcamera.org> |
| Series |
|
| Related |
show
|
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 <jacopo.mondi@ideasonboard.com> --- Changes in v4: - s/awb/AWB in comments everywhere, same for CCM and LSC - Awb: changelog per patch - Make AwbStats pure virtual and move stats parsing logic to the IPA modules - Reduce comments/renames to reduce patch size and comments - Collect tags 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<lsc::Components> 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 | 418 +++++++++++++++++--- src/ipa/libipa/awb.h | 100 ++++- src/ipa/libipa/awb_bayes.cpp | 52 +-- src/ipa/libipa/awb_bayes.h | 12 +- src/ipa/libipa/awb_grey.cpp | 16 +- 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 | 223 ++++++----- 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 | 3 + src/ipa/mali-c55/ipa_context.h | 20 +- src/ipa/mali-c55/mali-c55.cpp | 2 + src/ipa/mali-c55/params.h | 2 + src/ipa/rkisp1/algorithms/awb.cpp | 191 ++------- 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 | 432 +++------------------ 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, 2933 insertions(+), 1127 deletions(-) --- base-commit: 709ad59a8d90af3570be1c8d02dee0ec9e011954 change-id: 20260615-libipa-algorithms-59666bca0a2f Best regards,