[{"id":37722,"web_url":"https://patchwork.libcamera.org/comment/37722/","msgid":"<458b58dc-14b0-457b-b08b-f6f2d38a4db1@ideasonboard.com>","date":"2026-01-19T10:39:15","subject":"Re: [PATCH v3 11/14] libcamera: ipa: simple: Use float type for\n\tadjustment controls","submitter":{"id":216,"url":"https://patchwork.libcamera.org/api/people/216/","name":"Barnabás Pőcze","email":"barnabas.pocze@ideasonboard.com"},"content":"2026. 01. 14. 12:30 keltezéssel, Milan Zamazal írta:\n> control_ids.h defines the contrast type as float, let's use the same in\n> simple IPA, instead of double.  Saturation and gamma already use float,\n> except for the knobs, let's use float for the knobs too.\n                       ^\n                  initializers\n\nI would add that because looking at the code gamma and saturation seem to\nbe using `float` already, except that those parts are initialized with\n`std::optional<double>()`, which is implicitly converted. I usually\nprefer using `.reset()` (or maybe ` = {}`) to avoid such behaviour.\n\nReviewed-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n\n\n> \n> Signed-off-by: Milan Zamazal <mzamazal@redhat.com>\n> ---\n>   include/libcamera/internal/software_isp/debayer_params.h | 2 +-\n>   src/ipa/simple/algorithms/adjust.cpp                     | 6 +++---\n>   src/ipa/simple/algorithms/lut.cpp                        | 2 +-\n>   src/ipa/simple/ipa_context.h                             | 8 ++++----\n>   4 files changed, 9 insertions(+), 9 deletions(-)\n> \n> diff --git a/include/libcamera/internal/software_isp/debayer_params.h b/include/libcamera/internal/software_isp/debayer_params.h\n> index 256c7d43d..2d69bd295 100644\n> --- a/include/libcamera/internal/software_isp/debayer_params.h\n> +++ b/include/libcamera/internal/software_isp/debayer_params.h\n> @@ -59,7 +59,7 @@ struct DebayerParams {\n>   \tMatrix<float, 3, 3> ccm;\n>   \tRGB<float> blackLevel;\n>   \tfloat gamma;\n> -\tdouble contrastExp;\n> +\tfloat contrastExp;\n>   };\n>   \n>   } /* namespace libcamera */\n> diff --git a/src/ipa/simple/algorithms/adjust.cpp b/src/ipa/simple/algorithms/adjust.cpp\n> index cfbc39610..95032799f 100644\n> --- a/src/ipa/simple/algorithms/adjust.cpp\n> +++ b/src/ipa/simple/algorithms/adjust.cpp\n> @@ -33,9 +33,9 @@ int Adjust::init(IPAContext &context, [[maybe_unused]] const YamlObject &tuningD\n>   int Adjust::configure(IPAContext &context,\n>   \t\t      [[maybe_unused]] const IPAConfigInfo &configInfo)\n>   {\n> -\tcontext.activeState.knobs.gamma = std::optional<double>();\n> -\tcontext.activeState.knobs.contrast = std::optional<double>();\n> -\tcontext.activeState.knobs.saturation = std::optional<double>();\n> +\tcontext.activeState.knobs.gamma = std::optional<float>();\n> +\tcontext.activeState.knobs.contrast = std::optional<float>();\n> +\tcontext.activeState.knobs.saturation = std::optional<float>();\n>   \n>   \treturn 0;\n>   }\n> diff --git a/src/ipa/simple/algorithms/lut.cpp b/src/ipa/simple/algorithms/lut.cpp\n> index a6dbd7b1d..f31a7e631 100644\n> --- a/src/ipa/simple/algorithms/lut.cpp\n> +++ b/src/ipa/simple/algorithms/lut.cpp\n> @@ -41,7 +41,7 @@ void Lut::updateGammaTable(IPAContext &context)\n>   \t\t1.0 / context.activeState.knobs.gamma.value_or(kDefaultGamma);\n>   \tconst auto contrast = context.activeState.knobs.contrast.value_or(1.0);\n>   \t/* Convert 0..2 to 0..infinity; avoid actual inifinity at tan(pi/2) */\n> -\tdouble contrastExp = tan(std::clamp(contrast * M_PI_4, 0.0, M_PI_2 - 0.00001));\n> +\tfloat contrastExp = tan(std::clamp(contrast * M_PI_4, 0.0, M_PI_2 - 0.00001));\n>   \n>   \tif (!context.gpuIspEnabled) {\n>   \t\tauto &gammaTable = context.activeState.gamma.gammaTable;\n> diff --git a/src/ipa/simple/ipa_context.h b/src/ipa/simple/ipa_context.h\n> index 680b72eb9..85455bbfa 100644\n> --- a/src/ipa/simple/ipa_context.h\n> +++ b/src/ipa/simple/ipa_context.h\n> @@ -58,8 +58,8 @@ struct IPAActiveState {\n>   \t\tstd::array<double, kGammaLookupSize> gammaTable;\n>   \t\tuint8_t blackLevel;\n>   \t\tfloat gamma;\n> -\t\tdouble contrast;\n> -\t\tdouble contrastExp;\n> +\t\tfloat contrast;\n> +\t\tfloat contrastExp;\n>   \t} gamma;\n>   \n>   \tMatrix<float, 3, 3> ccm;\n> @@ -69,7 +69,7 @@ struct IPAActiveState {\n>   \tstruct {\n>   \t\tstd::optional<float> gamma;\n>   \t\t/* 0..2 range, 1.0 = normal */\n> -\t\tstd::optional<double> contrast;\n> +\t\tstd::optional<float> contrast;\n>   \t\tstd::optional<float> saturation;\n>   \t} knobs;\n>   };\n> @@ -88,7 +88,7 @@ struct IPAFrameContext : public FrameContext {\n>   \t} gains;\n>   \n>   \tstd::optional<float> gamma;\n> -\tstd::optional<double> contrast;\n> +\tstd::optional<float> contrast;\n>   \tstd::optional<float> saturation;\n>   };\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 81E01C3220\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 19 Jan 2026 10:39:21 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 94E2F61FC3;\n\tMon, 19 Jan 2026 11:39:20 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 3272661F9F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 19 Jan 2026 11:39:19 +0100 (CET)","from [192.168.33.17] (185.221.143.114.nat.pool.zt.hu\n\t[185.221.143.114])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 9FEDD2D9;\n\tMon, 19 Jan 2026 11:38:48 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"UdmB+SUy\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1768819128;\n\tbh=RWleGSxezWmK3hnn99drzsYoSSETxFWHRh73yseiLfM=;\n\th=Date:Subject:To:Cc:References:From:In-Reply-To:From;\n\tb=UdmB+SUy9EhbQDYh2/YV/bjmLhImO5RtZ6WVu4/UvrsRm5ZSKYYmNYs4UBhP2Z/v6\n\tQTDzZs9jg8/QBMLb8mB+W70rNbtwhCYZMH1t0j+pfc+j5aWXAQIs8BO0iKFa5mH/+C\n\tRMENHyVM5rSIScOhiDR+rSark5qVgm/AK+NuL44s=","Message-ID":"<458b58dc-14b0-457b-b08b-f6f2d38a4db1@ideasonboard.com>","Date":"Mon, 19 Jan 2026 11:39:15 +0100","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH v3 11/14] libcamera: ipa: simple: Use float type for\n\tadjustment controls","To":"Milan Zamazal <mzamazal@redhat.com>, libcamera-devel@lists.libcamera.org","Cc":"Kieran Bingham <kieran.bingham@ideasonboard.com>","References":"<20260114113016.25162-1-mzamazal@redhat.com>\n\t<20260114113016.25162-12-mzamazal@redhat.com>","From":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Content-Language":"en-US, hu-HU","In-Reply-To":"<20260114113016.25162-12-mzamazal@redhat.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"8bit","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>"}}]