[{"id":39678,"web_url":"https://patchwork.libcamera.org/comment/39678/","msgid":"<178395155900.3603632.2143217909549644636@localhost>","date":"2026-07-13T14:05:59","subject":"Re: [PATCH v5 15/36] ipa: libipa: lsc: Move\n\tInterpolator<lsc::Components> to lsc_base","submitter":{"id":184,"url":"https://patchwork.libcamera.org/api/people/184/","name":"Stefan Klug","email":"stefan.klug@ideasonboard.com"},"content":"Hi Jacopo,\n\nQuoting Jacopo Mondi (2026-07-08 17:50:57)\n> Move the Interpolator<lsc::Components>: specialization from the RkISP1\n> IPA to the lsc_base header.\n> \n> Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\nLooks good to me.\n\nReviewed-by: Stefan Klug <stefan.klug@ideasonboard.com>\n\nBest regards,\nStefan\n\n> ---\n>  src/ipa/libipa/lsc_base.cpp       | 15 +++++++++++++++\n>  src/ipa/libipa/lsc_base.h         | 21 +++++++++++++++++++++\n>  src/ipa/rkisp1/algorithms/lsc.cpp | 27 ---------------------------\n>  3 files changed, 36 insertions(+), 27 deletions(-)\n> \n> diff --git a/src/ipa/libipa/lsc_base.cpp b/src/ipa/libipa/lsc_base.cpp\n> index d05075b988d7..945020794b57 100644\n> --- a/src/ipa/libipa/lsc_base.cpp\n> +++ b/src/ipa/libipa/lsc_base.cpp\n> @@ -49,6 +49,21 @@ namespace lsc {\n>  \n>  } /* namespace lsc */\n>  \n> +#ifndef __DOXYGEN__\n> +template<>\n> +void Interpolator<lsc::Components>::\n> +       interpolate(const lsc::Components &a,\n> +                   const lsc::Components &b,\n> +                   lsc::Components &dest,\n> +                   double lambda)\n> +{\n> +       interpolateVector(a.r, b.r, dest.r, lambda);\n> +       interpolateVector(a.gr, b.gr, dest.gr, lambda);\n> +       interpolateVector(a.gb, b.gb, dest.gb, lambda);\n> +       interpolateVector(a.b, b.b, dest.b, lambda);\n> +}\n> +#endif\n> +\n>  /**\n>   * \\class LscImplementation\n>   * \\brief Pure virtual base class for LSC algorithm implementations\n> diff --git a/src/ipa/libipa/lsc_base.h b/src/ipa/libipa/lsc_base.h\n> index 93f819d3c2af..51cc35888209 100644\n> --- a/src/ipa/libipa/lsc_base.h\n> +++ b/src/ipa/libipa/lsc_base.h\n> @@ -18,6 +18,8 @@\n>  \n>  #include \"libcamera/internal/value_node.h\"\n>  \n> +#include \"interpolator.h\"\n> +\n>  namespace libcamera {\n>  \n>  namespace ipa {\n> @@ -35,6 +37,25 @@ using ComponentsMap = std::map<unsigned int, Components>;\n>  \n>  } /* namespace lsc */\n>  \n> +#ifndef __DOXYGEN__\n> +template<typename T>\n> +void interpolateVector(const std::vector<T> &a, const std::vector<T> &b,\n> +                      std::vector<T> &dest, double lambda)\n> +{\n> +       ASSERT(a.size() == b.size());\n> +       dest.resize(a.size());\n> +       for (size_t i = 0; i < a.size(); i++)\n> +               dest[i] = a[i] * (1.0 - lambda) + b[i] * lambda;\n> +}\n> +\n> +template<>\n> +void Interpolator<lsc::Components>::\n> +       interpolate(const lsc::Components &a,\n> +                   const lsc::Components &b,\n> +                   lsc::Components &dest,\n> +                   double lambda);\n> +#endif /* __DOXYGEN__ */\n> +\n>  class LscImplementation\n>  {\n>  public:\n> diff --git a/src/ipa/rkisp1/algorithms/lsc.cpp b/src/ipa/rkisp1/algorithms/lsc.cpp\n> index 84d2b1d3bdac..8d92ee89cdaf 100644\n> --- a/src/ipa/rkisp1/algorithms/lsc.cpp\n> +++ b/src/ipa/rkisp1/algorithms/lsc.cpp\n> @@ -25,33 +25,6 @@\n>  \n>  namespace libcamera {\n>  \n> -namespace ipa {\n> -\n> -template<typename T>\n> -void interpolateVector(const std::vector<T> &a, const std::vector<T> &b,\n> -                      std::vector<T> &dest, double lambda)\n> -{\n> -       ASSERT(a.size() == b.size());\n> -       dest.resize(a.size());\n> -       for (size_t i = 0; i < a.size(); i++)\n> -               dest[i] = a[i] * (1.0 - lambda) + b[i] * lambda;\n> -}\n> -\n> -template<>\n> -void Interpolator<lsc::Components>::\n> -       interpolate(const lsc::Components &a,\n> -                   const lsc::Components &b,\n> -                   lsc::Components &dest,\n> -                   double lambda)\n> -{\n> -       interpolateVector(a.r, b.r, dest.r, lambda);\n> -       interpolateVector(a.gr, b.gr, dest.gr, lambda);\n> -       interpolateVector(a.gb, b.gb, dest.gb, lambda);\n> -       interpolateVector(a.b, b.b, dest.b, lambda);\n> -}\n> -\n> -} /* namespace ipa */\n> -\n>  namespace ipa::rkisp1::algorithms {\n>  \n>  \n> \n> -- \n> 2.54.0\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 6DD46C32CE\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 13 Jul 2026 14:06:04 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 6ABE066115;\n\tMon, 13 Jul 2026 16:06:03 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 4392E6604D\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 13 Jul 2026 16:06:02 +0200 (CEST)","from ideasonboard.com (unknown\n\t[IPv6:2a00:6020:448c:6c00:6c1f:355d:1c19:aba6])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 969021049;\n\tMon, 13 Jul 2026 16:05:08 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"RvY2K5Av\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1783951508;\n\tbh=CLDbEa9zNN2oubqPemBVORtvoElVqXg5jEwbnlEwZ2k=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=RvY2K5AvlP21v4ZU8muVvb/1HKdW+t4DDoBS7lrM3AVEbtCcCoDflMXU23vYiNqOi\n\tvj1vLk13EEXY+nrT/f8EGPbNTG92hTBi30nXhXuXpm2vxH8rbg4yoltVXfThKfmu+b\n\tQdD4ixiJEugi2xZywnOPDL7NmtD2GMam/Ob1iepM=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20260708-libipa-algorithms-v5-15-0759d0359f52@ideasonboard.com>","References":"<20260708-libipa-algorithms-v5-0-0759d0359f52@ideasonboard.com>\n\t<20260708-libipa-algorithms-v5-15-0759d0359f52@ideasonboard.com>","Subject":"Re: [PATCH v5 15/36] ipa: libipa: lsc: Move\n\tInterpolator<lsc::Components> to lsc_base","From":"Stefan Klug <stefan.klug@ideasonboard.com>","Cc":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>,\n\tKieran Bingham <kieran.bingham@ideasonboard.com>","To":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Date":"Mon, 13 Jul 2026 16:05:59 +0200","Message-ID":"<178395155900.3603632.2143217909549644636@localhost>","User-Agent":"alot/0.12.dev43+g2cacc0d03","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]