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 */