Patch Detail
Show a patch.
GET /api/1.1/patches/26145/?format=api
{ "id": 26145, "url": "https://patchwork.libcamera.org/api/1.1/patches/26145/?format=api", "web_url": "https://patchwork.libcamera.org/patch/26145/", "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": "<20260213-kbingham-quantizers-v7-3-1626b9aaabf1@ideasonboard.com>", "date": "2026-02-13T16:57:42", "name": "[v7,03/15] ipa: libipa: fixedpoint: Fix unsigned usage", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": false, "hash": "84fcb3cb9d048a0a6131ff64df919fc471d29964", "submitter": { "id": 4, "url": "https://patchwork.libcamera.org/api/1.1/people/4/?format=api", "name": "Kieran Bingham", "email": "kieran.bingham@ideasonboard.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/26145/mbox/", "series": [ { "id": 5789, "url": "https://patchwork.libcamera.org/api/1.1/series/5789/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5789", "date": "2026-02-13T16:57:39", "name": "libipa: Introduce a Quantized type", "version": 7, "mbox": "https://patchwork.libcamera.org/series/5789/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/26145/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/26145/checks/", "tags": {}, "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 4A7C7C32EA\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 13 Feb 2026 16:58:16 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 717D262201;\n\tFri, 13 Feb 2026 17:58:11 +0100 (CET)", "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id CD8BE621D2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 13 Feb 2026 17:58:04 +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 B5EA5180F;\n\tFri, 13 Feb 2026 17:57: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=\"sC/0dgme\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1771001835;\n\tbh=C5ujSuBcZfK72bFwDC2d74gukJ8/4Cq0fWaMVmqqLkY=;\n\th=From:Date:Subject:References:In-Reply-To:To:Cc:From;\n\tb=sC/0dgmeDhGMm8kDslql2yZkYWkNXXutpbdSLBpVscv480w46fhsIaKcZvh71tAeV\n\tNmfX45SG5+FbWvMyCGrk1i0AxoellZuPRjO2zRHZ6RDyIERxNzNmqIzNA96gV65C/n\n\tY9kYwO7w2+0St3X01Qx5UN9HKZWWb9l/A/gtxk0E=", "From": "Kieran Bingham <kieran.bingham@ideasonboard.com>", "Date": "Fri, 13 Feb 2026 16:57:42 +0000", "Subject": "[PATCH v7 03/15] ipa: libipa: fixedpoint: Fix unsigned usage", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=\"utf-8\"", "Content-Transfer-Encoding": "7bit", "Message-Id": "<20260213-kbingham-quantizers-v7-3-1626b9aaabf1@ideasonboard.com>", "References": "<20260213-kbingham-quantizers-v7-0-1626b9aaabf1@ideasonboard.com>", "In-Reply-To": "<20260213-kbingham-quantizers-v7-0-1626b9aaabf1@ideasonboard.com>", "To": "libcamera-devel@lists.libcamera.org", "Cc": "Kieran Bingham <kieran.bingham@ideasonboard.com>, \n\tIsaac Scott <isaac.scott@ideasonboard.com>", "X-Mailer": "b4 0.14.3", "X-Developer-Signature": "v=1; a=ed25519-sha256; t=1771001883; l=2418;\n\ti=kieran.bingham@ideasonboard.com; s=20260207;\n\th=from:subject:message-id; \n\tbh=C5ujSuBcZfK72bFwDC2d74gukJ8/4Cq0fWaMVmqqLkY=;\n\tb=ff+rXQ4cVwnOLIV8LFtTm0Qgjg1tG9O03K6vBJf/0shwwScmt3+fdjfzzP1SYfaBLknKc7VrX\n\tOeupp2NAp/ZC3r7khiuTUjwEHc1o6einpXSzHIPjz4PO1lLDyy8xze6", "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": "The fixedToFloatingPoint does not support unsigned Q types, and\nincorrectly sign-extends all values which have the top most bit set in\nthe quantized values.\n\nFix this by ensuring that only signed types perform sign extension, and\nsimplify the calculation for unsigned types.\n\nConvert the storage of the test cases to signed types to correctly\nrepresent their intended purpose, to prevent test failures.\n\nReviewed-by: Isaac Scott <isaac.scott@ideasonboard.com>\nSigned-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n---\n\nv6:\n - Use T{1} << F instead of 1 << F\n\nv7:\n - Fix checkstyle issues\n---\n src/ipa/libipa/fixedpoint.h | 3 +++\n test/ipa/libipa/fixedpoint.cpp | 6 +++---\n 2 files changed, 6 insertions(+), 3 deletions(-)", "diff": "diff --git a/src/ipa/libipa/fixedpoint.h b/src/ipa/libipa/fixedpoint.h\nindex 709cf50f0fcd..aeb9bce3269b 100644\n--- a/src/ipa/libipa/fixedpoint.h\n+++ b/src/ipa/libipa/fixedpoint.h\n@@ -49,6 +49,9 @@ constexpr R fixedToFloatingPoint(T number)\n \tstatic_assert(sizeof(int) >= sizeof(T));\n \tstatic_assert(I + F <= sizeof(T) * 8);\n \n+\tif constexpr (std::is_unsigned_v<T>)\n+\t\treturn static_cast<R>(number) / static_cast<R>(T{ 1 } << F);\n+\n \t/*\n \t * Recreate the upper bits in case of a negative number by shifting the sign\n \t * bit from the fixed point to the first bit of the unsigned and then right shifting\ndiff --git a/test/ipa/libipa/fixedpoint.cpp b/test/ipa/libipa/fixedpoint.cpp\nindex 99eb662ddf4e..4b017e86a74f 100644\n--- a/test/ipa/libipa/fixedpoint.cpp\n+++ b/test/ipa/libipa/fixedpoint.cpp\n@@ -68,7 +68,7 @@ protected:\n \t\t * The second 7.992 test is to test that unused bits don't\n \t\t * affect the result.\n \t\t */\n-\t\tstd::map<double, uint16_t> testCases = {\n+\t\tstd::map<double, int16_t> testCases = {\n \t\t\t{ 7.992, 0x3ff },\n \t\t\t{ 0.2, 0x01a },\n \t\t\t{ -0.2, 0x7e6 },\n@@ -81,14 +81,14 @@ protected:\n \n \t\tint ret;\n \t\tfor (const auto &testCase : testCases) {\n-\t\t\tret = testSingleFixedPoint<4, 7, uint16_t>(testCase.first,\n+\t\t\tret = testSingleFixedPoint<4, 7, int16_t>(testCase.first,\n \t\t\t\t\t\t\t\t testCase.second);\n \t\t\tif (ret != TestPass)\n \t\t\t\treturn ret;\n \t\t}\n \n \t\t/* Special case with a superfluous one in the unused bits */\n-\t\tret = testFixedToFloat<4, 7, uint16_t, double>(0xbff, 7.992);\n+\t\tret = testFixedToFloat<4, 7, int16_t, double>(0xbff, 7.992);\n \t\tif (ret != TestPass)\n \t\t\treturn ret;\n \n", "prefixes": [ "v7", "03/15" ] }