[{"id":39642,"web_url":"https://patchwork.libcamera.org/comment/39642/","msgid":"<85v7apck9z.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","date":"2026-07-08T20:13:12","subject":"Re: [PATCH v5 00/36] ipa: libipa: Introduce libipa algorithms","submitter":{"id":177,"url":"https://patchwork.libcamera.org/api/people/177/","name":"Milan Zamazal","email":"mzamazal@redhat.com"},"content":"Hi Jacopo,\n\nthank you for the update.\n\nJacopo Mondi <jacopo.mondi@ideasonboard.com> writes:\n\n> This series introduces the first algorithms in libipa: Awb, Lsc and Ccm.\n>\n> As most of the implementations of the common algorithms derive from\n> RkISP1 it wasn't possible to separate the algorithm introduction with\n> the RkISP1 IPA modifications to maintain bisectability.\n>\n> This series contains:\n>\n> - Awb (Grey and Bayes)\n>  - RkISP1\n>  - Simple\n>  - Mali-C55\n>\n> - Ccm\n>  - RkISP1\n>  - Simple\n>  - Mali-C55\n>\n> - Lsc (grid and polynomial)\n>  - RkISP1\n>  - Mali-C55\n>\n> Tested on RkISP1 with imx219 (Grey world awb and grid-based LSC) and on\n> Mali-C55 with imx708 (Bayes AWB and grid-based LSC).\n>\n> More test on Simple and with polynomial LSC would be helpful :)\n\nSimple seems to work for me.  As for polynomial LSC, it does something\n(with the softISP LSC patches), probably meaningful, but not sure how to\ncheck correctness easily.\n\n> Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n> ---\n> Changes in v5:\n> - Add \"ipa: libipa: lsc_polynomial: Fix polynomial parsing error\"\n>   to fix and exiting potential issue with Polynomial parsing\n\nThanks, it fails gracefully now.\n\n> - Fix Simple, which I broke in v4, thanks Milan\n> - Link to v4: https://lore.kernel.org/r/20260708-libipa-algorithms-v4-0-f0e99f035294@ideasonboard.com\n>\n> Changes in v4:\n> - s/awb/AWB in comments everywhere, same for CCM and LSC\n> - Awb: changelog per patch\n>   - Make AwbStats pure virtual and move stats parsing logic to the IPA\n>     modules\n>   - Reduce comments/renames to reduce patch size and comments\n> - Collect tags\n>\n> Changes in v3:\n> - Address comments on Awb from Stefan:\n>   - Introduce AwbImplementation::Result\n>   - Move AwbStats implementation to IPAs\n>   - Drop AwbStats::rg()/bg() and re-implement AwbGray accordingly\n> - Fix Saturation bug in Simple Ccm algorithm\n> - Fix Simple Ccm gain limits using Q<2, 8>\n> - Update Mali CCM and Gamma to latest uAPI patch version\n> - Fix Mali CCM gain masking as reported by Dan\n> - Break down libIPA Lsc implementation as requested by Stefan\n>\n> Changes in v2:\n> - Introduce awb::Context to simplify ActiveState and FrameContext\n>   definition\n> - Add mali uAPI header for CCM and Gamma\n> - Do not rename Mali functions for hardware configuration in awb and lsc\n> - Spelling and documentation\n>\n> ---\n> Jacopo Mondi (33):\n>       ipa: libipa: awb: Reimplement AwbAlgorithm\n>       ipa: mali-c55: awb: Port to use libipa AwbAlgorithm\n>       ipa: libipa: Add CcmAlgorithm to libipa\n>       ipa: rkisp1: ccm: Port to use CcmAlgorithm\n>       include: linux: mali-c55: Update to support CCM and Gamma\n>       ipa: mali-c55: Implement Ccm algorithm\n>       ipa: rkisp1: lsc: Re-architecture Lsc support\n>       ipa: libipa: Introduce lsc_base.h\n>       ipa: libipa: lsc_polynomial: Fix polynomial parsing error\n>       ipa: libipa: lsc_polynomial: Rename LscPolynomial\n>       ipa: libipa: lsc_polynomial: Do not inline functions\n>       ipa: libipa: lsc: Move Interpolator<lsc::Components> to lsc_base\n>       ipa: rkisp1: lsc: Remove rogue empty line\n>       ipa: libipa: lsc_polynomial: Move LscPolynomial from RkISP1\n>       ipa: libipa: lsc_table: Move LscTable from RkISP1\n>       ipa: libipa: lsc_base: Add sampleForCrop documentation\n>       ipa: rksip1: lsc: Make parseSizes() a class function\n>       ipa: libipa: lsc: Introduce lsc::ActiveState\n>       ipa: libipa: lsc: Introduce lsc::FrameContext\n>       ipa: libipa: lsc: Introduce LscAlgorithm\n>       ipa: libipa: lsc: Move sizesListToPositions() back to rkisp1\n>       ipa: rkisp1: lsc: Port to use LscAlgorithm\n>       ipa: libipa: lsc: Make Components a map<>\n>       ipa: libipa: lsc: Document Components parsing\n>       ipa: libipa: lsc_polynomial: Remove sensorSize_\n>       ipa: libipa: lsc: Document LscDescriptor::sensorSize usage\n>       ipa: libipa: lsc: Template LscAlgorithm with register format\n>       ipa: libipa: lsc_base: Describe the function of lsc_base\n>       ipa: libipa: lsc: Template lsc::Components\n>       ipa: libipa: lsc: Rename sampleForCrop to resampleLscData\n>       ipa: libipa: lsc: Specialize Interpolator for uint8_t\n>       ipa: mali-c55: Add sensorInfo to IPAContext\n>       ipa: mali-c55: Port to use LscAlgorithm\n>\n> Kieran Bingham (2):\n>       ipa: simple: awb: Port to use libipa AwbAlgorithm\n>       ipa: simple: Use libipa CcmAlgorithm\n>\n> Laurent Pinchart (1):\n>       ipa: libipa: lsc_polynomial: Don't inline ValueNode accessor\n>\n>  .../internal/software_isp/debayer_params.h         |   4 +-\n>  include/linux/media/arm/mali-c55-config.h          |  86 +++-\n>  src/ipa/libipa/awb.cpp                             | 418 +++++++++++++++++---\n>  src/ipa/libipa/awb.h                               | 100 ++++-\n>  src/ipa/libipa/awb_bayes.cpp                       |  52 +--\n>  src/ipa/libipa/awb_bayes.h                         |  12 +-\n>  src/ipa/libipa/awb_grey.cpp                        |  16 +-\n>  src/ipa/libipa/awb_grey.h                          |   6 +-\n>  src/ipa/libipa/ccm.cpp                             | 245 ++++++++++++\n>  src/ipa/libipa/ccm.h                               |  77 ++++\n>  src/ipa/libipa/lsc.cpp                             | 311 +++++++++++++++\n>  src/ipa/libipa/lsc.h                               | 137 +++++++\n>  src/ipa/libipa/lsc_base.cpp                        | 178 +++++++++\n>  src/ipa/libipa/lsc_base.h                          |  90 +++++\n>  src/ipa/libipa/lsc_polynomial.cpp                  | 177 ++++++++-\n>  src/ipa/libipa/lsc_polynomial.h                    | 152 +++++---\n>  src/ipa/libipa/lsc_table.cpp                       |  40 ++\n>  src/ipa/libipa/lsc_table.h                         | 118 ++++++\n>  src/ipa/libipa/meson.build                         |   8 +\n>  src/ipa/mali-c55/algorithms/awb.cpp                | 223 ++++++-----\n>  src/ipa/mali-c55/algorithms/awb.h                  |  28 +-\n>  src/ipa/mali-c55/algorithms/ccm.cpp                | 173 +++++++++\n>  src/ipa/mali-c55/algorithms/ccm.h                  |  66 ++++\n>  src/ipa/mali-c55/algorithms/lsc.cpp                | 156 +++++---\n>  src/ipa/mali-c55/algorithms/lsc.h                  |  32 +-\n>  src/ipa/mali-c55/algorithms/meson.build            |   1 +\n>  src/ipa/mali-c55/ipa_context.cpp                   |   3 +\n>  src/ipa/mali-c55/ipa_context.h                     |  20 +-\n>  src/ipa/mali-c55/mali-c55.cpp                      |   2 +\n>  src/ipa/mali-c55/params.h                          |   2 +\n>  src/ipa/rkisp1/algorithms/awb.cpp                  | 191 ++-------\n>  src/ipa/rkisp1/algorithms/awb.h                    |  18 +-\n>  src/ipa/rkisp1/algorithms/ccm.cpp                  |  97 +----\n>  src/ipa/rkisp1/algorithms/ccm.h                    |  17 +-\n>  src/ipa/rkisp1/algorithms/lsc.cpp                  | 432 +++------------------\n>  src/ipa/rkisp1/algorithms/lsc.h                    |  41 +-\n>  src/ipa/rkisp1/ipa_context.h                       |  49 +--\n>  src/ipa/simple/algorithms/awb.cpp                  | 141 +++++--\n>  src/ipa/simple/algorithms/awb.h                    |  29 ++\n>  src/ipa/simple/algorithms/blc.cpp                  |   2 +-\n>  src/ipa/simple/algorithms/ccm.cpp                  |  72 ++--\n>  src/ipa/simple/algorithms/ccm.h                    |  23 +-\n>  src/ipa/simple/ipa_context.h                       |  15 +-\n>  src/libcamera/software_isp/debayer_cpu.cpp         |  12 +-\n>  44 files changed, 2945 insertions(+), 1127 deletions(-)\n> ---\n> base-commit: 709ad59a8d90af3570be1c8d02dee0ec9e011954\n> change-id: 20260615-libipa-algorithms-59666bca0a2f\n>\n> Best regards,","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id F23B2C3318\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  8 Jul 2026 20:13:24 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 15ED1660B8;\n\tWed,  8 Jul 2026 22:13:24 +0200 (CEST)","from us-smtp-delivery-124.mimecast.com\n\t(us-smtp-delivery-124.mimecast.com [170.10.133.124])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 77BB26608D\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  8 Jul 2026 22:13:22 +0200 (CEST)","from mail-wm1-f70.google.com (mail-wm1-f70.google.com\n\t[209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS\n\t(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n\tus-mta-428-_GU4volKNFyYbZbosdukRw-1; Wed, 08 Jul 2026 16:13:19 -0400","by mail-wm1-f70.google.com with SMTP id\n\t5b1f17b1804b1-493bd1716b4so6062005e9.3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 08 Jul 2026 13:13:19 -0700 (PDT)","from mzamazal-thinkpadp1gen7.tpbc.csb\n\t(ip-77-48-47-4.net.vodafone.cz. [77.48.47.4])\n\tby smtp.gmail.com with ESMTPSA id\n\t5b1f17b1804b1-493eb6ff432sm3016235e9.4.2026.07.08.13.13.16\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tWed, 08 Jul 2026 13:13:17 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=redhat.com header.i=@redhat.com\n\theader.b=\"ZWCNYkyJ\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1783541601;\n\th=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n\tto:to:cc:cc:mime-version:mime-version:content-type:content-type:\n\tin-reply-to:in-reply-to:references:references;\n\tbh=CeNLlfHipFF7IsMZzF8SqPeua9IZgYzpXAgAGMxoYQQ=;\n\tb=ZWCNYkyJWuVwDGxUr5+DcpibK8DncY7bs+CE0boUzltpACoZDjwP8iHpwEjR6oNc+CtlyR\n\t/ZRicKzhwuubiFI6GY38WQMMiiV2H9cX9COBZGKztzIR+fjZofHWO/l/H5q6z5PJf8Bz2x\n\tA7MBbXRuEBzAVfe4cJmTglDTlPmRkcY=","X-MC-Unique":"_GU4volKNFyYbZbosdukRw-1","X-Mimecast-MFC-AGG-ID":"_GU4volKNFyYbZbosdukRw_1783541598","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20251104; t=1783541598; x=1784146398;\n\th=content-type:mime-version:user-agent:message-id:date:references\n\t:in-reply-to:subject:cc:to:from:x-gm-gg:x-gm-message-state:from:to\n\t:cc:subject:date:message-id:reply-to:content-type;\n\tbh=CeNLlfHipFF7IsMZzF8SqPeua9IZgYzpXAgAGMxoYQQ=;\n\tb=nF1gpOHWNhvupjYrIt9Ui2j1Zpi3/k6QrlfcVrerKF3kVtNsBMSNP47lsR51YfnQHu\n\tlf+b7gOUiDi0lnXUxoJTeEfCG9FdoPuTXv6N00EkMY1faNZLEs83fm3T5naIX3ll0Z2c\n\taQDKqhNtnb2AiA4t+6rx8xVDxb/Z8f+FLyhqrHSvRZq+HSmCxS+f6s6bqhtQquHpgQtu\n\ttcJ7Qp1muJxGiLjp0CPO6eW0Ibv03xuPTgopB4yN3JTpWXrLdxHMAGdLgLZM8EShOSb5\n\t0CrMWzHSJtg+5f8o/ZIOYMGTbNNU0+Q/6sYFLLg22Xci+ZjIefiEDfS5rwwgPw32yVaL\n\tL+yw==","X-Gm-Message-State":"AOJu0YyWwvr2o+4Q2+AEGf+tGH9ua/v3aFZ4iD8XU4o0HSN4asoXnpu/\n\tmuozhsJoEG+6Z7wGbFsL1gsACqRXqA4Ei+C5cmZ04bwZKXfhguNAIaNYi69YMLoE43CSFHVGKm9\n\tXXEa5HF9c9MG8RoCoKRUTWl2QiC0zfLS/SRyYKANfQIiySNe7FI95/bQ1x6WDlc1LoerkIBmRmG\n\tA=","X-Gm-Gg":"AfdE7clwuWffUGwxSWQbcYc4u66XbR0steVIDVRE8bexGqOIx62C7m/GtuWygTV7mLX\n\t2FRghuDcBPfA8AsXhvcr0sx1kWSeJjl2YK7ybvruVchWxYFb8N+o/xamvAhwCOuGwAbBA2mE6Af\n\tts0JoxMal2PvlyE8W8zZH5fOyrgIXGEojPoX8scb2+I2l54sisrh/k1IWXv6zUjyAmbmlU+fl6T\n\tGxzrz5jQ2HBRbLG/DdGi0gcT8Ng/J91CPtH+9NDMyOYwFYoxJXJs7mQq3G63JYsF0hUYCKe6jxb\n\tmiaFgbwEr48Uo72hNZy1ByfM4nHuSWyHVYjejWW6liqs4dcvNAuq2TgxHFJtz51inGefrmxjffB\n\tOegUvJTqKt19+1oDsmv38PY2aUBS+Y60w6W+WJinLWKoRoqCLKuWkPMNDkj20UuAX","X-Received":["by 2002:a05:600c:4594:b0:493:bc4a:d5f5 with SMTP id\n\t5b1f17b1804b1-493e68809aamr38578355e9.39.1783541598118; \n\tWed, 08 Jul 2026 13:13:18 -0700 (PDT)","by 2002:a05:600c:4594:b0:493:bc4a:d5f5 with SMTP id\n\t5b1f17b1804b1-493e68809aamr38577905e9.39.1783541597689; \n\tWed, 08 Jul 2026 13:13:17 -0700 (PDT)"],"From":"Milan Zamazal <mzamazal@redhat.com>","To":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org,  Stefan Klug\n\t<stefan.klug@ideasonboard.com>,  Kieran Bingham\n\t<kieran.bingham@ideasonboard.com>,  Daniel Scally\n\t<dan.scally@ideasonboard.com>,\n\tRobert Mader <robert.mader@collabora.com>, \n\tLaurent Pinchart <laurent.pinchart@ideasonboard.com>","Subject":"Re: [PATCH v5 00/36] ipa: libipa: Introduce libipa algorithms","In-Reply-To":"<20260708-libipa-algorithms-v5-0-0759d0359f52@ideasonboard.com>\n\t(Jacopo Mondi's message of \"Wed, 08 Jul 2026 17:50:42 +0200\")","References":"<20260708-libipa-algorithms-v5-0-0759d0359f52@ideasonboard.com>","Date":"Wed, 08 Jul 2026 22:13:12 +0200","Message-ID":"<85v7apck9z.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","User-Agent":"Gnus/5.13 (Gnus v5.13)","MIME-Version":"1.0","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"VTwDNGCJ20yTluSOODej9HiG9GrkIOrhQvpVtxmxV08_1783541598","X-Mimecast-Originator":"redhat.com","Content-Type":"text/plain","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]