From patchwork Wed Jul 8 09:25:01 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jacopo Mondi X-Patchwork-Id: 27279 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 4429DC3329 for ; Wed, 8 Jul 2026 09:25:32 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id F3986660C3; Wed, 8 Jul 2026 11:25:23 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="ghAdIkFq"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 60E036607E for ; Wed, 8 Jul 2026 11:25:09 +0200 (CEST) Received: from [192.168.1.182] (93-46-82-201.ip106.fastwebnet.it [93.46.82.201]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id B772F28CB; Wed, 8 Jul 2026 11:24:19 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1783502659; bh=FI6u9HiVyZE3mGOS+nR17xOPN1xl6wtQAM1eP5szdPw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=ghAdIkFq1nzSSpvEJX57tCiyj04ECMad7+t4NebjPqWE0toFyRRjV1r9U3Fy2WlR/ w/tRsweUV+aF/aPtdI/NKYOUWP123gISEMF6v6y+MI1W2Ru4s3VeHLiNxf/QufYI5z MnctH9q+jqtZuPSxnnhpic+gOUQmnAEYQm6xodic= From: Jacopo Mondi Date: Wed, 08 Jul 2026 11:25:01 +0200 Subject: [PATCH v4 14/35] ipa: libipa: lsc: Move Interpolator to lsc_base MIME-Version: 1.0 Message-Id: <20260708-libipa-algorithms-v4-14-f0e99f035294@ideasonboard.com> References: <20260708-libipa-algorithms-v4-0-f0e99f035294@ideasonboard.com> In-Reply-To: <20260708-libipa-algorithms-v4-0-f0e99f035294@ideasonboard.com> To: libcamera-devel@lists.libcamera.org, Stefan Klug Cc: Jacopo Mondi , Kieran Bingham X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3329; i=jacopo.mondi@ideasonboard.com; h=from:subject:message-id; bh=FI6u9HiVyZE3mGOS+nR17xOPN1xl6wtQAM1eP5szdPw=; b=kA0DAAoBcjQGjxahVjwByyZiAGpOF22ilSxmaZQgSqc4otvR1kiuD2c+i8f/p4LKxfZXfgYpa okCMwQAAQoAHRYhBLXEPUiAmiCKj1g4wHI0Bo8WoVY8BQJqThdtAAoJEHI0Bo8WoVY8s0kP/jzw CcAyOb93c1Qo1iPtB7o+qoNJkw+wH22hOA/g89PkqLCUcLlBjMukNDymwF5YFmI4oaKpvyQVbRX Ywh3w2sQxuGpbNANxo7TbwR4AYww4r8Ydn9hwkr7OHgws7AgZQclF7VGdHrdKy3OQEAsJ4X9t/M MEwOs/kc1JjAUr2qvt0Rs5duHWJ/tJgyEGb9XGg2NUEi7aZ1184YUvsmzV25bXlcY7tWc9EH4fz GqyYiC7jXJAUwwQW2VD1irdlBbGML6dJradRmCJNCQRdWPY7tutKZaVEd8bXkeGFRfxtVewAhmS BtYNQ7rrCK4bYp2oOAx4tVk5keIj7pk3h/KEZl7GgBF0PB7HN8UjrloX6A3LMKryrHYTH8Ju2U2 A0VKa6ubw9K1j+hlzYlgiPQqc1bxuY5dgeSvD3totRIHkOXAOp68SsfpbzH0TFvU18vFX/Y8KHz DsvGTDw8oVev4lmG55w3Y3HHeOtaffDTCXmaSHvi6fVesiD9/NfexmncmvR+TKr73aKgogiAYBs qtQE0U9itUD++vaiGXRRwXnM83M756sSgo9yLVpekLVu//FuFOTJk6aFrdSENxu7aeMx1v8t92B zUuqnLxxTnypCV75MgU5i9CruGaCVT/dKBzXXvegTJQ5b/neDUF7FozzHvbKvxYecIJMLXdUwiI A97sU 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 --- 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 d05075b988d7..945020794b57 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 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 {