Show a cover letter.

GET /api/covers/27392/?format=api
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 27392,
    "url": "https://patchwork.libcamera.org/api/covers/27392/?format=api",
    "web_url": "https://patchwork.libcamera.org/cover/27392/",
    "project": {
        "id": 1,
        "url": "https://patchwork.libcamera.org/api/projects/1/?format=api",
        "name": "libcamera",
        "link_name": "libcamera",
        "list_id": "libcamera_core",
        "list_email": "libcamera-devel@lists.libcamera.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": ""
    },
    "msgid": "<20260720-libipa-algorithms-v6-0-ececb73f97cb@ideasonboard.com>",
    "date": "2026-07-20T14:59:18",
    "name": "[v6,00/31] ipa: libipa: Introduce libipa algorithms",
    "submitter": {
        "id": 143,
        "url": "https://patchwork.libcamera.org/api/people/143/?format=api",
        "name": "Jacopo Mondi",
        "email": "jacopo.mondi@ideasonboard.com"
    },
    "mbox": "https://patchwork.libcamera.org/cover/27392/mbox/",
    "series": [
        {
            "id": 6067,
            "url": "https://patchwork.libcamera.org/api/series/6067/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=6067",
            "date": "2026-07-20T14:59:18",
            "name": "ipa: libipa: Introduce libipa algorithms",
            "version": 6,
            "mbox": "https://patchwork.libcamera.org/series/6067/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/covers/27392/comments/",
    "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 CCD90C328C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 20 Jul 2026 14:59:42 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 0947467E4F;\n\tMon, 20 Jul 2026 16:59:42 +0200 (CEST)",
            "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id B1DDF66177\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 20 Jul 2026 16:59:40 +0200 (CEST)",
            "from [192.168.1.106] (mob-5-90-63-152.net.vodafone.it\n\t[5.90.63.152])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 995D4270;\n\tMon, 20 Jul 2026 16:58:41 +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=\"eqIpD3Lp\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1784559522;\n\tbh=H7/in1JCGamD909OeONr1G+ol7xLUzHSQXV3mR/9C00=;\n\th=From:Subject:Date:To:Cc:From;\n\tb=eqIpD3Lp1NQNS1cEmTBwmHixSgD2k7Pi7V93mTfBKzlQ8lxSSmxhM0rXFwalAZCGa\n\ty/lw4Wb7iXromfl5iicXbcLmQaDByV+aF5jlrjoDEtLrWTWTtkXyHLRONPb1U60ppW\n\t1IEf8uHWpr/XVli3qjzGTsWNI+AXXGgvV/RimuPg=",
        "From": "Jacopo Mondi <jacopo.mondi@ideasonboard.com>",
        "Subject": "[PATCH v6 00/31] ipa: libipa: Introduce libipa algorithms",
        "Date": "Mon, 20 Jul 2026 16:59:18 +0200",
        "Message-Id": "<20260720-libipa-algorithms-v6-0-ececb73f97cb@ideasonboard.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "Content-Transfer-Encoding": "8bit",
        "X-B4-Tracking": "v=1; b=H4sIAMY3XmoC/4XOO27DMAyA4asEmqtCpl5mp96j6CDZVEwgiQIpM\n\tFoEvnvlLM1gt+NPgB95F5UKUxVvh7soNHPlfGnhXg5imMLlSJLH1gIUOOU6K08c+RpkOB1z4dt\n\t0rtKicy4OQQVIou1dCyX+epgfn60nrrdcvh8n5m6d/qXNnVSS0OCA2hsAeueRQs2XmEMZX4d8F\n\tis6wxMEeguCBiX0RuvUAZk9SP9CXrktSDcIXe+tj0r3Me5A5hnqtyCzfqQIMSltAc0OZP+FbIO\n\tUtzg2B5OFDWhZlh/xBbsw3QEAAA==",
        "X-Change-ID": "20260615-libipa-algorithms-59666bca0a2f",
        "To": "libcamera-devel@lists.libcamera.org, \n\tStefan Klug <stefan.klug@ideasonboard.com>, \n\tMilan Zamazal <mzamazal@redhat.com>",
        "Cc": "Jacopo Mondi <jacopo.mondi@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>",
        "X-Mailer": "b4 0.14.3",
        "X-Developer-Signature": "v=1; a=openpgp-sha256; l=7383;\n\ti=jacopo.mondi@ideasonboard.com; h=from:subject:message-id;\n\tbh=H7/in1JCGamD909OeONr1G+ol7xLUzHSQXV3mR/9C00=;\n\tb=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBqXjfQ7rcaX7j/6aQRBmPtpJbL7gBPILTvSAYW5\n\t09vvqL1HIyJAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCal430AAKCRByNAaPFqFW\n\tPOtQD/0eOObMbAF0mem8YmvPGzBkyJNGOdWO+2xahn7VUYRgPtKrZTNoEPvT3SNK36V1Qwccxuw\n\tJiLNE9QtUKPTPJgrwauoZzPcsZh5t73bJpl2Mzona8oeE7I0gl2QeBEnl2DQCkMOHH1Qqtjo//a\n\tJf4KIXvD1hQ64cVrUAJXRITa1j2fb2Z066uQNhrynQqDFpR7smV4HkFkijGFp4yOSp3qQqgcYwq\n\tW7VLZSbfnZMgBqyQR6jhme5muRlaVkinoP7gRKq6FoG2q3jk7kGXFchqW68xca6cggJ46OP8DKH\n\tqnHBFyz1PxbNUGnytYzurbd7Z1rccubV/Ng8z2vYTP1zIKutCS1Uv6GznEYF98WUBGDGfSDuHwU\n\tFo6ZqSgxmmQBvgQUKoZGkANxar6uNJIXL3MwTCwBM+8FNVTUwQNMlVGXRilULPsJZn8OFRVNKPf\n\tK8t4SNT3UM5hlNapi0t4L5HSkuhuMNgxHbLeWBHHeE7vOVa9KqmzHxm23tZFy8rNnhIPxMQk5aE\n\tUocA2ZfPQas/pU82GpYSCf0EricxdWjktonrGKi4CAv20zOl8sKbD1FuFjoSUyalkjUcRm6ntyX\n\tGnYtldTnSmMbz3vMnGaPfNAbyFnGsohbhNcWvZGyCmSxlM5/56mE3XtaACXJ38Q5EIbrnzv09UG\n\t1PAZVsAJNnLdDLQ==",
        "X-Developer-Key": "i=jacopo.mondi@ideasonboard.com; a=openpgp;\n\tfpr=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>,\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>"
    },
    "content": "The series is identical to v5 up to patch 27. The only minor difference\nis that I back-tracked on making functions class members but in the\nRkISP1 IPA I kept them as static helpers.\n\nPatches 28 and 29 are new.\n\nThey remove the templating of the LscAlgorithm class hierarchy and\ninstead implement quantization in the LscAlgorithm class.\n\nSo we now expand polynomials and parse tables as floats, store them\nin a map and in LscAlgorithm we re-iterate over it to either quantized\nthem in the polynomial case, or simply cast floats to the register bit\nwidth if table.\n\nTiming the duration of the whole RkISP1 configure operation, it now\ntakes 3 msec compared to 600 usec.\n\n\tRkISP1Lsc lsc.cpp:171 Configure took = 3081[µs]\n\n\tRkISP1Lsc lsc.cpp:172 Configure took = 583[µs]\n\nAlso, now each IPA has to define their own Interpolator::interpolate()\noverload (see rkisp1 IPA as an example of this).\n\nAs the interface of LscAlgorithm has changed, patches on the list that\nport the LSC algorithm of other platforms based on v5 will have to be rebased.\n\nSigned-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n---\nChanges in v6:\n- Address comments received on v5, mostly on documentation\n- Remove templating of LscPolynomial and perform quantization in\n  LscAlgorithm\n\nChanges 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\nChanges 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\nChanges 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\nChanges 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---\nJacopo Mondi (28):\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: 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: Quantize lsc gains in IPA\n      ipa: libipa: lsc: Quantize gains in LscAlgorithm\n      ipa: libipa: lsc: Re-sort LscAlgorithmBase documentation\n      ipa: mali-c55: Add sensorInfo to IPAContext\n      ipa: mali-c55: Port to use LscAlgorithm\n\nKieran Bingham (2):\n      ipa: simple: awb: Port to use libipa AwbAlgorithm\n      ipa: simple: Port to use libipa CcmAlgorithm\n\nLaurent 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                             | 372 ++++++++++++++++++\n src/ipa/libipa/lsc.h                               | 137 +++++++\n src/ipa/libipa/lsc_base.cpp                        | 136 +++++++\n src/ipa/libipa/lsc_base.h                          |  56 +++\n src/ipa/libipa/lsc_polynomial.cpp                  | 208 +++++++++-\n src/ipa/libipa/lsc_polynomial.h                    | 100 ++---\n src/ipa/libipa/lsc_table.cpp                       | 107 +++++\n src/ipa/libipa/lsc_table.h                         |  55 +++\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                  | 429 +++------------------\n src/ipa/rkisp1/algorithms/lsc.h                    |  74 ++--\n src/ipa/rkisp1/ipa_context.h                       |  49 +--\n src/ipa/simple/algorithms/awb.cpp                  | 140 +++++--\n src/ipa/simple/algorithms/awb.h                    |  28 ++\n src/ipa/simple/algorithms/blc.cpp                  |   2 +-\n src/ipa/simple/algorithms/ccm.cpp                  |  74 ++--\n src/ipa/simple/algorithms/ccm.h                    |  22 +-\n src/ipa/simple/ipa_context.h                       |  15 +-\n src/libcamera/software_isp/debayer_cpu.cpp         |  12 +-\n 44 files changed, 2934 insertions(+), 1135 deletions(-)\n---\nbase-commit: 709ad59a8d90af3570be1c8d02dee0ec9e011954\nchange-id: 20260615-libipa-algorithms-59666bca0a2f\n\nBest regards,"
}