From patchwork Mon Jul 6 08:01:34 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 27214 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 ED594C3308 for ; Mon, 6 Jul 2026 08:02:19 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 92A2F66029; Mon, 6 Jul 2026 10:02:19 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="Ph6LJNb0"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 1AC4065EFF for ; Mon, 6 Jul 2026 10:02:07 +0200 (CEST) Received: from [192.168.125.177] (mob-109-113-60-81.net.vodafone.it [109.113.60.81]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id C46363DCB; Mon, 6 Jul 2026 10:01:18 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1783324879; bh=k8xx+n2HYzN5DqXOt0UsO1jSOSRlbXvar8LoCiAJnEk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Ph6LJNb0OLjfuy8BNNyfEFqQPaqNhEVwaWlIBzGnVvE/xb6oeBjGQrBxrCRK7Itly jACeDqbTHTk9CGkGFttR7jmbiFYr+W2lqHKYpdbVbcK3RM9s1b2rH0c2elfMhbOzvb 84rN3ovYmXjAIzGUq8x98t1FdvfzuNUqw6mi8XiE= From: Jacopo Mondi Date: Mon, 06 Jul 2026 10:01:34 +0200 Subject: [PATCH v3 14/35] ipa: libipa: lsc: Move Interpolator to lsc_base MIME-Version: 1.0 Message-Id: <20260706-libipa-algorithms-v3-14-968757b038bb@ideasonboard.com> References: <20260706-libipa-algorithms-v3-0-968757b038bb@ideasonboard.com> In-Reply-To: <20260706-libipa-algorithms-v3-0-968757b038bb@ideasonboard.com> To: libcamera-devel@lists.libcamera.org, Stefan Klug Cc: Jacopo Mondi X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3266; i=jacopo.mondi@ideasonboard.com; h=from:subject:message-id; bh=k8xx+n2HYzN5DqXOt0UsO1jSOSRlbXvar8LoCiAJnEk=; b=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBqS2Dw9U/pmS4lu3hPkbq1LnMtHOKbRUeEghzFB yqAalZr/RqJAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCaktg8AAKCRByNAaPFqFW PMu9D/9dAsTes+GRqDtHvk/EUJuz5hBig2ElM0nTcpggiH040dSm3RKvUBBzZfOzYgLeS0pUdlw EmLfhMADb7bgNq9x5kDU+6zjCYZzRWU0aS54j8sHYA7O7YBJdt1mfZZ7qnpirQnqRpzPiQlYjTe g7B3pnb+UpxQQ0J01c2hKh/FRnJeo7ts5wJWvGZpCUThe7zn21Z4dIRWTvM2tiM2Y5UTrF5TGUU aQ1q32X1mm3YisTI4Zt4kamGMaP38XWhtOm2vX5V69AbrBvyu5KrZmeoKySg/mIpfV2RRtM3Sgh JflR/kfkDESpEZtee1skRFlg4yse0Cwn4Red8RQtVJYucBLnr5y95n4N3CTX4OpL/KMB9nQ8R4m nztFYJlp20VJQE77eH5eFoSLlJmrOqQl1X+jIeyWkfwWwR9p429DtRtxEX7bRqbr18s9Cw8x+Zo 2AAoeZR+WJaJLkJ0CsUq9q9Ygmb7cpO5zQIcmOnno64v4/Bz/QfANqAvlFk1zFSVznke4PegRlj cUYaAK3p2WVmTfnRGQMJN6Esqmee67FjyNkW66XARz2dxS3BWb48aSRzZSM8VXOWQk4msxgeA0u mZwyHC0M991qhks2Ok46dt7FipxGwOMBmIpFlr21kNtk0+iIRm0ba8nGNJn5kzCp1wmC5RbYJSB NOt0+IArx5UAYKQ== X-Developer-Key: i=jacopo.mondi@ideasonboard.com; a=openpgp; fpr=72392EDC88144A65C701EA9BA5826A2587AD026B 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" Move the Interpolator: specialization from the RkISP1 IPA to the lsc_base header. Signed-off-by: Jacopo Mondi --- src/ipa/libipa/lsc_base.cpp | 15 +++++++++++++++ src/ipa/libipa/lsc_base.h | 21 +++++++++++++++++++++ src/ipa/rkisp1/algorithms/lsc.cpp | 27 --------------------------- 3 files changed, 36 insertions(+), 27 deletions(-) diff --git a/src/ipa/libipa/lsc_base.cpp b/src/ipa/libipa/lsc_base.cpp index d545e9a5f7ed..bddf131b85e2 100644 --- a/src/ipa/libipa/lsc_base.cpp +++ b/src/ipa/libipa/lsc_base.cpp @@ -49,6 +49,21 @@ namespace lsc { } /* namespace lsc */ +#ifndef __DOXYGEN__ +template<> +void Interpolator:: + interpolate(const lsc::Components &a, + const lsc::Components &b, + lsc::Components &dest, + double lambda) +{ + interpolateVector(a.r, b.r, dest.r, lambda); + interpolateVector(a.gr, b.gr, dest.gr, lambda); + interpolateVector(a.gb, b.gb, dest.gb, lambda); + interpolateVector(a.b, b.b, dest.b, lambda); +} +#endif + /** * \class LscImplementation * \brief Pure virtual base class for lsc algorithm implementations diff --git a/src/ipa/libipa/lsc_base.h b/src/ipa/libipa/lsc_base.h index 93f819d3c2af..51cc35888209 100644 --- a/src/ipa/libipa/lsc_base.h +++ b/src/ipa/libipa/lsc_base.h @@ -18,6 +18,8 @@ #include "libcamera/internal/value_node.h" +#include "interpolator.h" + namespace libcamera { namespace ipa { @@ -35,6 +37,25 @@ using ComponentsMap = std::map; } /* namespace lsc */ +#ifndef __DOXYGEN__ +template +void interpolateVector(const std::vector &a, const std::vector &b, + std::vector &dest, double lambda) +{ + ASSERT(a.size() == b.size()); + dest.resize(a.size()); + for (size_t i = 0; i < a.size(); i++) + dest[i] = a[i] * (1.0 - lambda) + b[i] * lambda; +} + +template<> +void Interpolator:: + interpolate(const lsc::Components &a, + const lsc::Components &b, + lsc::Components &dest, + double lambda); +#endif /* __DOXYGEN__ */ + class LscImplementation { public: diff --git a/src/ipa/rkisp1/algorithms/lsc.cpp b/src/ipa/rkisp1/algorithms/lsc.cpp index 6c6dce08704c..fec698234583 100644 --- a/src/ipa/rkisp1/algorithms/lsc.cpp +++ b/src/ipa/rkisp1/algorithms/lsc.cpp @@ -25,33 +25,6 @@ namespace libcamera { -namespace ipa { - -template -void interpolateVector(const std::vector &a, const std::vector &b, - std::vector &dest, double lambda) -{ - ASSERT(a.size() == b.size()); - dest.resize(a.size()); - for (size_t i = 0; i < a.size(); i++) - dest[i] = a[i] * (1.0 - lambda) + b[i] * lambda; -} - -template<> -void Interpolator:: - interpolate(const lsc::Components &a, - const lsc::Components &b, - lsc::Components &dest, - double lambda) -{ - interpolateVector(a.r, b.r, dest.r, lambda); - interpolateVector(a.gr, b.gr, dest.gr, lambda); - interpolateVector(a.gb, b.gb, dest.gb, lambda); - interpolateVector(a.b, b.b, dest.b, lambda); -} - -} /* namespace ipa */ - namespace ipa::rkisp1::algorithms {