Patch Detail
Show a patch.
GET /api/1.1/patches/27207/?format=api
{ "id": 27207, "url": "https://patchwork.libcamera.org/api/1.1/patches/27207/?format=api", "web_url": "https://patchwork.libcamera.org/patch/27207/", "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": "<20260706-libipa-algorithms-v3-7-968757b038bb@ideasonboard.com>", "date": "2026-07-06T08:01:27", "name": "[v3,07/35] include: linux: mali-c55: Update to support CCM and Gamma", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "b6c3971f99d49d30d069efe33fc31b04f5530781", "submitter": { "id": 143, "url": "https://patchwork.libcamera.org/api/1.1/people/143/?format=api", "name": "Jacopo Mondi", "email": "jacopo.mondi@ideasonboard.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/27207/mbox/", "series": [ { "id": 6038, "url": "https://patchwork.libcamera.org/api/1.1/series/6038/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=6038", "date": "2026-07-06T08:01:20", "name": "ipa: libipa: Introduce libipa algorithms", "version": 3, "mbox": "https://patchwork.libcamera.org/series/6038/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/27207/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/27207/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 27166C330A\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 6 Jul 2026 08:02:10 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 6EA6266026;\n\tMon, 6 Jul 2026 10:02:08 +0200 (CEST)", "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 12AE36600B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 6 Jul 2026 10:02:02 +0200 (CEST)", "from [192.168.125.177] (mob-109-113-60-81.net.vodafone.it\n\t[109.113.60.81])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 79A241CE6;\n\tMon, 6 Jul 2026 10:01:13 +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=\"tXxpHEdb\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1783324874;\n\tbh=4A9kajOFuKXSQXUsoFZ+WfGwjzpqM6yrrwEjlszpxEw=;\n\th=From:Date:Subject:References:In-Reply-To:To:Cc:From;\n\tb=tXxpHEdbcDvQZoF0QGXiz4kD1XjhzXBCoIvCXbaxiLDQDpLnmaUgEWUpGXnvQyLUI\n\tImf2dnl5E1CHVv372sEkHHBVt1CdF4gAzE4YzJrhEqsuZ4TzW6BNXNOVJ92pWAPlnf\n\tTzBajn/p9Qq7PGM9wA/bsQYBDYXuhofIMGXn9e3o=", "From": "Jacopo Mondi <jacopo.mondi@ideasonboard.com>", "Date": "Mon, 06 Jul 2026 10:01:27 +0200", "Subject": "[PATCH v3 07/35] include: linux: mali-c55: Update to support CCM\n\tand Gamma", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=\"utf-8\"", "Content-Transfer-Encoding": "7bit", "Message-Id": "<20260706-libipa-algorithms-v3-7-968757b038bb@ideasonboard.com>", "References": "<20260706-libipa-algorithms-v3-0-968757b038bb@ideasonboard.com>", "In-Reply-To": "<20260706-libipa-algorithms-v3-0-968757b038bb@ideasonboard.com>", "To": "libcamera-devel@lists.libcamera.org, \n\tStefan Klug <stefan.klug@ideasonboard.com>", "Cc": "Jacopo Mondi <jacopo.mondi@ideasonboard.com>, \n\tDaniel Scally <dan.scally@ideasonboard.com>, \n\tKieran Bingham <kieran.bingham@ideasonboard.com>", "X-Mailer": "b4 0.14.3", "X-Developer-Signature": "v=1; a=openpgp-sha256; l=5761;\n\ti=jacopo.mondi@ideasonboard.com; h=from:subject:message-id;\n\tbh=4A9kajOFuKXSQXUsoFZ+WfGwjzpqM6yrrwEjlszpxEw=;\n\tb=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBqS2DvuVBOBYDxJXW5drmNHbeW95Ltti6eNZRVm\n\t1xO4sGecKeJAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCaktg7wAKCRByNAaPFqFW\n\tPJPdD/963b6IT6SEywOWCFKiOIMujWpV9GhB7yNSEUzI4pGNUC2+6B6LnVIVBrtN6SOMudRIUva\n\tJmkVxYhcnJXb1LvJehbAsQO5nUMKuh7+pi62Rc81CRoy2khzw6NsATORaldGZsLhLgRRdU3NSK0\n\tCcHsTHSgVw6BMCbHG5grMDhE6NuaOTLHAPtfaeuTPD85s1ZZzma4fqADme/P8lVczh5bJ7V62Qd\n\tiBPvfMFsLQrg/rb3Xz58siWfE3dBQXF/7QwqFxT/P/AdET8kAxb9sQoXAySvb6Odclr7x7D9IfV\n\teSSWrFzqEkdrZEFrWlihnhg7KhsiL8pY8iqIWXlLDTkdFHqnHViQ0uMr6jlbhT5Dj0mjzH9G5Rg\n\tFmHfbBFs7a5o+mOJ05ZAPsfHRU+iwUgajbCX4tGLACT0acUQd6iorIHvNiuFWHGivAR2/8nAvj+\n\tRVOfG55WJYJuMzS9ZrduX1G4iYyqXjGOyHEIAkXtofpD+w3D4HgGzeniYIyMkLnRi0v3dmZbshe\n\tCoSXNQLeOvfieHScH60jCQN2ZnK99QhF+OtCkL9zy8Ni2QgKcbn/yHBpaCUse+auNzW8M4JONwm\n\tqqOxjqlOeXbvU1gT2adgO7an7BpqspVeh/EMjnTqQNY0z9EdK5Of2KqrZlZs7Mi/Y6RqjLtZxd3\n\tcLfnWOV9dEQ9tng==", "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": "Update the Mali-C55 uAPI header to add support for CCM and the\nRGB Gamma.\n\nPatches have been posted upstream but not yet merged\nhttps://patchwork.linuxtv.org/project/linux-media/list/?series=26932\n\nSigned-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\nReviewed-by: Daniel Scally <dan.scally@ideasonboard.com>\nAcked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n---\n include/linux/media/arm/mali-c55-config.h | 86 ++++++++++++++++++++++++++++++-\n 1 file changed, 85 insertions(+), 1 deletion(-)", "diff": "diff --git a/include/linux/media/arm/mali-c55-config.h b/include/linux/media/arm/mali-c55-config.h\nindex 3d335f950eeb..ef0fe17df96e 100644\n--- a/include/linux/media/arm/mali-c55-config.h\n+++ b/include/linux/media/arm/mali-c55-config.h\n@@ -36,6 +36,9 @@\n */\n #define MALI_C55_MAX_ZONES\t(15 * 15)\n \n+/* Number of RGB gamma LUT entries. */\n+#define MALI_C55_NUM_GAMMA_LUT_ELEMENTS 129\n+\n /**\n * struct mali_c55_ae_1024bin_hist - Auto Exposure 1024-bin histogram statistics\n *\n@@ -219,6 +222,9 @@ struct mali_c55_stats_buffer {\n * @MALI_C55_PARAM_BLOCK_AWB_GAINS_AEXP: Auto-white balance gains for AEXP-0 tap\n * @MALI_C55_PARAM_MESH_SHADING_CONFIG : Mesh shading tables configuration\n * @MALI_C55_PARAM_MESH_SHADING_SELECTION: Mesh shading table selection\n+ * @MALI_C55_PARAM_BLOCK_CCM: Colour correction matrix\n+ * @MALI_C55_PARAM_BLOCK_GAMMA_FR: Gamma gain and offset for FR pipe\n+ * @MALI_C55_PARAM_BLOCK_GAMMA_DS: Gamma gain and offset for DS pipe\n */\n enum mali_c55_param_block_type {\n \tMALI_C55_PARAM_BLOCK_SENSOR_OFFS,\n@@ -232,6 +238,9 @@ enum mali_c55_param_block_type {\n \tMALI_C55_PARAM_BLOCK_AWB_GAINS_AEXP,\n \tMALI_C55_PARAM_MESH_SHADING_CONFIG,\n \tMALI_C55_PARAM_MESH_SHADING_SELECTION,\n+\tMALI_C55_PARAM_BLOCK_CCM,\n+\tMALI_C55_PARAM_BLOCK_GAMMA_FR,\n+\tMALI_C55_PARAM_BLOCK_GAMMA_DS,\n };\n \n /**\n@@ -757,6 +766,78 @@ struct mali_c55_params_mesh_shading_selection {\n \t__u16 mesh_strength;\n };\n \n+/**\n+ * struct mali_c55_params_ccm - Coefficients, offsets and gains for the colour\n+ *\t\t\t\tcorrection matrix\n+ *\n+ * The colour correction module converts images data from a sensor-specific\n+ * colour space to known one.\n+ *\n+ * Colour correction is applied after demosaicing and each pixel is represented\n+ * as a column vector of the three RGB colour channels on which the following\n+ * operations take place:\n+ * 1) An offset is subtracted from each colour channel\n+ * 2) Each colour channel is multiplied by a gain\n+ * 3) The pixel column vector is multiplied by the colour correction matrix\n+ *\n+ * This struct allows users to configure the coefficients for CCM and the\n+ * per-channel offsets and gains. The nine matrix coefficients are expressed as\n+ * 13 bits signed Q4.8 Sign/Magnitude fixed-point numbers, the three gain\n+ * multipliers are expressed as 12 bits unsigned Q4.8 fixed-point numbers and\n+ * the three offsets are expressed as a 12 bits unsigned integers.\n+ *\n+ * header.type should be set to MALI_C55_PARAM_BLOCK_CCM from\n+ * :c:type:`mali_c55_param_block_type`.\n+ *\n+ * @header:\tThe Mali-C55 parameters block header\n+ * @coeffs:\t3x3 color conversion matrix coefficients in sign/magnitude\n+ *\t\tQ4.8 format\n+ * @gains:\tGains for red, green and blue channels in unsigned Q4.8 format\n+ * @offs:\tOffsets for red, green and blue channels\n+ */\n+struct mali_c55_params_ccm {\n+\tstruct v4l2_isp_params_block_header header;\n+\t__u16 coeffs[3][3];\n+\t__u16 gains[3];\n+\t__u16 offs[3];\n+};\n+\n+/**\n+ * struct mali_c55_params_gamma - RGB Gamma correction\n+ *\n+ * Gamma correction is used to program a standard gamma curve such as the sRGB\n+ * one. It provides gains and offsets to implement contrast adjustments.\n+ *\n+ * Gamma correction is applied on both the FR and DS pipes separately in the RGB\n+ * colour domain where the following operations take place:\n+ * 1) An offset is subtracted from each colour channel\n+ * 2) Each colour channel is multiplied by a gain\n+ * 3) The Gamma LUT is applied to each colour channel\n+ *\n+ * The Gamma LUT has 129 entries where each node is an unsigned 12 bit number.\n+ * It is expected that LUT[0]=0 and LUT[128]=0xfff, with the other 127 values\n+ * defining the Gamma correction curve. The three gain multipliers are expressed\n+ * as 12-bits unsigned Q4.8 fixed-point numbers and the three offsets are\n+ * expressed as a 12-bits unsigned integers.\n+ *\n+ * As one Gamma correction block is available on both the FR and DS pipes, the\n+ * header.type field should be set to one of either\n+ * MALI_C55_PARAM_BLOCK_GAMMA_FR or MALI_C55_PARAM_BLOCK_GAMMA_DS from\n+ * :c:type:`mali_c55_param_block_type`.\n+ *\n+ * @header:\tThe Mali-C55 parameters block header\n+ * @gains:\tGains for the red, green and blue channel in unsigned Q4.8 format\n+ * @offs:\tOffsets subtracted from the red, green and blue channels\n+ *\t\tin unsigned 12 bits format\n+ * @lut:\t129-node Gamma LUT in unsigned 12 bits format\n+ */\n+struct mali_c55_params_gamma {\n+\tstruct v4l2_isp_params_block_header header;\n+\t__u16 gains[3];\n+\t__u16 offs[3];\n+\t__u32 lut[MALI_C55_NUM_GAMMA_LUT_ELEMENTS];\n+};\n+\n /**\n * define MALI_C55_PARAMS_MAX_SIZE - Maximum size of all Mali C55 Parameters\n *\n@@ -780,6 +861,9 @@ struct mali_c55_params_mesh_shading_selection {\n \tsizeof(struct mali_c55_params_awb_config) +\t\t\\\n \tsizeof(struct mali_c55_params_awb_gains) +\t\t\\\n \tsizeof(struct mali_c55_params_mesh_shading_config) +\t\\\n-\tsizeof(struct mali_c55_params_mesh_shading_selection))\n+\tsizeof(struct mali_c55_params_mesh_shading_selection) +\t\\\n+\tsizeof(struct mali_c55_params_ccm) +\t\t\t\\\n+\tsizeof(struct mali_c55_params_gamma) +\t\t\t\\\n+\tsizeof(struct mali_c55_params_gamma))\n \n #endif /* __UAPI_MALI_C55_CONFIG_H */\n", "prefixes": [ "v3", "07/35" ] }