Patch Detail
Show a patch.
GET /api/patches/26925/?format=api
{ "id": 26925, "url": "https://patchwork.libcamera.org/api/patches/26925/?format=api", "web_url": "https://patchwork.libcamera.org/patch/26925/", "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": "<20260618-rppx1-ipa-v1-10-32337264cfcd@ideasonboard.com>", "date": "2026-06-18T10:18:49", "name": "[10/14] ipa: rppx1: Add RppX1Params and RppX1Stats", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "191f4cf629e29b5ac87db08859255410784b95e8", "submitter": { "id": 143, "url": "https://patchwork.libcamera.org/api/people/143/?format=api", "name": "Jacopo Mondi", "email": "jacopo.mondi@ideasonboard.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/26925/mbox/", "series": [ { "id": 6003, "url": "https://patchwork.libcamera.org/api/series/6003/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=6003", "date": "2026-06-18T10:18:39", "name": "libcamera: Add support for R-Car Gen4 and RPP-X1 ISP", "version": 1, "mbox": "https://patchwork.libcamera.org/series/6003/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/26925/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/26925/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 C72F1C3307\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 18 Jun 2026 10:19:10 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 6110662C71;\n\tThu, 18 Jun 2026 12:19:09 +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 B674C629E6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 18 Jun 2026 12:18:59 +0200 (CEST)", "from [192.168.125.177] (mob-109-113-4-199.net.vodafone.it\n\t[109.113.4.199])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 84E952393;\n\tThu, 18 Jun 2026 12:18:24 +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=\"ryW9D6UO\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1781777904;\n\tbh=h04KN9mLyfrik8nFAtKM57O5ZCpidFxhIftsvizNnko=;\n\th=From:Date:Subject:References:In-Reply-To:To:Cc:From;\n\tb=ryW9D6UOWq9vmU7YeaPkV8ZvTVCVl36xbrWyGHpQGhVFMHe4AIz0X5iQwDF4hGi+t\n\tjLIrRZZFsEdiIWAdnt3gOoIZGRXxzzosWcaXr8PJhLLZVRoM4SBI7ARLZnnbxI2iYp\n\tp577BTcXH9453dgs7ix7/BPCyEDTD53AHkfuWvPI=", "From": "Jacopo Mondi <jacopo.mondi@ideasonboard.com>", "Date": "Thu, 18 Jun 2026 12:18:49 +0200", "Subject": "[PATCH 10/14] ipa: rppx1: Add RppX1Params and RppX1Stats", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=\"utf-8\"", "Content-Transfer-Encoding": "7bit", "Message-Id": "<20260618-rppx1-ipa-v1-10-32337264cfcd@ideasonboard.com>", "References": "<20260618-rppx1-ipa-v1-0-32337264cfcd@ideasonboard.com>", "In-Reply-To": "<20260618-rppx1-ipa-v1-0-32337264cfcd@ideasonboard.com>", "To": "=?utf-8?q?Niklas_S=C3=B6derlund?=\n\t<niklas.soderlund+renesas@ragnatech.se>, \n\tlibcamera-devel@lists.libcamera.org", "Cc": "Jacopo Mondi <jacopo.mondi@ideasonboard.com>", "X-Mailer": "b4 0.14.3", "X-Developer-Signature": "v=1; a=openpgp-sha256; l=4428;\n\ti=jacopo.mondi@ideasonboard.com; h=from:subject:message-id;\n\tbh=h04KN9mLyfrik8nFAtKM57O5ZCpidFxhIftsvizNnko=;\n\tb=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBqM8YKrvJd9kHlySs+WHGLxm0brTfWhahGEtcco\n\t8lLe6uuZG2JAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCajPGCgAKCRByNAaPFqFW\n\tPDw5D/491rPiSIw5tx4s682pvIw3tY6JQ3qmVopARuTL79hbttal2hYqvp+WnrkZCjMMNfjhGbR\n\tTOacnkuPdDdQur3SliiKJhVJDdKS05FNcw5jMrqrboUherovL0RV4gIbxw89T5zqZiVk1ySqbVE\n\tQu9PurWzM/9TRK48qOoWbOGTr3j1BGNOfz5ospi+oJZbjp1azFAZSF+QJGqmKNLpw4UrNp1tSIQ\n\tIi394aImG4e/NL+MLQbiOTf9C1h6oZFwZm/DW+Km11+ReB6pMgm/ursCfdaw8hH3InmQAJ8STZA\n\t+IO5n68VEVeDK7cw2Y58FAAM1NFr+DyN6THg6gdN2C4DHhuSjxUw6nmLw8rTBTiLmrNG19FZNk5\n\tcrmXQFsvJHPgwneayzyv6QogIWJsP1XZELBNZNVuKx/kXc/yzm7CkeZqcVkDjJsgaRHn5qv86R9\n\tjlgtlyWc07juSEMQaJKSwNcL0mBLnTK5cs3jw8CD5aV5wnR6n27XD9dZ/hajUeC8mPUbfYs369Q\n\tOhFEcBCqzf4+wZMGcN1GhJOEh07kUzXm7XgURjpWJq8njx3x5VXjdp4WEMNYZBZtpp/M7PTiSIA\n\tV5/c4FZMR7Go3v9SCJKu2w1GnNWbOnEzf3YCITNIcPnSvHewHjOuVwKS70zQ8wxRSHWceAAzUKV\n\twr+EIo82DHyHx8g==", "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": "Add RppX1Params and RppX1Stats classes that implement V4L2Params and\nV4L2Stats for the RPP-X1 ISP.\n\nSigned-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n---\n src/ipa/rppx1/params.h | 108 +++++++++++++++++++++++++++++++++++++++++++++++++\n src/ipa/rppx1/stats.h | 62 ++++++++++++++++++++++++++++\n 2 files changed, 170 insertions(+)", "diff": "diff --git a/src/ipa/rppx1/params.h b/src/ipa/rppx1/params.h\nnew file mode 100644\nindex 000000000000..a7f927372c1d\n--- /dev/null\n+++ b/src/ipa/rppx1/params.h\n@@ -0,0 +1,108 @@\n+/* SPDX-License-Identifier: LGPL-2.1-or-later */\n+/*\n+ * Copyright (C) 2026, Ideas On Board\n+ *\n+ * RPP-X1 ISP Parameters\n+ */\n+\n+#pragma once\n+\n+#include <linux/media/dreamchip/rppx1-config.h>\n+\n+#include <libipa/v4l2_params.h>\n+\n+namespace libcamera {\n+\n+namespace ipa::rppx1 {\n+\n+enum class BlockType : uint16_t {\n+\tBlsPre1,\n+\tLinPre1,\n+\tLscPre1,\n+\tAwbgPre1,\n+\tCcorPost,\n+\tGaHv,\n+\tWbmeasPost,\n+\tHistPost,\n+\tExmPre1,\n+};\n+\n+namespace details {\n+\n+template<BlockType B>\n+struct block_type {\n+};\n+\n+#define RPPX1_DEFINE_BLOCK_TYPE(blkType, cfgType, id)\t\t\\\n+template<>\t\t\t\t\t\t\t\\\n+struct block_type<BlockType::blkType> {\t\t\t\\\n+\tusing type = struct rppx1_##cfgType##_params;\t\\\n+\tstatic constexpr rppx1_params_block_type blockType =\t\\\n+\t\tRPPX1_PARAMS_BLOCK_TYPE_##id;\t\t\t\\\n+};\n+\n+RPPX1_DEFINE_BLOCK_TYPE(BlsPre1, bls, BLS_PRE1)\n+RPPX1_DEFINE_BLOCK_TYPE(LinPre1, lin, LIN_PRE1)\n+RPPX1_DEFINE_BLOCK_TYPE(LscPre1, lsc, LSC_PRE1)\n+RPPX1_DEFINE_BLOCK_TYPE(AwbgPre1, awbg, AWBG_PRE1)\n+RPPX1_DEFINE_BLOCK_TYPE(CcorPost, ccor, CCOR_POST)\n+RPPX1_DEFINE_BLOCK_TYPE(GaHv, ga, GA_HV)\n+RPPX1_DEFINE_BLOCK_TYPE(WbmeasPost, wbmeas, WBMEAS_POST)\n+RPPX1_DEFINE_BLOCK_TYPE(HistPost, hist, HIST_POST)\n+RPPX1_DEFINE_BLOCK_TYPE(ExmPre1, exm, EXM_PRE1)\n+\n+struct params_traits {\n+\tusing id_type = BlockType;\n+\n+\ttemplate<id_type Id>\n+\tusing id_to_details = block_type<Id>;\n+};\n+\n+} /* namespace details */\n+\n+template<typename T>\n+class RppX1ParamsBlock final : public V4L2ParamsBlock<T>\n+{\n+public:\n+\tRppX1ParamsBlock(const Span<uint8_t> data)\n+\t\t: V4L2ParamsBlock<T>(data),\n+\t\t configData_(data.subspan(sizeof(v4l2_isp_block_header)))\n+\t{\n+\t}\n+\n+\tconst T *operator->() const override\n+\t{\n+\t\treturn reinterpret_cast<const T *>(configData_.data());\n+\t}\n+\n+\tT *operator->() override\n+\t{\n+\t\treturn reinterpret_cast<T *>(configData_.data());\n+\t}\n+\n+\tconst T &operator*() const override\n+\t{\n+\t\treturn *reinterpret_cast<const T *>(configData_.data());\n+\t}\n+\n+\tT &operator*() override\n+\t{\n+\t\treturn *reinterpret_cast<T *>(configData_.data());\n+\t}\n+\n+private:\n+\tSpan<uint8_t> configData_;\n+};\n+\n+class RppX1Params : public V4L2Params<details::params_traits>\n+{\n+public:\n+\tRppX1Params(Span<uint8_t> data)\n+\t\t: V4L2Params(data, V4L2_ISP_PARAMS_VERSION_V1)\n+\t{\n+\t}\n+};\n+\n+} /* namespace ipa::rppx1 */\n+\n+} /* namespace libcamera */\ndiff --git a/src/ipa/rppx1/stats.h b/src/ipa/rppx1/stats.h\nnew file mode 100644\nindex 000000000000..71a3e1da505c\n--- /dev/null\n+++ b/src/ipa/rppx1/stats.h\n@@ -0,0 +1,62 @@\n+/* SPDX-License-Identifier: LGPL-2.1-or-later */\n+/*\n+ * Copyright (C) 2026, Ideas On Board\n+ *\n+ * RPP-X1 ISP Statistics\n+ */\n+\n+#pragma once\n+\n+#include <linux/media/dreamchip/rppx1-config.h>\n+\n+#include <libipa/v4l2_stats.h>\n+\n+namespace libcamera {\n+\n+namespace ipa::rppx1 {\n+\n+enum class StatsType : uint16_t {\n+\tHistPost,\n+\tExmPre1,\n+\tWbmeasPost,\n+};\n+\n+namespace details {\n+\n+template<StatsType B>\n+struct stats_type {\n+};\n+\n+#define RPPX1_DEFINE_STATS_TYPE(blkType, cfgType, id)\t\t\\\n+template<>\t\t\t\t\t\t\t\\\n+struct stats_type<StatsType::blkType> {\t\t\t\t\\\n+\tusing type = struct rppx1_##cfgType##_stats;\t\t\\\n+\tstatic constexpr rppx1_stats_block_type blockType =\t\\\n+\t\tRPPX1_STATS_BLOCK_TYPE_##id;\t\t\t\\\n+};\n+\n+RPPX1_DEFINE_STATS_TYPE(HistPost, hist, HIST_POST)\n+RPPX1_DEFINE_STATS_TYPE(ExmPre1, exm, EXM_PRE1)\n+RPPX1_DEFINE_STATS_TYPE(WbmeasPost, wbmeas, WBMEAS_POST)\n+\n+struct stats_traits {\n+\tusing id_type = StatsType;\n+\n+\ttemplate<id_type Id>\n+\tusing id_to_details = stats_type<Id>;\n+};\n+\n+} /* namespace details */\n+\n+class RppX1Stats : public V4L2Stats<details::stats_traits>\n+{\n+public:\n+\tRppX1Stats(Span<uint8_t> data)\n+\t\t: V4L2Stats(data, V4L2_ISP_VERSION_V1)\n+\t{\n+\t}\n+};\n+\n+} /* namespace ipa::rppx1 */\n+\n+} /* namespace libcamera */\n", "prefixes": [ "10/14" ] }