[{"id":39676,"web_url":"https://patchwork.libcamera.org/comment/39676/","msgid":"<178394890404.3603632.1240199817829802041@localhost>","date":"2026-07-13T13:21:44","subject":"Re: [PATCH v5 13/36] ipa: libipa: lsc_polynomial: Rename\n\tLscPolynomial","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:55)\n> In order to prepare to introduce the LscPolynomial class move the\n> existing implementation of the polynomial representation LscPolynomial\n> to lsc::Polynomial.\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\nRegards,\nStefan\n\n> ---\n>  src/ipa/libipa/lsc_polynomial.cpp | 20 ++++++++++++--------\n>  src/ipa/libipa/lsc_polynomial.h   | 12 ++++++++----\n>  src/ipa/rkisp1/algorithms/lsc.cpp | 22 +++++++++++-----------\n>  3 files changed, 31 insertions(+), 23 deletions(-)\n> \n> diff --git a/src/ipa/libipa/lsc_polynomial.cpp b/src/ipa/libipa/lsc_polynomial.cpp\n> index 921af0b0bd13..b93063bf8bc7 100644\n> --- a/src/ipa/libipa/lsc_polynomial.cpp\n> +++ b/src/ipa/libipa/lsc_polynomial.cpp\n> @@ -20,8 +20,10 @@ LOG_DEFINE_CATEGORY(LscPolynomial)\n>  \n>  namespace ipa {\n>  \n> +namespace lsc {\n> +\n>  /**\n> - * \\class LscPolynomial\n> + * \\class Polynomial\n>   * \\brief Class for handling even polynomials used in lens shading correction\n>   *\n>   * Shading artifacts of camera lenses can be modeled using even radial\n> @@ -31,7 +33,7 @@ namespace ipa {\n>   */\n>  \n>  /**\n> - * \\fn LscPolynomial::LscPolynomial(double cx = 0.0, double cy = 0.0, double k0 = 0.0,\n> + * \\fn Polynomial::Polynomial(double cx = 0.0, double cy = 0.0, double k0 = 0.0,\n>                       double k1 = 0.0, double k2 = 0.0, double k3 = 0.0,\n>                       double k4 = 0.0)\n>   * \\brief Construct a polynomial using the given coefficients\n> @@ -45,7 +47,7 @@ namespace ipa {\n>   */\n>  \n>  /**\n> - * \\fn LscPolynomial::sampleAtNormalizedPixelPos(double x, double y)\n> + * \\fn Polynomial::sampleAtNormalizedPixelPos(double x, double y)\n>   * \\brief Sample the polynomial at the given normalized pixel position\n>   *\n>   * This functions samples the polynomial at the given pixel position divided by\n> @@ -57,7 +59,7 @@ namespace ipa {\n>   */\n>  \n>  /**\n> - * \\fn LscPolynomial::getM()\n> + * \\fn Polynomial::getM()\n>   * \\brief Get the value m as described in the dng specification\n>   *\n>   * Returns m according to dng spec. m represents the Euclidean distance\n> @@ -68,7 +70,7 @@ namespace ipa {\n>   */\n>  \n>  /**\n> - * \\fn LscPolynomial::setReferenceImageSize(const Size &size)\n> + * \\fn Polynomial::setReferenceImageSize(const Size &size)\n>   * \\brief Set the reference image size\n>   *\n>   * Set the reference image size that is used for subsequent calls to getM() and\n> @@ -77,12 +79,14 @@ namespace ipa {\n>   * \\param size The size of the reference image\n>   */\n>  \n> +} /* namespace lsc */\n> +\n>  } /* namespace ipa */\n>  \n>  #ifndef __DOXYGEN__\n>  template<>\n> -std::optional<ipa::LscPolynomial>\n> -ValueNode::Accessor<ipa::LscPolynomial>::get(const ValueNode &obj) const\n> +std::optional<ipa::lsc::Polynomial>\n> +ValueNode::Accessor<ipa::lsc::Polynomial>::get(const ValueNode &obj) const\n>  {\n>         std::optional<double> cx = obj[\"cx\"].get<double>();\n>         std::optional<double> cy = obj[\"cy\"].get<double>();\n> @@ -98,7 +102,7 @@ ValueNode::Accessor<ipa::LscPolynomial>::get(const ValueNode &obj) const\n>                 return std::nullopt;\n>         }\n>  \n> -       return ipa::LscPolynomial(*cx, *cy, *k0, *k1, *k2, *k3, *k4);\n> +       return ipa::lsc::Polynomial(*cx, *cy, *k0, *k1, *k2, *k3, *k4);\n>  }\n>  #endif /* __DOXYGEN__ */\n>  \n> diff --git a/src/ipa/libipa/lsc_polynomial.h b/src/ipa/libipa/lsc_polynomial.h\n> index d52ec86946b1..3be33edfe7d8 100644\n> --- a/src/ipa/libipa/lsc_polynomial.h\n> +++ b/src/ipa/libipa/lsc_polynomial.h\n> @@ -24,12 +24,14 @@ LOG_DECLARE_CATEGORY(LscPolynomial)\n>  \n>  namespace ipa {\n>  \n> -class LscPolynomial\n> +namespace lsc {\n> +\n> +class Polynomial\n>  {\n>  public:\n> -       LscPolynomial(double cx = 0.0, double cy = 0.0, double k0 = 0.0,\n> -                     double k1 = 0.0, double k2 = 0.0, double k3 = 0.0,\n> -                     double k4 = 0.0)\n> +       Polynomial(double cx = 0.0, double cy = 0.0, double k0 = 0.0,\n> +                  double k1 = 0.0, double k2 = 0.0, double k3 = 0.0,\n> +                  double k4 = 0.0)\n>                 : cx_(cx), cy_(cy), cnx_(0), cny_(0),\n>                   coefficients_({ k0, k1, k2, k3, k4 })\n>         {\n> @@ -78,6 +80,8 @@ private:\n>         Size imageSize_;\n>  };\n>  \n> +} /* namespace lsc */\n> +\n>  } /* namespace ipa */\n>  \n>  } /* namespace libcamera */\n> diff --git a/src/ipa/rkisp1/algorithms/lsc.cpp b/src/ipa/rkisp1/algorithms/lsc.cpp\n> index af919f7429af..84d2b1d3bdac 100644\n> --- a/src/ipa/rkisp1/algorithms/lsc.cpp\n> +++ b/src/ipa/rkisp1/algorithms/lsc.cpp\n> @@ -65,10 +65,10 @@ class LscPolynomialImpl : public LscImplementation\n>  {\n>  private:\n>         struct PolynomialComponents {\n> -               LscPolynomial pr;\n> -               LscPolynomial pgr;\n> -               LscPolynomial pgb;\n> -               LscPolynomial pb;\n> +               lsc::Polynomial pr;\n> +               lsc::Polynomial pgr;\n> +               lsc::Polynomial pgb;\n> +               lsc::Polynomial pb;\n>         };\n>         using PolynomialComponentsMap = std::map<unsigned int, PolynomialComponents>;\n>  \n> @@ -87,7 +87,7 @@ public:\n>  \n>  private:\n>         std::vector<double> sizesListToPositions(Span<const double> sizes);\n> -       std::vector<uint16_t> samplePolynomial(const LscPolynomial &poly,\n> +       std::vector<uint16_t> samplePolynomial(const lsc::Polynomial &poly,\n>                                                Span<const double> xPositions,\n>                                                Span<const double> yPositions,\n>                                                const Rectangle &cropRectangle);\n> @@ -98,7 +98,7 @@ private:\n>  int LscPolynomialImpl::parseLscData(const ValueNode &sets)\n>  {\n>         for (const auto &set : sets.asList()) {\n> -               std::optional<LscPolynomial> pr, pgr, pgb, pb;\n> +               std::optional<lsc::Polynomial> pr, pgr, pgb, pb;\n>                 uint32_t ct = set[\"ct\"].get<uint32_t>(0);\n>  \n>                 if (lscData_.count(ct)) {\n> @@ -108,10 +108,10 @@ int LscPolynomialImpl::parseLscData(const ValueNode &sets)\n>                         return -EINVAL;\n>                 }\n>  \n> -               pr = set[\"r\"].get<LscPolynomial>();\n> -               pgr = set[\"gr\"].get<LscPolynomial>();\n> -               pgb = set[\"gb\"].get<LscPolynomial>();\n> -               pb = set[\"b\"].get<LscPolynomial>();\n> +               pr = set[\"r\"].get<lsc::Polynomial>();\n> +               pgr = set[\"gr\"].get<lsc::Polynomial>();\n> +               pgb = set[\"gb\"].get<lsc::Polynomial>();\n> +               pb = set[\"b\"].get<lsc::Polynomial>();\n>  \n>                 if (!(pr || pgr || pgb || pb)) {\n>                         LOG(RkISP1Lsc, Error)\n> @@ -161,7 +161,7 @@ LscPolynomialImpl::sampleForCrop(const Rectangle &cropRectangle,\n>  }\n>  \n>  std::vector<uint16_t>\n> -LscPolynomialImpl::samplePolynomial(const LscPolynomial &poly,\n> +LscPolynomialImpl::samplePolynomial(const lsc::Polynomial &poly,\n>                                     Span<const double> xPositions,\n>                                     Span<const double> yPositions,\n>                                     const Rectangle &cropRectangle)\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 5633EC3264\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 13 Jul 2026 13:21:49 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A28B26611C;\n\tMon, 13 Jul 2026 15:21:48 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id BD8F46604D\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 13 Jul 2026 15:21:46 +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 357B9BE;\n\tMon, 13 Jul 2026 15:20:53 +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=\"dQxL5TaV\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1783948853;\n\tbh=tacUw8YnNSXKRsLoKTVeuJG5XUnTnm1Uay3BdO/xbEw=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=dQxL5TaVZtyZnFYqYW89wC9H7winIReeu9G+17q+8xw04vcbxHzKHI1Qqs4wOIMSn\n\tRFt4KtCWEN9hjT0E9Z+M6+gGU45SV9mkRjMCf1E9CPAmLbzS1vM/jLiPs16CT22T9+\n\tLmEtK3kigr2Zu22HRkMqWbTA61b587/LF/0K/n5k=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20260708-libipa-algorithms-v5-13-0759d0359f52@ideasonboard.com>","References":"<20260708-libipa-algorithms-v5-0-0759d0359f52@ideasonboard.com>\n\t<20260708-libipa-algorithms-v5-13-0759d0359f52@ideasonboard.com>","Subject":"Re: [PATCH v5 13/36] ipa: libipa: lsc_polynomial: Rename\n\tLscPolynomial","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 15:21:44 +0200","Message-ID":"<178394890404.3603632.1240199817829802041@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>"}}]