From patchwork Mon Jul 20 14:59:33 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 27407 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 6F057C330F for ; Mon, 20 Jul 2026 15:00:07 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 6DD9867E8F; Mon, 20 Jul 2026 17:00:06 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="jGRv3qdj"; 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 A81F867E53 for ; Mon, 20 Jul 2026 16:59:49 +0200 (CEST) Received: from [192.168.1.106] (mob-5-90-63-152.net.vodafone.it [5.90.63.152]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id BF8AFD77; Mon, 20 Jul 2026 16:58:50 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1784559531; bh=70FZhClw7mS5xy+Y1CktDRCjvCls/+hWNvF/+aVuNwI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=jGRv3qdj592CDLzi4Ip6gAd4pboB2WnYhCs7WVSpr14VlURbs6W2Kz+8l3MpJfpZC OSwULOm7QyUwhZqthKEIXLG95A5URcbZs9JFRL8V9ggmaE3WLicLPFlwLZjiMEkpB+ AKO8ED0FlvR8yni0qYKylSFAxu65eNGcZQaUHzCI= From: Jacopo Mondi Date: Mon, 20 Jul 2026 16:59:33 +0200 Subject: [PATCH v6 15/31] ipa: libipa: lsc: Move Interpolator to lsc_base MIME-Version: 1.0 Message-Id: <20260720-libipa-algorithms-v6-15-ececb73f97cb@ideasonboard.com> References: <20260720-libipa-algorithms-v6-0-ececb73f97cb@ideasonboard.com> In-Reply-To: <20260720-libipa-algorithms-v6-0-ececb73f97cb@ideasonboard.com> To: libcamera-devel@lists.libcamera.org, Stefan Klug , Milan Zamazal Cc: Jacopo Mondi , Kieran Bingham X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3386; i=jacopo.mondi@ideasonboard.com; h=from:subject:message-id; bh=70FZhClw7mS5xy+Y1CktDRCjvCls/+hWNvF/+aVuNwI=; b=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBqXjfWAnfNGFZ3LDa1rj3DWApf5JBtYxi++0AbX 6gJeLXK/GaJAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCal431gAKCRByNAaPFqFW PGzxD/9MLw4no7f0xCvFei8H5bMFphVb8aKHFtehnxJ7bBri3ur2HWwbNauw+XM21IhUab5K/Kl IR0ybVVC6oaW4u11odJE7vn+zcNsC8HoHmISejglZ2E/dnCDBA3V7Y0TP9QpgYRMdwSoxu39TwD iVl0RXJOLfXtaR7MeW0WGwLoc5fTnghsjDusA2ZixmApvWrTZqVJtsg4YO4sKeqbDgJ1ucJhWLX YD9luNRu/iKGBA0rOyHisDBkKvsBdwQA7yaUMHzjkH20lqZZiHPV2h95nnQi/KVU7fYTRj46XBB MHJIEtvUCaqcGjEeomjKWDFkAHIWmDC94ZZ6/RpGsh252/ih2iO91a5ljz+/V1yhNyR0/gDSKoU XphK1cLgvMA1JzA1MdBzWXsulaMEkfQPR0rT6PRUZQJl1TR5JHhGtxVenymVbsd4zRMkyfRj6bt RckWZd67CBZQC42t0/0XQ6vRu2rVuIVoLQsjd9DQeri24zGIh7t6pPSD8MSomIrBKp5O3RlzY0+ xQ60kX1KQTpY7V6ZBNCbr0xHgAapDFpmyj7RrFy6/liR9Aaxru1RJsHflT/IbcJd9T3DEAZnq/9 Vvxo+EnYcIMCUIUEHL06E/bFb1JXnHV772CormQYMGC96+9j2BWUT78sJfbHKoa+CkXOqm16YDz jkKFhXLjuJpN/Ug== 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 Reviewed-by: Kieran Bingham Reviewed-by: Stefan Klug --- 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 26197f4effe5..b50460394925 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 59b831e53fbb..ca7ad6e4051c 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 84d2b1d3bdac..8d92ee89cdaf 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 {