{"id":27272,"url":"https://patchwork.libcamera.org/api/1.1/patches/27272/?format=json","web_url":"https://patchwork.libcamera.org/patch/27272/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20260708-libipa-algorithms-v4-7-f0e99f035294@ideasonboard.com>","date":"2026-07-08T09:24:54","name":"[v4,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=json","name":"Jacopo Mondi","email":"jacopo.mondi@ideasonboard.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/27272/mbox/","series":[{"id":6046,"url":"https://patchwork.libcamera.org/api/1.1/series/6046/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=6046","date":"2026-07-08T09:24:47","name":"ipa: libipa: Introduce libipa algorithms","version":4,"mbox":"https://patchwork.libcamera.org/series/6046/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/27272/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/27272/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 2DE9BC3318\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed,  8 Jul 2026 09:25:25 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 9FB296608F;\n\tWed,  8 Jul 2026 11:25:15 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 531CE6607D\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed,  8 Jul 2026 11:25:07 +0200 (CEST)","from [192.168.1.182] (93-46-82-201.ip106.fastwebnet.it\n\t[93.46.82.201])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 9CEAB1CDC;\n\tWed,  8 Jul 2026 11:24:17 +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=\"WLrIYICb\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1783502657;\n\tbh=4A9kajOFuKXSQXUsoFZ+WfGwjzpqM6yrrwEjlszpxEw=;\n\th=From:Date:Subject:References:In-Reply-To:To:Cc:From;\n\tb=WLrIYICbam1cWru2aQtZMn0biqnY/pXB15qn88klN6BA+TGBgDjQ64q6mlU75zI1M\n\tii5k8XcKhIwEqrIqBHuSQrLDrZk3KSStk3ZTAAS8+rBYE+/2/ouoGdGywAki7fmNW0\n\tkFTr2EZZkIsOJZz1iV/jfq/KMjy0M7A8tw6NJRuU=","From":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","Date":"Wed, 08 Jul 2026 11:24:54 +0200","Subject":"[PATCH v4 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":"<20260708-libipa-algorithms-v4-7-f0e99f035294@ideasonboard.com>","References":"<20260708-libipa-algorithms-v4-0-f0e99f035294@ideasonboard.com>","In-Reply-To":"<20260708-libipa-algorithms-v4-0-f0e99f035294@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/ZANAwAKAXI0Bo8WoVY8AcsmYgBqThdspFyKv39w1IiFlyhE1r1Meyll1nr/b78aW\n\tsxmPvJ6bruJAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCak4XbAAKCRByNAaPFqFW\n\tPJs2D/9uqzf7d0dndZiso5Yw7maD1cGPQdwaAKhmmZS/vfBoZi6w6EqtlAvfWeIwMYzUFYLBfw9\n\toELr9KeojNDdUvJdRBQLPX07AVLJHX/FuvZmvT6S4/Z0aDQVsFmdx9jlcZsAPxQe8FocL4wvskm\n\t6HSUH6tvrzpOeR6lA+vURPdwr5e/MQxIW4Oja8in8tMB2mK10+YGPnyfJ41t0Z0WN1RQIHkvN20\n\tg6Lfo+7po/jAuN0PaPeBm8oXZ1QAt4u7jsYa1EC3pT8j36VUhoiQL7vmteIooJgMKGWJfUiyEng\n\tRCLfwsyXxnnK8qIbH4/mtXlaY4utbcSfbZJD0ExpMCnsIIKOlPKEA8p2Snw0Bm5A4tStPTEm4M0\n\tw0A3dGVYMtb4+XSEa7H+15QGSFXozoyL80xMp8FcK2uroPBYxlJEUmfQC3cQuF8pFNevW+iM8zp\n\tzHJCPlj64z75DPypJxPyAZPcwQn+AixR5UWNGdk2b/90K7ItSf9T2ibOuMIZNOm31kmtT4SJJ26\n\tjcXA7wMZwBYw3sj8z251iT5sUNwoLONHgvjfSit4goQ1wrKpad5ohcTsPIBRqzwHWl+TDsiOeET\n\tdi48C2a/j2wi/R11+joLWOHN6+fihGC9PWrlkZGZEmQTxRoeY8EaMctzyo/pjdkGRl5s/AI2iGl\n\t3+rOOpo1yQ2u/aA==","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":["v4","07/35"]}