{"id":26925,"url":"https://patchwork.libcamera.org/api/patches/26925/?format=json","web_url":"https://patchwork.libcamera.org/patch/26925/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/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":"<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=json","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=json","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"]}