From patchwork Thu Nov 5 13:07:48 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jai Luthra X-Patchwork-Id: 28773 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 829E4C3307 for ; Thu, 5 Nov 2026 13:09:05 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 28F696A7B8; Thu, 5 Nov 2026 14:09:05 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="G65Iy7nw"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 95189691E6 for ; Thu, 5 Nov 2026 14:09:03 +0100 (CET) Received: from mail.ideasonboard.com (unknown [IPv6:2401:4900:1c67:cdf:7464:6c04:36e4:ee87]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 92EFEC45; Thu, 5 Nov 2026 14:06:44 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1793884005; bh=07Uc74R5rMHuhF84Kq2MbNnoCRuvcez561MDSSASf1A=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=G65Iy7nwo+l0Azaz0B1LyKSQfehkcXAmUWHL2JqdlH1K0UjGeC7qPfncj+04YeekC OgWhCu8Dd/jldvQKkbKJusNiuhzREWK2QhXiVHOl4k/NQUkrqVVvPcCQj1SJ2235RG E4QjZHUmYY4HVOl208UA66hLK0jR9No0MFXYk8K4= From: Jai Luthra Date: Thu, 05 Nov 2026 18:37:48 +0530 Subject: [PATCH v3 1/4] ipa: libipa: camera_sensor_helper: Match multiple sensors per helper MIME-Version: 1.0 Message-Id: <20261105-mainline-imx676-v3-1-a2622d41659b@ideasonboard.com> References: <20261105-mainline-imx676-v3-0-a2622d41659b@ideasonboard.com> In-Reply-To: <20261105-mainline-imx676-v3-0-a2622d41659b@ideasonboard.com> To: libcamera-devel@lists.libcamera.org Cc: Naushir Patuck , Laurent Pinchart , Kieran Bingham , =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= , Dave Stevenson , Jai Luthra X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=16849; i=jai.luthra@ideasonboard.com; h=from:subject:message-id; bh=07Uc74R5rMHuhF84Kq2MbNnoCRuvcez561MDSSASf1A=; b=owEBbQKS/ZANAwAKAUPekfkkmnFFAcsmYgBq7H/ge5aHjIY1osUdZ8RLDhiG52fhhYoqoulAJ idxYic7PseJAjMEAAEKAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCaux/4AAKCRBD3pH5JJpx ReywD/44wkrydhbYmG4FycWZ5x7nzOVcqqa/q4EeDy9tDWHB/ZwTD7Trg3eczFFJVWJXw1TokvH 2TBaZzIoYYDgvZVv4dq16bcC96wO9IMZS9DUt3eET1gSPXn8DlTJoTvqJYloEFCgGOY2Wai8Tcv Vt+xQdyHYkXdMgg39NCz6X7Na7As9pffRMpEKySINJrfAJn7by1MtOIO9ImauofcA3gXIvwrQXV PwtPmrSlXtbvhaCRxclxlOqCWWs4iq9NuZiT9/u/TRjvMcnSj7hrxEeP7yN2+Zir2VRFaiTsZ1X NQILqqLOXqsZ5WRJ7ScyZ+YAhYUecTbTK4BekIT00Cz5XMT2va+109270btpuyXRRgp/9nXYcGI IgMGA6d/7IzZd3WZr3uqJasFRrRvYxm3pMn1CcGMmz5xtiawnPlAMFigaI//6MTugBKacob8nJN p7IecGGfvue/JgqGX0qnT59i8txsGUdNUoBFoYqMLdJRm96rjbcQMx/pa/lr0G0oTn+vXp7SCre Ra1TQnmgwwQRh7CEX+ZW+m4P+G+5BKPkyJLzP82lRTLhsAW1K5GgyJ6npx8lwy0a88uibo3EEPS xG2CSkRH3axTYKnm5CYoUCJsF0fnMUP2sZjOqI+vyB+0fhyymdcCjUZtAECY1sf/qH07aTttdVj 35HRCTX9ZLcxvyA== X-Developer-Key: i=jai.luthra@ideasonboard.com; a=openpgp; fpr=4DE0D818E5D575E8D45AAFC543DE91F9249A7145 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Multiple sensors by the same vendor often have similar gain models and pedestal values, sometimes even having the same register layouts. In such cases they can be supported by the same helper. Currently we achieve this by deriving a new class and calling the registration macro again. Like below: class CameraSensorHelperImx327 : public CameraSensorHelperImx290 { }; REGISTER_CAMERA_SENSOR_HELPER("imx327", CameraSensorHelperImx327) A cleaner solution is to instead allow registering a single camera sensor helper class for multiple sensor model names, and updating the macro to accept >= 1 names using variadic arguments. Implement it, and also convert the two derived classes of the Imx290 helper to use this approach. Prefix it with a comment to clarify that this is done only for convenience, and if differences are found we may split out any of the sensors into a separate helper. Reviewed-by: Kieran Bingham Signed-off-by: Jai Luthra --- src/ipa/libipa/camera_sensor_helper.cpp | 106 +++++++++++++++----------------- src/ipa/libipa/camera_sensor_helper.h | 12 ++-- 2 files changed, 57 insertions(+), 61 deletions(-) diff --git a/src/ipa/libipa/camera_sensor_helper.cpp b/src/ipa/libipa/camera_sensor_helper.cpp index 359040ec7418..3b22b04dcc94 100644 --- a/src/ipa/libipa/camera_sensor_helper.cpp +++ b/src/ipa/libipa/camera_sensor_helper.cpp @@ -241,15 +241,15 @@ double CameraSensorHelper::quantizeGain(double _gain, double *quantizationGain) /** * \brief Construct a camera sensor helper factory base - * \param[in] name Name of the camera sensor helper class + * \param[in] names Names of the camera sensors to match with the helper * * Creating an instance of the factory base registers it with the global list of * factories, accessible through the factories() function. * - * The factory \a name is used to look up factories and shall be unique. + * The factory \a names are used to look up factories and shall be unique. */ -CameraSensorHelperFactoryBase::CameraSensorHelperFactoryBase(const std::string name) - : name_(name) +CameraSensorHelperFactoryBase::CameraSensorHelperFactoryBase(std::initializer_list names) + : names_(names.begin(), names.end()) { registerType(this); } @@ -269,7 +269,8 @@ std::unique_ptr CameraSensorHelperFactoryBase::create(const CameraSensorHelperFactoryBase::factories(); for (const CameraSensorHelperFactoryBase *factory : factories) { - if (name != factory->name_) + const auto &names = factory->names_; + if (std::find(names.begin(), names.end(), name) == names.end()) continue; return factory->createInstance(); @@ -322,9 +323,9 @@ std::vector &CameraSensorHelperFactoryBase::fac */ /** - * \fn CameraSensorHelperFactory::CameraSensorHelperFactory(const char *name) + * \fn CameraSensorHelperFactory::CameraSensorHelperFactory(std::initializer_list names) * \brief Construct a camera sensor helper factory - * \param[in] name Name of the camera sensor helper class + * \param[in] names Names of the camera sensors to match with the helper * * Creating an instance of the factory registers it with the global list of * factories, accessible through the CameraSensorHelperFactoryBase::factories() @@ -345,8 +346,9 @@ std::vector &CameraSensorHelperFactoryBase::fac /** * \def REGISTER_CAMERA_SENSOR_HELPER * \brief Register a camera sensor helper with the camera sensor helper factory - * \param[in] name Sensor model name used to register the class * \param[in] helper Class name of CameraSensorHelper derived class to register + * \param[in] name Sensor model name used to register the class + * \param[in] ... More sensor model names that can be matched to this helper * * Register a CameraSensorHelper subclass with the factory and make it available * to try and match sensors. @@ -468,7 +470,7 @@ public: return m * (1 << coarse) / (1.0 - (fine / d1) / d2); } }; -REGISTER_CAMERA_SENSOR_HELPER("ar0144", CameraSensorHelperAr0144) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperAr0144, "ar0144") class CameraSensorHelperAr0521 : public CameraSensorHelper { @@ -493,7 +495,7 @@ public: private: static constexpr double kStep_ = 16; }; -REGISTER_CAMERA_SENSOR_HELPER("ar0521", CameraSensorHelperAr0521) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperAr0521, "ar0521") class CameraSensorHelperGc05a2 : public CameraSensorHelper { @@ -505,7 +507,7 @@ public: gain_ = AnalogueGainLinear{ 100, 0, 0, 1024 }; } }; -REGISTER_CAMERA_SENSOR_HELPER("gc05a2", CameraSensorHelperGc05a2) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperGc05a2, "gc05a2") class CameraSensorHelperGc08a3 : public CameraSensorHelper { @@ -517,7 +519,7 @@ public: gain_ = AnalogueGainLinear{ 100, 0, 0, 1024 }; } }; -REGISTER_CAMERA_SENSOR_HELPER("gc08a3", CameraSensorHelperGc08a3) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperGc08a3, "gc08a3") class CameraSensorHelperHm1246 : public CameraSensorHelper { @@ -527,7 +529,7 @@ public: gain_ = AnalogueGainLinear{ 1, 16, 0, 16 }; } }; -REGISTER_CAMERA_SENSOR_HELPER("hm1246", CameraSensorHelperHm1246) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperHm1246, "hm1246") class CameraSensorHelperImx214 : public CameraSensorHelper { @@ -539,7 +541,7 @@ public: gain_ = AnalogueGainLinear{ 0, 512, -1, 512 }; } }; -REGISTER_CAMERA_SENSOR_HELPER("imx214", CameraSensorHelperImx214) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperImx214, "imx214") class CameraSensorHelperImx219 : public CameraSensorHelper { @@ -551,7 +553,7 @@ public: gain_ = AnalogueGainLinear{ 0, 256, -1, 256 }; } }; -REGISTER_CAMERA_SENSOR_HELPER("imx219", CameraSensorHelperImx219) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperImx219, "imx219") class CameraSensorHelperImx258 : public CameraSensorHelper { @@ -563,7 +565,7 @@ public: gain_ = AnalogueGainLinear{ 0, 512, -1, 512 }; } }; -REGISTER_CAMERA_SENSOR_HELPER("imx258", CameraSensorHelperImx258) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperImx258, "imx258") class CameraSensorHelperImx283 : public CameraSensorHelper { @@ -575,8 +577,12 @@ public: gain_ = AnalogueGainLinear{ 0, 2048, -1, 2048 }; } }; -REGISTER_CAMERA_SENSOR_HELPER("imx283", CameraSensorHelperImx283) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperImx283, "imx283") +/* + * Reusing CameraSensorHelperImx290 for multiple sensors, for convenience. + * They may need to be split apart if any differences are found later. + */ class CameraSensorHelperImx290 : public CameraSensorHelper { public: @@ -587,7 +593,7 @@ public: gain_ = AnalogueGainExp{ 1.0, expGainDb(0.3) }; } }; -REGISTER_CAMERA_SENSOR_HELPER("imx290", CameraSensorHelperImx290) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperImx290, "imx290", "imx327", "imx462") class CameraSensorHelperImx296 : public CameraSensorHelper { @@ -597,12 +603,7 @@ public: gain_ = AnalogueGainExp{ 1.0, expGainDb(0.1) }; } }; -REGISTER_CAMERA_SENSOR_HELPER("imx296", CameraSensorHelperImx296) - -class CameraSensorHelperImx327 : public CameraSensorHelperImx290 -{ -}; -REGISTER_CAMERA_SENSOR_HELPER("imx327", CameraSensorHelperImx327) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperImx296, "imx296") class CameraSensorHelperImx335 : public CameraSensorHelper { @@ -614,7 +615,7 @@ public: gain_ = AnalogueGainExp{ 1.0, expGainDb(0.3) }; } }; -REGISTER_CAMERA_SENSOR_HELPER("imx335", CameraSensorHelperImx335) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperImx335, "imx335") class CameraSensorHelperImx355 : public CameraSensorHelper { @@ -626,7 +627,7 @@ public: gain_ = AnalogueGainLinear{ 0, 1024, -1, 1024 }; } }; -REGISTER_CAMERA_SENSOR_HELPER("imx355", CameraSensorHelperImx355) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperImx355, "imx355") class CameraSensorHelperImx415 : public CameraSensorHelper { @@ -636,12 +637,7 @@ public: gain_ = AnalogueGainExp{ 1.0, expGainDb(0.3) }; } }; -REGISTER_CAMERA_SENSOR_HELPER("imx415", CameraSensorHelperImx415) - -class CameraSensorHelperImx462 : public CameraSensorHelperImx290 -{ -}; -REGISTER_CAMERA_SENSOR_HELPER("imx462", CameraSensorHelperImx462) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperImx415, "imx415") class CameraSensorHelperImx471 : public CameraSensorHelper { @@ -654,7 +650,7 @@ public: gain_ = AnalogueGainLinear{ 0, 1024, -1, 1024 }; } }; -REGISTER_CAMERA_SENSOR_HELPER("imx471", CameraSensorHelperImx471) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperImx471, "imx471") class CameraSensorHelperImx477 : public CameraSensorHelper { @@ -664,7 +660,7 @@ public: gain_ = AnalogueGainLinear{ 0, 1024, -1, 1024 }; } }; -REGISTER_CAMERA_SENSOR_HELPER("imx477", CameraSensorHelperImx477) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperImx477, "imx477") class CameraSensorHelperImx662 : public CameraSensorHelper { @@ -676,7 +672,7 @@ public: gain_ = AnalogueGainExp{ 1.0, expGainDb(0.3) }; } }; -REGISTER_CAMERA_SENSOR_HELPER("imx662", CameraSensorHelperImx662) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperImx662, "imx662") class CameraSensorHelperImx678 : public CameraSensorHelper { @@ -688,7 +684,7 @@ public: gain_ = AnalogueGainExp{ 1.0, expGainDb(0.3) }; } }; -REGISTER_CAMERA_SENSOR_HELPER("imx678", CameraSensorHelperImx678) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperImx678, "imx678") class CameraSensorHelperImx708 : public CameraSensorHelper { @@ -699,7 +695,7 @@ public: gain_ = AnalogueGainLinear{ 0, 1024, -1, 1024 }; } }; -REGISTER_CAMERA_SENSOR_HELPER("imx708", CameraSensorHelperImx708) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperImx708, "imx708") class CameraSensorHelperOv01a10 : public CameraSensorHelper { @@ -711,7 +707,7 @@ public: gain_ = AnalogueGainLinear{ 1, 0, 0, 256 }; } }; -REGISTER_CAMERA_SENSOR_HELPER("ov01a10", CameraSensorHelperOv01a10) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperOv01a10, "ov01a10") class CameraSensorHelperOv08d10 : public CameraSensorHelper { @@ -723,7 +719,7 @@ public: gain_ = AnalogueGainLinear{ 1, 0, 0, 128 }; } }; -REGISTER_CAMERA_SENSOR_HELPER("ov08d10", CameraSensorHelperOv08d10) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperOv08d10, "ov08d10") class CameraSensorHelperOv08x40 : public CameraSensorHelper { @@ -734,7 +730,7 @@ public: gain_ = AnalogueGainLinear{ 1, 0, 0, 128 }; } }; -REGISTER_CAMERA_SENSOR_HELPER("ov08x40", CameraSensorHelperOv08x40) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperOv08x40, "ov08x40") class CameraSensorHelperMira220 : public CameraSensorHelper { @@ -746,7 +742,7 @@ public: gain_ = AnalogueGainLinear{ 0, 2048, -1, 2048 }; } }; -REGISTER_CAMERA_SENSOR_HELPER("mira220", CameraSensorHelperMira220) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperMira220, "mira220") class CameraSensorHelperOv2685 : public CameraSensorHelper { @@ -760,7 +756,7 @@ public: gain_ = AnalogueGainLinear{ 1, 0, 0, 128 }; } }; -REGISTER_CAMERA_SENSOR_HELPER("ov2685", CameraSensorHelperOv2685) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperOv2685, "ov2685") class CameraSensorHelperOv2740 : public CameraSensorHelper { @@ -772,7 +768,7 @@ public: gain_ = AnalogueGainLinear{ 1, 0, 0, 128 }; } }; -REGISTER_CAMERA_SENSOR_HELPER("ov2740", CameraSensorHelperOv2740) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperOv2740, "ov2740") class CameraSensorHelperOv4689 : public CameraSensorHelper { @@ -784,7 +780,7 @@ public: gain_ = AnalogueGainLinear{ 1, 0, 0, 128 }; } }; -REGISTER_CAMERA_SENSOR_HELPER("ov4689", CameraSensorHelperOv4689) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperOv4689, "ov4689") class CameraSensorHelperOv5640 : public CameraSensorHelper { @@ -796,7 +792,7 @@ public: gain_ = AnalogueGainLinear{ 1, 0, 0, 16 }; } }; -REGISTER_CAMERA_SENSOR_HELPER("ov5640", CameraSensorHelperOv5640) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperOv5640, "ov5640") class CameraSensorHelperOv5647 : public CameraSensorHelper { @@ -806,7 +802,7 @@ public: gain_ = AnalogueGainLinear{ 1, 0, 0, 16 }; } }; -REGISTER_CAMERA_SENSOR_HELPER("ov5647", CameraSensorHelperOv5647) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperOv5647, "ov5647") class CameraSensorHelperOv5670 : public CameraSensorHelper { @@ -816,7 +812,7 @@ public: gain_ = AnalogueGainLinear{ 1, 0, 0, 128 }; } }; -REGISTER_CAMERA_SENSOR_HELPER("ov5670", CameraSensorHelperOv5670) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperOv5670, "ov5670") class CameraSensorHelperOv5675 : public CameraSensorHelper { @@ -828,7 +824,7 @@ public: gain_ = AnalogueGainLinear{ 1, 0, 0, 128 }; } }; -REGISTER_CAMERA_SENSOR_HELPER("ov5675", CameraSensorHelperOv5675) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperOv5675, "ov5675") class CameraSensorHelperOv5693 : public CameraSensorHelper { @@ -839,7 +835,7 @@ public: gain_ = AnalogueGainLinear{ 1, 0, 0, 16 }; } }; -REGISTER_CAMERA_SENSOR_HELPER("ov5693", CameraSensorHelperOv5693) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperOv5693, "ov5693") class CameraSensorHelperOv64a40 : public CameraSensorHelper { @@ -849,7 +845,7 @@ public: gain_ = AnalogueGainLinear{ 1, 0, 0, 128 }; } }; -REGISTER_CAMERA_SENSOR_HELPER("ov64a40", CameraSensorHelperOv64a40) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperOv64a40, "ov64a40") class CameraSensorHelperOv8858 : public CameraSensorHelper { @@ -865,7 +861,7 @@ public: gain_ = AnalogueGainLinear{ 1, 0, 0, 128 }; } }; -REGISTER_CAMERA_SENSOR_HELPER("ov8858", CameraSensorHelperOv8858) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperOv8858, "ov8858") class CameraSensorHelperOv8865 : public CameraSensorHelper { @@ -875,7 +871,7 @@ public: gain_ = AnalogueGainLinear{ 1, 0, 0, 128 }; } }; -REGISTER_CAMERA_SENSOR_HELPER("ov8865", CameraSensorHelperOv8865) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperOv8865, "ov8865") class CameraSensorHelperOv13858 : public CameraSensorHelper { @@ -885,7 +881,7 @@ public: gain_ = AnalogueGainLinear{ 1, 0, 0, 128 }; } }; -REGISTER_CAMERA_SENSOR_HELPER("ov13858", CameraSensorHelperOv13858) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperOv13858, "ov13858") class CameraSensorHelperVd55g1 : public CameraSensorHelper { @@ -897,7 +893,7 @@ public: gain_ = AnalogueGainLinear{ 0, 32, -1, 32 }; } }; -REGISTER_CAMERA_SENSOR_HELPER("vd55g1", CameraSensorHelperVd55g1) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperVd55g1, "vd55g1") class CameraSensorHelperVd56g3 : public CameraSensorHelper { @@ -909,7 +905,7 @@ public: gain_ = AnalogueGainLinear{ 0, 32, -1, 32 }; } }; -REGISTER_CAMERA_SENSOR_HELPER("vd56g3", CameraSensorHelperVd56g3) +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperVd56g3, "vd56g3") } /* namespace */ diff --git a/src/ipa/libipa/camera_sensor_helper.h b/src/ipa/libipa/camera_sensor_helper.h index bd3d0beec77f..fbdba1388711 100644 --- a/src/ipa/libipa/camera_sensor_helper.h +++ b/src/ipa/libipa/camera_sensor_helper.h @@ -54,7 +54,7 @@ private: class CameraSensorHelperFactoryBase { public: - CameraSensorHelperFactoryBase(const std::string name); + CameraSensorHelperFactoryBase(std::initializer_list names); virtual ~CameraSensorHelperFactoryBase() = default; static std::unique_ptr create(const std::string &name); @@ -68,15 +68,15 @@ private: virtual std::unique_ptr createInstance() const = 0; - std::string name_; + std::vector names_; }; template class CameraSensorHelperFactory final : public CameraSensorHelperFactoryBase { public: - CameraSensorHelperFactory(const char *name) - : CameraSensorHelperFactoryBase(name) + CameraSensorHelperFactory(std::initializer_list names) + : CameraSensorHelperFactoryBase(names) { } @@ -87,8 +87,8 @@ private: } }; -#define REGISTER_CAMERA_SENSOR_HELPER(name, helper) \ -static CameraSensorHelperFactory global_##helper##Factory(name); +#define REGISTER_CAMERA_SENSOR_HELPER(helper, name, ...) \ + static CameraSensorHelperFactory global_##helper##Factory({ name, __VA_ARGS__ }); } /* namespace ipa */ From patchwork Thu Nov 5 13:07:49 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jai Luthra X-Patchwork-Id: 28774 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 548DBC3307 for ; Thu, 5 Nov 2026 13:09:10 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 054006A7BA; Thu, 5 Nov 2026 14:09:10 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="Q4IdJC36"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id D76AF6A7B1 for ; Thu, 5 Nov 2026 14:09:08 +0100 (CET) Received: from mail.ideasonboard.com (unknown [IPv6:2401:4900:1c67:cdf:7464:6c04:36e4:ee87]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id DD2A35E; Thu, 5 Nov 2026 14:06:49 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1793884010; bh=YgpeFNEU5YNIz2ySSaK+IeQhpr2QNAvhRhCpmwC7E8g=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Q4IdJC362ZJx/z4R1FgvfYUOiXA7UYHz2RycDAmMst91ZFHo+G6GOHfqTiW1fI+yD lpBEO8cEm0QixWAuvy0fzbTKm8Kr+Xd+Bd5KjuZWYVExqjPhAo+z2Iz+4fGyFmN4Lx ONSWLtITnsSFhb5JpxkZgVlXVLFUls5sqXm+29eQ= From: Jai Luthra Date: Thu, 05 Nov 2026 18:37:49 +0530 Subject: [PATCH v3 2/4] libcamera: camera_sensor: Add properties and helpers for Sony IMX585 and IMX676 MIME-Version: 1.0 Message-Id: <20261105-mainline-imx676-v3-2-a2622d41659b@ideasonboard.com> References: <20261105-mainline-imx676-v3-0-a2622d41659b@ideasonboard.com> In-Reply-To: <20261105-mainline-imx676-v3-0-a2622d41659b@ideasonboard.com> To: libcamera-devel@lists.libcamera.org Cc: Naushir Patuck , Laurent Pinchart , Kieran Bingham , =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= , Dave Stevenson , Jai Luthra X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3112; i=jai.luthra@ideasonboard.com; h=from:subject:message-id; bh=YgpeFNEU5YNIz2ySSaK+IeQhpr2QNAvhRhCpmwC7E8g=; b=owEBbQKS/ZANAwAKAUPekfkkmnFFAcsmYgBq7H/hU/ktboNf41hl83KoYmNJlf7sxIuKy1q5P CqrzDupVW+JAjMEAAEKAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCaux/4QAKCRBD3pH5JJpx RSW4D/9+R0GMBj9nlWeql0O5hWC5mJt0bdL1PPkz536NbTCvbNSNQC1ya8T+eXSoqsmvuGSFac9 yIdP7OhjecOX7Qcb7RFE5aVKKekYMVUjzsFs2zI8bg5dJ6MvQ/e0Bx0dMl5auBRCd80qGTUZLoJ XBQC6bqADsM4G9lCw8Ct4FIPu01BfPHyO5FTfwqMUbb5gsm6twoQ/FjYhPBbtl7N6AvyZxPEmfK UhH77w1mCAKSeoS0FNv/OKvLY+b3CAHXZFiV0jGJNSaP7wEkb1aU8ko67BFT9KSCg8DcAtM2h0L XyB6aMqzZ7tMqDmvk1sJIsuTxXQTF22XHUhMUzTKBR295ZkN7glDjp1fTjO80A0mwvKPqHtHnHQ nnuftJZlvvmxzaXnUOIUg+GsDQUlXmlDdBiOUbNP2S4nVPb1ZfwrQfIEOp5cfYAEan+jxp+69Q0 Rp6tgZcaGgCdPWtUDkVjRSnWue02XHrRWg1uSs0H3TxXQuoouMqJDouSg4EI9xFIARC9HV/y9Tj j00ASmf7UJGXBpbU3wfRU7VRCEYsVTUFGMRLubIyDFR41Ua9LIDHD7/qUcOnM+ku7jRqzxyqojY o+Wu8Dj6cOtJ3gNCrPYHvY7X6epJYsrnQsf4tdSmcq7t8eXaJgvi9qjKcgaQDFpbMqwlHnsHVtF CCNG4tAToGefdRw== X-Developer-Key: i=jai.luthra@ideasonboard.com; a=openpgp; fpr=4DE0D818E5D575E8D45AAFC543DE91F9249A7145 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Sony IMX585 (8.4MP) and IMX676 (12.6MP) are Starvis 2 sensors, with very similar properties to IMX662 and IMX678. Add the camera sensor properties for both. To my knowledge, all of these 4 sensors have the same black level and gain models. For convenience use the IMX678 camera sensor helper for all of these 4. This of course can change if differences are found later. Reviewed-by: Kieran Bingham Signed-off-by: Jai Luthra --- src/ipa/libipa/camera_sensor_helper.cpp | 19 ++++++------------- src/libcamera/sensor/camera_sensor_properties.cpp | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/ipa/libipa/camera_sensor_helper.cpp b/src/ipa/libipa/camera_sensor_helper.cpp index 3b22b04dcc94..57f21b35dc49 100644 --- a/src/ipa/libipa/camera_sensor_helper.cpp +++ b/src/ipa/libipa/camera_sensor_helper.cpp @@ -662,18 +662,10 @@ public: }; REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperImx477, "imx477") -class CameraSensorHelperImx662 : public CameraSensorHelper -{ -public: - CameraSensorHelperImx662() - { - /* From datasheet: 0xc8 at 12bits. */ - blackLevel_ = 3200; - gain_ = AnalogueGainExp{ 1.0, expGainDb(0.3) }; - } -}; -REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperImx662, "imx662") - +/* + * Reusing CameraSensorHelperImx678 for multiple sensors, for convenience. + * They may need to be split apart if any differences are found later. + */ class CameraSensorHelperImx678 : public CameraSensorHelper { public: @@ -684,7 +676,8 @@ public: gain_ = AnalogueGainExp{ 1.0, expGainDb(0.3) }; } }; -REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperImx678, "imx678") +REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperImx678, "imx585", "imx662", + "imx676", "imx678") class CameraSensorHelperImx708 : public CameraSensorHelper { diff --git a/src/libcamera/sensor/camera_sensor_properties.cpp b/src/libcamera/sensor/camera_sensor_properties.cpp index 20cfd0bc11a6..1916e905cb7c 100644 --- a/src/libcamera/sensor/camera_sensor_properties.cpp +++ b/src/libcamera/sensor/camera_sensor_properties.cpp @@ -340,6 +340,16 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen .hblankDelay = 3 }, } }, + { "imx585", { + .unitCellSize = { 2900, 2900 }, + .testPatternModes = {}, + .sensorDelays = { + .exposureDelay = 2, + .gainDelay = 2, + .vblankDelay = 2, + .hblankDelay = 2 + }, + } }, { "imx662", { .unitCellSize = { 2900, 2900 }, .testPatternModes = {}, @@ -350,6 +360,16 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen .hblankDelay = 2 }, } }, + { "imx676", { + .unitCellSize = { 2000, 2000 }, + .testPatternModes = {}, + .sensorDelays = { + .exposureDelay = 2, + .gainDelay = 2, + .vblankDelay = 2, + .hblankDelay = 2 + }, + } }, { "imx678", { .unitCellSize = { 2000, 2000 }, .testPatternModes = {}, From patchwork Thu Nov 5 13:07:50 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jai Luthra X-Patchwork-Id: 28775 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id F1DCEC3307 for ; Thu, 5 Nov 2026 13:09:15 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id BC9326A7C0; Thu, 5 Nov 2026 14:09:15 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="HRWdGtpc"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 5F6AF6A7B1 for ; Thu, 5 Nov 2026 14:09:14 +0100 (CET) Received: from mail.ideasonboard.com (unknown [IPv6:2401:4900:1c67:cdf:7464:6c04:36e4:ee87]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 7DAEA5E; Thu, 5 Nov 2026 14:06:55 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1793884015; bh=7pn9p3S+GqGtgoca7Y7TYIvv3kdGc7JqILcflk3oQQo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=HRWdGtpckpm10D9drEucDBdnQlbaSDk5L93pF0rsudLwA5UYwIXMdt/cjAcG8hiEz 43HqpwsXCTWqij0oadXIBfakilzdDYCGxevQzl3FF7lLnhB/OrOaPtBypQYiFteau6 K6+XV5pIVck+6QIp88DbuxaLKdkoDqJs2OY9DxME= From: Jai Luthra Date: Thu, 05 Nov 2026 18:37:50 +0530 Subject: [PATCH v3 3/4] libcamera: camera_sensor: Add properties and helpers for Sony IMX675 and IMX832 MIME-Version: 1.0 Message-Id: <20261105-mainline-imx676-v3-3-a2622d41659b@ideasonboard.com> References: <20261105-mainline-imx676-v3-0-a2622d41659b@ideasonboard.com> In-Reply-To: <20261105-mainline-imx676-v3-0-a2622d41659b@ideasonboard.com> To: libcamera-devel@lists.libcamera.org Cc: Naushir Patuck , Laurent Pinchart , Kieran Bingham , =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= , Dave Stevenson , Jai Luthra X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2111; i=jai.luthra@ideasonboard.com; h=from:subject:message-id; bh=7pn9p3S+GqGtgoca7Y7TYIvv3kdGc7JqILcflk3oQQo=; b=owEBbQKS/ZANAwAKAUPekfkkmnFFAcsmYgBq7H/i5U41C5bes9Lz8fmkcN+KDgawmQ4rsO2o/ gWb+xOMUDSJAjMEAAEKAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCaux/4gAKCRBD3pH5JJpx RVhOEACkQ4xrR1wwLl39A46j9nqGLfToVQP/hNsi0mLnkXvZ/6CPC59SsUQ6XlUqQCGweMYPGRc ROC3pdWxiGrGiu8rZ3nRtEBedK7P4iQaYSuJJKfrSgSnvRQKg8t05OnCnZFukvXwcTZvI3KzwTx oCridjgGKM2VEcYwYaChdEM0APBJMu1pHkAlnvAQvNgRrK9bP3d2B3rJCiQd3SuOPn0Cn0cbeW6 CBYhinp/SXeXLYIuxrXR0r8YGeBJlVKm6r6iKBQTy3xccPKHpavuUYn2UgqNG3/XtLRSQGps9x5 W3h7i0qSqv/dLdRtiENHTeKaPqqlpiqJ53sWSrND2MzUblUdhm42fGm5x9gV96JacPX8H7PUjW9 dGXuGqIch25eusSjox4IT4roYPDU9FUqJQGp9mvkEi6/YV2s3JkYHme0XRrdnhcObUgTSpSeu93 scRQ6c7cW36zUpoHms1kORUh6CoLyUTZFByEJ8fJkiHwE15lIUCWTZF28ph+S2JW8PlvVwt/QDk oKd5FNczcbiT9erzbjN3HmQoEZmrN/xkLLB+9/UwL01CTb+s7OwTcEsPhDw2DUV2fAv0L+X4LF/ s0rXdbxzRY5JBmBt7s3JkoaQohobERhIZVhIR9DAYH4ssRjcD5gw5f7P+oP4TmeRTZ0MfNUT3RQ 0EcSwJqrcHYXKuQ== X-Developer-Key: i=jai.luthra@ideasonboard.com; a=openpgp; fpr=4DE0D818E5D575E8D45AAFC543DE91F9249A7145 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Sony IMX675 (5.12MP) and IMX832 (2.12MP) are Starvis 2 sensors. Add their properties, and reuse the IMX678 helper for them, as they have the same gain model and pedestal value. Signed-off-by: Jai Luthra --- src/ipa/libipa/camera_sensor_helper.cpp | 2 +- src/libcamera/sensor/camera_sensor_properties.cpp | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/ipa/libipa/camera_sensor_helper.cpp b/src/ipa/libipa/camera_sensor_helper.cpp index 57f21b35dc49..5c030a5f7b7a 100644 --- a/src/ipa/libipa/camera_sensor_helper.cpp +++ b/src/ipa/libipa/camera_sensor_helper.cpp @@ -677,7 +677,7 @@ public: } }; REGISTER_CAMERA_SENSOR_HELPER(CameraSensorHelperImx678, "imx585", "imx662", - "imx676", "imx678") + "imx675", "imx676", "imx678", "imx832") class CameraSensorHelperImx708 : public CameraSensorHelper { diff --git a/src/libcamera/sensor/camera_sensor_properties.cpp b/src/libcamera/sensor/camera_sensor_properties.cpp index 1916e905cb7c..fbe82d47bd10 100644 --- a/src/libcamera/sensor/camera_sensor_properties.cpp +++ b/src/libcamera/sensor/camera_sensor_properties.cpp @@ -360,6 +360,16 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen .hblankDelay = 2 }, } }, + { "imx675", { + .unitCellSize = { 2000, 2000 }, + .testPatternModes = {}, + .sensorDelays = { + .exposureDelay = 2, + .gainDelay = 2, + .vblankDelay = 2, + .hblankDelay = 2 + }, + } }, { "imx676", { .unitCellSize = { 2000, 2000 }, .testPatternModes = {}, @@ -396,6 +406,16 @@ const CameraSensorProperties *CameraSensorProperties::get(const std::string &sen .hblankDelay = 3 }, } }, + { "imx832", { + .unitCellSize = { 2900, 2900 }, + .testPatternModes = {}, + .sensorDelays = { + .exposureDelay = 2, + .gainDelay = 2, + .vblankDelay = 2, + .hblankDelay = 2 + }, + } }, { "ov08d10", { .unitCellSize = { 1120, 1120 }, .testPatternModes = { From patchwork Thu Nov 5 13:07:51 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jai Luthra X-Patchwork-Id: 28776 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 9D56CC3307 for ; Thu, 5 Nov 2026 13:09:21 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 57F476A7B1; Thu, 5 Nov 2026 14:09:21 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="leOdNHO0"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 163986A7B1 for ; Thu, 5 Nov 2026 14:09:20 +0100 (CET) Received: from mail.ideasonboard.com (unknown [IPv6:2401:4900:1c67:cdf:7464:6c04:36e4:ee87]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 1D6E75E; Thu, 5 Nov 2026 14:07:00 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1793884021; bh=2S4oh/TlVfzCzIuoOUQoJ9fDWSO7nWbQVNoSnLpl6IY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=leOdNHO08PiP4DX69ClAUKrfhw0RlxuMZ0XP77kREk879TiJ9NRghSCui201bY7Hq hV9rI1+9SYTcnlqTtXorvnfPEkf3rRf6uYgoD7kbpcl9m6REK9ovmleN09GtfK5gIk aMPpiIVZq7/SxC7rAyOVE0khlf2i7Z/WhvP93yTM= From: Jai Luthra Date: Thu, 05 Nov 2026 18:37:51 +0530 Subject: [PATCH v3 4/4] ipa: rpi: cam-helper: Support IMX585 and IMX676 MIME-Version: 1.0 Message-Id: <20261105-mainline-imx676-v3-4-a2622d41659b@ideasonboard.com> References: <20261105-mainline-imx676-v3-0-a2622d41659b@ideasonboard.com> In-Reply-To: <20261105-mainline-imx676-v3-0-a2622d41659b@ideasonboard.com> To: libcamera-devel@lists.libcamera.org Cc: Naushir Patuck , Laurent Pinchart , Kieran Bingham , =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= , Dave Stevenson , Jai Luthra X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2153; i=jai.luthra@ideasonboard.com; h=from:subject:message-id; bh=2S4oh/TlVfzCzIuoOUQoJ9fDWSO7nWbQVNoSnLpl6IY=; b=owEBbQKS/ZANAwAKAUPekfkkmnFFAcsmYgBq7H/jtf8MIQws2amrNs26nnCC7vryY1xh7AUcG ZlpRSxEpHuJAjMEAAEKAB0WIQRN4NgY5dV16NRar8VD3pH5JJpxRQUCaux/4wAKCRBD3pH5JJpx RUZNEACLWWHev0E4+FlQGp2BrwmtCiHtRyanWz/8Qq5R7sQ+U3e7DHbftq/P7m75J2SWULGf296 2Wu0ww5xVX5BIquyoLEAmGkQtZwWyUXgN6BxIgwOOG7GwQQFr+C37KlgdnOqasxxETFK6u2YM4X 8n93GmqjcLji8tkBiQZKtYWRKgkvOB1uIGs3ExRK0f/Dxg5xI/7oalgqaNFRuCN3rUDTEpJrH0J ++1sT3hpV9rSLtwGhE+syVs+p1mZpaFHLc62eI/zWNPN27zm1c7BvNQH+TulcL8zN2+rA0YdHhf bG7TCxhbWkN7rCBh9nM3G+TKaI/t6/Tt18/dKgrr6mbhNGmU0FOYWMSJQYx4G+e/vWEB8evSYTP IHemCos0Ey5u6AWPOFrALFefSMr1lXDdIqu1NJhK4gF+lHgTmRB1PCbmq44PFzDBwPAz4PYAx08 UnjRaOoCrzIa0lI6dPZfEx/DgWI377JWBu7iaEcWGxZLRH99CUW7rLi4Yl20Ydh9EePvpnY9kqo 4XuwHddQZ0bsav3kssE19fU+/lJgAI2wLoFq5Nwbv92ed4F1daIk3KTULeiD9OxWE9Dtu29vOg6 Y0zeiYQJIZUJrjUzSDlbDbsELIM3F9LL79RrfcH2lEdeCMP5ulbZpWQTeOzk2akIxftMTWmOijv N6nyGYkLZBYFpsA== X-Developer-Key: i=jai.luthra@ideasonboard.com; a=openpgp; fpr=4DE0D818E5D575E8D45AAFC543DE91F9249A7145 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Sony IMX585 and IMX676 are also Starvis 2 sensors, with same gain model as rest of them. The integration time constraints are different, as the SRM specifies the shutter reigster minimum to be 8 (in units of 2H) as opposed to 4 (in units of 1H). Add support for both through the existing Starvis 2 helper, handling the integration time explicitly during registration. Reviewed-by: Kieran Bingham Signed-off-by: Jai Luthra --- src/ipa/rpi/cam_helper/cam_helper_starvis2.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/ipa/rpi/cam_helper/cam_helper_starvis2.cpp b/src/ipa/rpi/cam_helper/cam_helper_starvis2.cpp index a2f01bbc8370..07e77b939ec2 100644 --- a/src/ipa/rpi/cam_helper/cam_helper_starvis2.cpp +++ b/src/ipa/rpi/cam_helper/cam_helper_starvis2.cpp @@ -17,7 +17,7 @@ using namespace RPiController; class CamHelperStarvis2 : public CamHelper { public: - CamHelperStarvis2(); + CamHelperStarvis2(unsigned int frameIntegrationDiff = kFrameIntegrationDiff); uint32_t gainCode(double gain) const override; double gain(uint32_t gainCode) const override; @@ -26,10 +26,10 @@ private: * Smallest difference between the frame length and integration time, * in units of lines. */ - static constexpr int frameIntegrationDiff = 4; + static constexpr unsigned int kFrameIntegrationDiff = 4; }; -CamHelperStarvis2::CamHelperStarvis2() +CamHelperStarvis2::CamHelperStarvis2(unsigned int frameIntegrationDiff) : CamHelper({}, frameIntegrationDiff) { } @@ -50,8 +50,16 @@ CamHelper *create() return new CamHelperStarvis2(); } +CamHelper *create585() +{ + /* IMX585 and IMX676 manuals specify the minimum for SHR0 as 8 lines */ + return new CamHelperStarvis2(8); +} + +RegisterCamHelper reg585("imx585", &create585); RegisterCamHelper reg662("imx662", &create); RegisterCamHelper reg675("imx675", &create); +RegisterCamHelper reg676("imx676", &create585); RegisterCamHelper reg678("imx678", &create); RegisterCamHelper reg832("imx832", &create);