[{"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>"}},{"id":39644,"web_url":"https://patchwork.libcamera.org/comment/39644/","msgid":"<ak9MR_fLoPRJBmK7@zed>","date":"2026-07-09T07:25:09","subject":"Re: [PATCH v5 00/36] ipa: libipa: Introduce libipa algorithms","submitter":{"id":143,"url":"https://patchwork.libcamera.org/api/people/143/","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"content":"Hi Milan\n\nOn Wed, Jul 08, 2026 at 10:13:12PM +0200, Milan Zamazal wrote:\n> Hi Jacopo,\n>\n> thank you for the update.\n>\n> Jacopo 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>\n> Simple 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\n> check correctness easily.\n\nWhat are you using to generate polynomial LSC tuning files ?\n\nOn correctness, I guess it would require pointing the camera to a\nuniform surface and make sure (programmatically or visually) the halo\neffect disappear (or at least gets reduced) when LSC is enabled ?\n\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>\n> Thanks, it fails gracefully now.\n>\n\nGreat, thanks for spotting the issue in first place\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,\n>","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 D0A47C3301\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  9 Jul 2026 07:25:15 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C3B68660BE;\n\tThu,  9 Jul 2026 09:25:14 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 484A165F9F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  9 Jul 2026 09:25:13 +0200 (CEST)","from ideasonboard.com (net-93-65-100-155.cust.vodafonedsl.it\n\t[93.65.100.155])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 8A4C712F;\n\tThu,  9 Jul 2026 09:24:22 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"Yaya6zlZ\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1783581862;\n\tbh=/jO20PHpSrDKvcZ5fi2inN1y6kMEJeDE1PfLdwwiz7w=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=Yaya6zlZqDyhPhX2ziLAc4C2ontswpCkxYEGpl9UbWRooV0Bp04skwBfDQHdrAVeE\n\tVWqXvIb1err5m8SddBi4UgjA9LBlqRLsLmuz/I6P9Og0TSoQdmKdPUhWlK7PDSLOp3\n\t6SFvrrlVds88Sb7xmLJZCnEYH4Sfkpf4F2tD2lp0=","Date":"Thu, 9 Jul 2026 09:25:09 +0200","From":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","To":"Milan Zamazal <mzamazal@redhat.com>","Cc":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>, \n\tlibcamera-devel@lists.libcamera.org,\n\tStefan Klug <stefan.klug@ideasonboard.com>, \n\tKieran Bingham <kieran.bingham@ideasonboard.com>,\n\tDaniel Scally <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","Message-ID":"<ak9MR_fLoPRJBmK7@zed>","References":"<20260708-libipa-algorithms-v5-0-0759d0359f52@ideasonboard.com>\n\t<85v7apck9z.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<85v7apck9z.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","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>"}},{"id":39645,"web_url":"https://patchwork.libcamera.org/comment/39645/","msgid":"<85jyr4wqtb.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","date":"2026-07-09T07:44:00","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":"Jacopo Mondi <jacopo.mondi@ideasonboard.com> writes:\n\n> Hi Milan\n>\n> On Wed, Jul 08, 2026 at 10:13:12PM +0200, Milan Zamazal wrote:\n>> Hi Jacopo,\n>>\n>> thank you for the update.\n>>\n>> Jacopo 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>>\n>> Simple 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\n>> check correctness easily.\n>\n> What are you using to generate polynomial LSC tuning files ?\n\nNothing.  I try to use artificial values that should produce a very\nvisible and predictable effect.  (Which cannot test exact correctness\nbut can serve well for basic sanity testing.)\n\n> On correctness, I guess it would require pointing the camera to a\n> uniform surface and make sure (programmatically or visually) the halo\n> effect disappear (or at least gets reduced) when LSC is enabled ?\n>\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>>\n>> Thanks, it fails gracefully now.\n>>\n>\n> Great, thanks for spotting the issue in first place\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,\n>>","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 2556CC3318\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  9 Jul 2026 07:44:09 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C7BFD660D4;\n\tThu,  9 Jul 2026 09:44:08 +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 C9F1A660BA\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  9 Jul 2026 09:44:07 +0200 (CEST)","from mail-wm1-f69.google.com (mail-wm1-f69.google.com\n\t[209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS\n\t(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n\tus-mta-208-Tf5rGY0hOeiSkEwm-TbFXg-1; Thu, 09 Jul 2026 03:44:04 -0400","by mail-wm1-f69.google.com with SMTP id\n\t5b1f17b1804b1-493bd1716b4so8272805e9.3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 09 Jul 2026 00:44:04 -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-493eb6cccfdsm40037635e9.1.2026.07.09.00.44.02\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tThu, 09 Jul 2026 00:44:02 -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=\"ejw3RcRq\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1783583046;\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=VGUbSWXSfiVbmlN0lTSIFM8PnRm120Lz/McAQdiNqNc=;\n\tb=ejw3RcRqlMgyHeGmASKkB0iGVfxqYmGzxoUN4ylynCobAsVTsVdJNAZR0Fkywk4VT48glo\n\tD6aoAmwKHbjYtqJMRxzRKAxwBQicHCM6rjb7gJrIrOSR9oRY5IHTuP8/y9nZ9B5g8wf3qu\n\t9DKduVUnqre7BtOXqekfvRT4jBOyGSw=","X-MC-Unique":"Tf5rGY0hOeiSkEwm-TbFXg-1","X-Mimecast-MFC-AGG-ID":"Tf5rGY0hOeiSkEwm-TbFXg_1783583044","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20251104; t=1783583043; x=1784187843;\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=VGUbSWXSfiVbmlN0lTSIFM8PnRm120Lz/McAQdiNqNc=;\n\tb=mpd/NitiV61BprCmLUYQhsBx2ef0yhKSEJBTMwqN4+fDNrMWQvpv2KinmgTPXCE61n\n\tqzEJY6P3tmLdRF+QoiyM2KxE9EtKOK8/J3/tK+gGHInWOza3Y4wFQqtu0gHbw4EKrtPq\n\tsLB3pM4JwpV7guI07Um4BiglVCMQtbh1jZTM/KeFOKQZXEZR7XujYNYi0H4aIRWZNHbt\n\t+tPa4wUTzbZW5iTzadm+A/n4XMlZzXMnW6eKh60aavxj0AUPFTymVvdk688M66+ZuMN5\n\tNWZN4URVVCOO2O41TvZDXm7dpGzNMiOwwdiIzjydxdjzGTZV0QIpchGZ9SNY6hVXRpIV\n\tNGZQ==","X-Gm-Message-State":"AOJu0YzxtXy9QLEd4kNMUMu25mJhN7Glcv1BSH6WE+MTrKKMgDQB9vEF\n\tybf+VRYZW9CXxptKpU+StPqnd4Hr6fgHBejCwbvUoxVk20S9mFkcWkA6FFm1AR+q3Ck1F8Kav4q\n\tsFuHMe6Bqcq6bPSF/JR3vvBSPE4X9vC+VWRuVDxKjPJYAQaArzsL20S3E2aoz+cxScVmsOfoLIt\n\to=","X-Gm-Gg":"AfdE7cnsKMQwlMEY4TbhJQCYHv0+MA8Xxr7RDAVsMyRgKTCQsc/F1tTLdIFuaOxKxFW\n\tem3LDNNscPyhdAVrx9jiRMft5k/QWZrphUTfp1bOdVKz3hy7x7gDyW9cI6CsLLFNljn+GaiDbX6\n\ttOvYiF34ad+duus9ZMfHwPEvJjdqqfxkD2cbmCvSZfV+jHVvhfLYuG32r1iHGDWeCtL1M2inVRO\n\t7J7ooM0liK1IjfQtNLxZQSiMtZc2IIsKf7N/UuNy1o71G2AUIO/MEQCihYAy05w7MlK7y33UJRZ\n\tWu0UKf//41FtR5qCoBVUbZ9I4Fo6qRN9DYyaNHkeqW9INXMfpvu1KLjz06+XBt2l1aC7LObrluD\n\tmRSTkh/AnYM5uTwF6US0F5kMwBcfOB+YJ0DAFwFdU9EWoOdhSUN8Vi6drL34AOPJ2","X-Received":["by 2002:a05:600c:6091:b0:493:c83b:50d7 with SMTP id\n\t5b1f17b1804b1-493e6831575mr54141735e9.6.1783583043568; \n\tThu, 09 Jul 2026 00:44:03 -0700 (PDT)","by 2002:a05:600c:6091:b0:493:c83b:50d7 with SMTP id\n\t5b1f17b1804b1-493e6831575mr54141405e9.6.1783583043146; \n\tThu, 09 Jul 2026 00:44:03 -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":"<ak9MR_fLoPRJBmK7@zed> (Jacopo Mondi's message of \"Thu, 9 Jul\n\t2026 09:25:09 +0200\")","References":"<20260708-libipa-algorithms-v5-0-0759d0359f52@ideasonboard.com>\n\t<85v7apck9z.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>\n\t<ak9MR_fLoPRJBmK7@zed>","Date":"Thu, 09 Jul 2026 09:44:00 +0200","Message-ID":"<85jyr4wqtb.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":"PqibJjV8t4obcEYQWJyhDADJfdqbIS-5_Zw0v0YVDSI_1783583044","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>"}},{"id":39686,"web_url":"https://patchwork.libcamera.org/comment/39686/","msgid":"<854ii290i7.fsf@mzamazal-thinkpadp1gen7.tpbc.csb>","date":"2026-07-13T19:02:08","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\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\n\nI tested with software ISP once again, both GPU and CPU, and I haven't\nnoticed any issue.\n\nTested-by: Milan Zamazal <mzamazal@redhat.com> (software ISP)\n\n> and with polynomial LSC would be helpful :)\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> - 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 68F32C3264\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 13 Jul 2026 19:02:31 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 4BB1F6611F;\n\tMon, 13 Jul 2026 21:02:30 +0200 (CEST)","from us-smtp-delivery-124.mimecast.com\n\t(us-smtp-delivery-124.mimecast.com [170.10.129.124])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 8BDED6604D\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 13 Jul 2026 21:02:27 +0200 (CEST)","from mail-wm1-f72.google.com (mail-wm1-f72.google.com\n\t[209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS\n\t(version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n\tus-mta-127-FZFCoGGBNWOec2cZ6fuVZg-1; Mon, 13 Jul 2026 15:02:15 -0400","by mail-wm1-f72.google.com with SMTP id\n\t5b1f17b1804b1-492488f8583so50717695e9.2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 13 Jul 2026 12:02:14 -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-495087384casm15412615e9.8.2026.07.13.12.02.09\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tMon, 13 Jul 2026 12:02:09 -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=\"Q6ysoaCy\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1783969344;\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=7TSJ4YDvZ4n3264zQJFhMi9W4IJHTah01lXvA8qtKjs=;\n\tb=Q6ysoaCyktlMnXt6lCvoeM1b6iIUAT4VXMdnsCYRjTJTv3BhvjBWzyEoWOfd0WPGaK7XG/\n\tg+X3HeyCnFVxbAZZMXPdjY69kJSANH0Axs+WrwfXLDEnSRN33jJna96A/B4141pgGb+a9F\n\tf6GnJ+hmWisxZpxN6sSHa1d82vUdorI=","X-MC-Unique":"FZFCoGGBNWOec2cZ6fuVZg-1","X-Mimecast-MFC-AGG-ID":"FZFCoGGBNWOec2cZ6fuVZg_1783969333","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20251104; t=1783969333; x=1784574133;\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=7TSJ4YDvZ4n3264zQJFhMi9W4IJHTah01lXvA8qtKjs=;\n\tb=fx2OslOmGhftX7KsIp2rZz+jyYWgjciTzwSblCkVpBjZuvsepxg/NCp6ZmV+GptKr2\n\tAhJvzv0xWxqAZrqu+A6wse69nVtgP+/OEyf3qd4pW/6fePuGK6Swxf97PbsHtgKDlTK2\n\tUFdTqC48QQFlvF9icRxYjHSiFOYotO0KKUUsQSDEwfYDEVqFDGK5ZRHw807/ELNaNXWr\n\t5iJNf5hrAsG/Je+gl9KYhvM36+RYiy8iw7uFobSHgaTTpl5q2fDEb1FCNHMb6eDNAUT+\n\tGOykWadrG1dUT46aSsP47AuAI09OnpYXpReh/4ulziq2st1HVAEL9TeDCEJRgpI3L0L5\n\tC60A==","X-Gm-Message-State":"AOJu0YwnXda/eBDFPr7zdpDvEPX1EF23T8KrL54THARkhXJbpFtJn7tq\n\tzSTFyWE463sSqcUrbWc5cUqvC9bhLrpZTI1dL47pA8EN+g2SP4iVMVF/l4bC8JMaNhLHdZTLloj\n\tE4Bjg2IjkTI7D7sNdAWB/pou9D2caJyFDM9gPjecQBLdPuN9bxIx23fG5vogPcUnuY5XUXD4iBM\n\t6M7InRWL8=","X-Gm-Gg":"AfdE7cmFaxWNquLHfwmQpHjPzq1GBUF60ECGBjaP+jO8CORyYfSUBN61Dp71PQlrwTJ\n\twfQG2TLdYmc+OeTohP5MLlo0oMky6QwGkiGu6untk5TPIAauwLoKoAsvFCjpZ4URjjd6OrmocQq\n\thcnePDJ76KZZ1f2+liUnwrCvktpAGsUfeg2Na7OF0QGQvA4Yxa51vBARUkDD5jXXz1qTnYpmLQ2\n\tDzHtfiatK83IcYAnYz2k60dhdpek/WlGwrxt3jBfgens+egMvo2yvnXdJmMrMBTy2vJwiTO8YFd\n\trItNTV/teioYOzdGJCOyf5XYNkqNdt/q7jFrN7P0sMc0w6to2itFD3uAC7qQq0IXfW7AftBRQ9r\n\tKe0jB051yK/H9mHqzdOjI6kTQfV5MIE9sY2oG8poqU3LB0kbwhQy7lPo2ozPKjyF/","X-Received":["by 2002:a05:600c:8717:b0:494:ca0e:880a with SMTP id\n\t5b1f17b1804b1-494ca0e8a18mr21404945e9.12.1783969332775; \n\tMon, 13 Jul 2026 12:02:12 -0700 (PDT)","by 2002:a05:600c:8717:b0:494:ca0e:880a with SMTP id\n\t5b1f17b1804b1-494ca0e8a18mr21403735e9.12.1783969330558; \n\tMon, 13 Jul 2026 12:02:10 -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":"Mon, 13 Jul 2026 21:02:08 +0200","Message-ID":"<854ii290i7.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":"6QorKoX-vD6uDO6sOYKnpfmeJLQyF_oVsVbmxtAbw2o_1783969333","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>"}}]