Show a cover letter.

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

{
    "id": 26197,
    "url": "https://patchwork.libcamera.org/api/1.1/covers/26197/?format=api",
    "web_url": "https://patchwork.libcamera.org/cover/26197/",
    "project": {
        "id": 1,
        "url": "https://patchwork.libcamera.org/api/1.1/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": "<20260219-kbingham-quantizers-v8-0-2b6ff68ead26@ideasonboard.com>",
    "date": "2026-02-19T15:05:01",
    "name": "[v8,00/15] libipa: Introduce a Quantized type",
    "submitter": {
        "id": 4,
        "url": "https://patchwork.libcamera.org/api/1.1/people/4/?format=api",
        "name": "Kieran Bingham",
        "email": "kieran.bingham@ideasonboard.com"
    },
    "mbox": "https://patchwork.libcamera.org/cover/26197/mbox/",
    "series": [
        {
            "id": 5802,
            "url": "https://patchwork.libcamera.org/api/1.1/series/5802/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5802",
            "date": "2026-02-19T15:05:01",
            "name": "libipa: Introduce a Quantized type",
            "version": 8,
            "mbox": "https://patchwork.libcamera.org/series/5802/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/covers/26197/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 F378BC0DA4\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 19 Feb 2026 15:05:11 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 9C0986225E;\n\tThu, 19 Feb 2026 16:05:10 +0100 (CET)",
            "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D866C62250\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 19 Feb 2026 16:05:08 +0100 (CET)",
            "from ping.linuxembedded.co.uk\n\t(cpc89244-aztw30-2-0-cust6594.18-1.cable.virginm.net [86.31.185.195])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 1AA863A4;\n\tThu, 19 Feb 2026 16:04:15 +0100 (CET)"
        ],
        "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"ESXXFqK0\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1771513455;\n\tbh=SQaSAj3aO3TOBL9Zklmc4fAXfHSJYqlDiLkwX+xuEdI=;\n\th=From:Subject:Date:To:Cc:From;\n\tb=ESXXFqK0oHWQH8bDLP/wqQPslFPiN9X8mruE3NcpT2olH/M1t/jN3RiVxrNEtbeu+\n\tCx/ebTucz7OVtkyeDrKVi0V3J6J7Bj02qwzWLlC1JO/xT+PZFrLNh9XAiVE8UsWysB\n\tG3XH89tFrxeBVXbCTWo/dtefleP5Ndi+OAzrr3Ak=",
        "From": "Kieran Bingham <kieran.bingham@ideasonboard.com>",
        "Subject": "[PATCH v8 00/15] libipa: Introduce a Quantized type",
        "Date": "Thu, 19 Feb 2026 15:05:01 +0000",
        "Message-Id": "<20260219-kbingham-quantizers-v8-0-2b6ff68ead26@ideasonboard.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "Content-Transfer-Encoding": "7bit",
        "X-B4-Tracking": "v=1; b=H4sIAJ0ml2kC/22NQQ6CMBBFr0JmbU2poYgr72FYTOkUJoZWWyQq4\n\te5WEncu30v++wskikwJTsUCkWZOHHyG466AbkDfk2CbGZRUWqpSiqth3w84ivsD/cRvikk01lY\n\tSndOmcpCXt0iOn1v10mYeOE0hvraTuf7aX+/wtzfXQopSK20aRDSuPLMlTMGbgNHuuzBCu67rB\n\t7L19Ty9AAAA",
        "X-Change-ID": "20260210-kbingham-quantizers-9dd50aff6b5f",
        "To": "libcamera-devel@lists.libcamera.org",
        "Cc": "Kieran Bingham <kieran.bingham@ideasonboard.com>, =?utf-8?q?Barnab?=\n\t=?utf-8?b?w6FzIFDFkWN6ZQ==?= <barnabas.pocze@ideasonboard.com>,\n\tIsaac Scott <isaac.scott@ideasonboard.com>, \n\tPaul Elder <paul.elder@ideasonboard.com>, Laurent Pinchart\n\t<laurent.pinchart@ideasonboard.com>, Stefan Klug\n\t<stefan.klug@ideasonboard.com>, \"van Veen,\n\tStephan\" <stephan.vanveen@karlstorz.com>",
        "X-Mailer": "b4 0.14.3",
        "X-Developer-Signature": "v=1; a=ed25519-sha256; t=1771513507; l=6409;\n\ti=kieran.bingham@ideasonboard.com; s=20260207;\n\th=from:subject:message-id; \n\tbh=SQaSAj3aO3TOBL9Zklmc4fAXfHSJYqlDiLkwX+xuEdI=;\n\tb=ZgVYqOK+CdbXvn3M9Js9UK7Dioz0N+xmEkpZqa92fwJvomQaR49e4gntkOo4PH4t7Mc8TNBhR\n\tXmY85k0Zd5EAvEh/5n+XNH1eeefRuDMenS0XbamQ7+HzvyyTSz3xEoL",
        "X-Developer-Key": "i=kieran.bingham@ideasonboard.com; a=ed25519;\n\tpk=FVXKN7YuwHc6UtbRUeTMAmranfsQomA+vnilfglWdaY=",
        "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": "This series superceeds [0] \"rkisp1: cproc - Metadata and Hue\ndevelopments\" by introducing a new base type for libipa to be able to\nmaintain values which are quantized for hardware.\n\nThese data values often need to be converted, perhaps to a fixed-point\nformat for configuration of hardware, but also then back to a floating\npoint for returning as metadata.\n\nThe underlying storage of a quantized fixed point is now always unsigned\nand we ensure that signed extensions can not occur when storing in\nlarger registers.\n\nIn particular this series builds to solve the review comment that\nblocked the original series at [1]\n\nThe Quantized type provides a storage mechanism to make both of these\nstorage representations visible to code that wishes to utilise the\nspecific values.\n\nThe series then re-introduces the proposed updates to cproc using the\nnew Q types by supplying Fixed Point types and a scaled fixed point type\nfor the Hue control.\n\nFinally, the remaining users of the fixedToFloatingPoint and\nfloatingToFixedPoint are converted and the old helpers and tests are\nremoved.\n\nThis in cases such as the Mali-C55 AWB Gains means that we now report\naccurate gains as used by the hardware in the metadata.\n\nThis then allows us to clean up a workaround which was managing the\nusage of unsigned integers to represent signed floats.\n\nTests and documentation are provided throughout.\n\n[0] https://patchwork.libcamera.org/project/libcamera/list/?series=5245\n[1] https://patchwork.libcamera.org/patch/23645/#34626\n\nRunning the tests directly shows the following output (all passing)\n\nQ1.7(-1 .. 0.992188)  Min: [0x80:-1] -- Max: [0x7f:0.992188] Step:0.0078125\n  Checking -2 == [0x80:-1]\n  Checking -1 == [0x80:-1]\n  Checking -0.992 == [0x81:-0.992188]\n  Checking -0.006 == [0xff:-0.0078125]\n  Checking 0 == [0x00:0]\n  Checking 0.008 == [0x01:0.0078125]\n  Checking 0.992 == [0x7f:0.992188]\n  Checking 2 == [0x7f:0.992188]\n\nUQ1.7(0 .. 1.99219)  Min: [0x00:0] -- Max: [0xff:1.99219] Step:0.0078125\n  Checking -1 == [0x00:0]\n  Checking 0 == [0x00:0]\n  Checking 1 == [0x80:1]\n  Checking 1.992 == [0xff:1.99219]\n  Checking 2 == [0xff:1.99219]\n\nQ4.7(-8 .. 7.99219)  Min: [0x0400:-8] -- Max: [0x03ff:7.99219] Step:0.0078125\n  Checking -8 == [0x0400:-8]\n  Checking -0.008 == [0x07ff:-0.0078125]\n  Checking 0 == [0x0000:0]\n  Checking 0.008 == [0x0001:0.0078125]\n  Checking 7.992 == [0x03ff:7.99219]\n  Checking 0.2 == [0x001a:0.203125]\n  Checking -0.2 == [0x07e6:-0.203125]\n  Checking -0.8 == [0x079a:-0.796875]\n  Checking -0.4 == [0x07cd:-0.398438]\n  Checking -1.4 == [0x074d:-1.39844]\n\nUQ4.8(0 .. 15.9961)  Min: [0x0000:0] -- Max: [0x0fff:15.9961] Step:0.00390625\n  Checking 0 == [0x0000:0]\n  Checking 16 == [0x0fff:15.9961]\n\nQ5.4(-16 .. 15.9375)  Min: [0x0100:-16] -- Max: [0x00ff:15.9375] Step:0.0625\n  Checking -16 == [0x0100:-16]\n  Checking 15.94 == [0x00ff:15.9375]\n\nUQ5.8(0 .. 31.9961)  Min: [0x0000:0] -- Max: [0x1fff:31.9961] Step:0.00390625\n  Checking 0 == [0x0000:0]\n  Checking 32 == [0x1fff:31.9961]\n\nQ12.4(-2048 .. 2047.94)  Min: [0x8000:-2048] -- Max: [0x7fff:2047.94] Step:0.0625\n  Checking 0 == [0x0000:0]\n  Checking 7.5 == [0x0078:7.5]\n\nUQ12.4(0 .. 4095.94)  Min: [0x0000:0] -- Max: [0xffff:4095.94] Step:0.0625\n  Checking 0 == [0x0000:0]\n  Checking 7.5 == [0x0078:7.5]\n\nQ4.20(-8 .. 8)  Min: [0x00800000:-8] -- Max: [0x007fffff:8] Step:9.53674e-07\n  Checking -9 == [0x00800000:-8]\n  Checking -8 == [0x00800000:-8]\n  Checking 8 == [0x007fffff:8]\n  Checking 9 == [0x007fffff:8]\n\nUQ4.20(0 .. 16)  Min: [0x00000000:0] -- Max: [0x00ffffff:16] Step:9.53674e-07\n  Checking -1 == [0x00000000:0]\n  Checking 0 == [0x00000000:0]\n  Checking 16 == [0x00ffffff:16]\n  Checking 20 == [0x00ffffff:16]\n\nTesting sign extension of quantized values when cast to larger registers\n  Checking [0x20:-2] == 0x20\n  Checking [0x80:-8] == 0x80\n  Checking [0x80:-8] == 0x0080\n  Checking [0x8000:-128] == 0x8000\n  Checking [0x8000:-128] == 0x00008000\n\nSigned-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n---\nChanges in v8:\n- Remove noexcept in quantized.h\n- Only use uint8_t in quantized.cpp\n- Don't output on success in tests\n- Use [-180, 180] for Hue to allow metadata expectations to be met\n  (without changing sign on an input control)\n- Use 1.0f and 0.2f to prevent double usage on float conversions\n- Keep the gain clamps on mali-agc\n\n---\nKieran Bingham (14):\n      ipa: libipa: Provide a Quantized data type support\n      test: libipa: Add tests for Quantized types\n      ipa: libipa: fixedpoint: Fix unsigned usage\n      ipa: libipa: Provide fixed point quantized traits\n      test: libipa: Provide FixedPoint Quantized tests\n      ipa: rkisp1: cproc: Convert to use Quantized types\n      ipa: rkisp1: cproc: Report metadata\n      ipa: rkisp1: cproc: Provide a Hue control\n      ipa: rkisp1: ccm: Use Q<4, 7> format directly\n      ipa: mali-c55: Reduce AWB calculations to float precision\n      ipa: mali-c55: Convert AWB to UQ<4, 8> usage\n      ipa: mali-c55: agc: Quantise the ISP Digital Gain\n      test: libipa: Remove legacy fixed point conversion test\n      ipa: libipa: fixedpoint: Move float conversion inline\n\nvan Veen, Stephan (1):\n      libcamera: controls: Define a new core Hue control\n\n src/ipa/libipa/fixedpoint.cpp       | 108 +++++++++++++---\n src/ipa/libipa/fixedpoint.h         | 120 +++++++++++------\n src/ipa/libipa/meson.build          |   2 +\n src/ipa/libipa/quantized.cpp        | 135 +++++++++++++++++++\n src/ipa/libipa/quantized.h          |  75 +++++++++++\n src/ipa/mali-c55/algorithms/agc.cpp |  25 ++--\n src/ipa/mali-c55/algorithms/awb.cpp |  44 +++----\n src/ipa/mali-c55/ipa_context.h      |  16 ++-\n src/ipa/rkisp1/algorithms/ccm.cpp   |   3 +-\n src/ipa/rkisp1/algorithms/cproc.cpp |  68 +++++++---\n src/ipa/rkisp1/algorithms/cproc.h   |   4 +\n src/ipa/rkisp1/ipa_context.h        |  26 ++--\n src/libcamera/control_ids_core.yaml |  15 +++\n test/ipa/libipa/fixedpoint.cpp      | 252 ++++++++++++++++++++++++++++--------\n test/ipa/libipa/meson.build         |   1 +\n test/ipa/libipa/quantized.cpp       | 145 +++++++++++++++++++++\n 16 files changed, 859 insertions(+), 180 deletions(-)\n---\nbase-commit: da12b1854fbc0ec32d3162a0ab97654fcb679ae3\nchange-id: 20260210-kbingham-quantizers-9dd50aff6b5f\n\nBest regards,"
}