From patchwork Fri Nov 15 12:25:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dan Scally X-Patchwork-Id: 21919 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 5DB21C0F1B for ; Fri, 15 Nov 2024 12:26:41 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 71F0D6588F; Fri, 15 Nov 2024 13:26:36 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="dBbn7nfr"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id AA53B65873 for ; Fri, 15 Nov 2024 13:26:33 +0100 (CET) Received: from mail.ideasonboard.com (cpc141996-chfd3-2-0-cust928.12-3.cable.virginm.net [86.13.91.161]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id E7D3F6BE; Fri, 15 Nov 2024 13:26:18 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1731673579; bh=1liQx5U3JHim55RmFMwMm6sFU4F/Op3o8ZvItLzLXZg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dBbn7nfrVZtXeJKX/lJBu3oED/pT8wcBI85kuexQCaXKzxWxht9iu1yZXjlprqs5w V7s0ZPYdq+sY7sg/Sn5arqDA2If6ZPxRe9n6hV/Aufd+VgLRFUhjV1vTiWrr+wuQ1a YJcD2HZckcSu/grjRBIiM4gGd76vCc3jEdE3iNsw= From: Daniel Scally To: libcamera-devel@lists.libcamera.org Cc: Anthony.McGivern@arm.com, Daniel Scally Subject: [PATCH v4 01/11] libipa: Centralise Fixed / Floating point convertors Date: Fri, 15 Nov 2024 12:25:30 +0000 Message-Id: <20241115122540.478103-2-dan.scally@ideasonboard.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20241115122540.478103-1-dan.scally@ideasonboard.com> References: <20241115122540.478103-1-dan.scally@ideasonboard.com> MIME-Version: 1.0 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" The rkisp1 IPA has some utility functions to convert between fixed and floating point numbers. Move those to libipa so they're available for use in other IPA modules too. Signed-off-by: Daniel Scally Reviewed-by: Kieran Bingham Reviewed-by: Laurent Pinchart --- Changes in v4: - New patch .../{rkisp1/utils.cpp => libipa/fixedpoint.cpp} | 10 +++++----- src/ipa/{rkisp1/utils.h => libipa/fixedpoint.h} | 6 +++--- src/ipa/libipa/meson.build | 2 ++ src/ipa/rkisp1/algorithms/ccm.cpp | 4 ++-- src/ipa/rkisp1/meson.build | 1 - .../rkisp1-utils.cpp => libipa/fixedpoint.cpp} | 16 ++++++++-------- test/ipa/libipa/meson.build | 1 + test/ipa/meson.build | 1 - test/ipa/rkisp1/meson.build | 15 --------------- 9 files changed, 21 insertions(+), 35 deletions(-) rename src/ipa/{rkisp1/utils.cpp => libipa/fixedpoint.cpp} (87%) rename src/ipa/{rkisp1/utils.h => libipa/fixedpoint.h} (93%) rename test/ipa/{rkisp1/rkisp1-utils.cpp => libipa/fixedpoint.cpp} (85%) delete mode 100644 test/ipa/rkisp1/meson.build diff --git a/src/ipa/rkisp1/utils.cpp b/src/ipa/libipa/fixedpoint.cpp similarity index 87% rename from src/ipa/rkisp1/utils.cpp rename to src/ipa/libipa/fixedpoint.cpp index 960ec64e..6b698fc5 100644 --- a/src/ipa/rkisp1/utils.cpp +++ b/src/ipa/libipa/fixedpoint.cpp @@ -2,18 +2,18 @@ /* * Copyright (C) 2024, Paul Elder * - * Miscellaneous utility functions specific to rkisp1 + * Fixed / floating point conversions */ -#include "utils.h" +#include "fixedpoint.h" /** - * \file utils.h + * \file fixedpoint.h */ namespace libcamera { -namespace ipa::rkisp1::utils { +namespace ipa { /** * \fn R floatingToFixedPoint(T number) @@ -37,6 +37,6 @@ namespace ipa::rkisp1::utils { * \return The converted value */ -} /* namespace ipa::rkisp1::utils */ +} /* namespace ipa */ } /* namespace libcamera */ diff --git a/src/ipa/rkisp1/utils.h b/src/ipa/libipa/fixedpoint.h similarity index 93% rename from src/ipa/rkisp1/utils.h rename to src/ipa/libipa/fixedpoint.h index 5f38b50b..709cf50f 100644 --- a/src/ipa/rkisp1/utils.h +++ b/src/ipa/libipa/fixedpoint.h @@ -2,7 +2,7 @@ /* * Copyright (C) 2024, Paul Elder * - * Miscellaneous utility functions specific to rkisp1 + * Fixed / floating point conversions */ #pragma once @@ -12,7 +12,7 @@ namespace libcamera { -namespace ipa::rkisp1::utils { +namespace ipa { #ifndef __DOXYGEN__ template(t) / static_cast(1 << F); } -} /* namespace ipa::rkisp1::utils */ +} /* namespace ipa */ } /* namespace libcamera */ diff --git a/src/ipa/libipa/meson.build b/src/ipa/libipa/meson.build index 788d037a..a1d662c9 100644 --- a/src/ipa/libipa/meson.build +++ b/src/ipa/libipa/meson.build @@ -7,6 +7,7 @@ libipa_headers = files([ 'colours.h', 'exposure_mode_helper.h', 'fc_queue.h', + 'fixedpoint.h', 'histogram.h', 'interpolator.h', 'lsc_polynomial.h', @@ -23,6 +24,7 @@ libipa_sources = files([ 'colours.cpp', 'exposure_mode_helper.cpp', 'fc_queue.cpp', + 'fixedpoint.cpp', 'histogram.cpp', 'interpolator.cpp', 'lsc_polynomial.cpp', diff --git a/src/ipa/rkisp1/algorithms/ccm.cpp b/src/ipa/rkisp1/algorithms/ccm.cpp index 6b7d2e2c..e2b5cf4d 100644 --- a/src/ipa/rkisp1/algorithms/ccm.cpp +++ b/src/ipa/rkisp1/algorithms/ccm.cpp @@ -18,7 +18,7 @@ #include "libcamera/internal/yaml_parser.h" -#include "../utils.h" +#include "libipa/fixedpoint.h" #include "libipa/interpolator.h" /** @@ -72,7 +72,7 @@ void Ccm::setParameters(struct rkisp1_cif_isp_ctk_config &config, for (unsigned int i = 0; i < 3; i++) { for (unsigned int j = 0; j < 3; j++) config.coeff[i][j] = - utils::floatingToFixedPoint<4, 7, uint16_t, double>(matrix[i][j]); + floatingToFixedPoint<4, 7, uint16_t, double>(matrix[i][j]); } for (unsigned int i = 0; i < 3; i++) diff --git a/src/ipa/rkisp1/meson.build b/src/ipa/rkisp1/meson.build index 34844f14..26a9fa40 100644 --- a/src/ipa/rkisp1/meson.build +++ b/src/ipa/rkisp1/meson.build @@ -9,7 +9,6 @@ rkisp1_ipa_sources = files([ 'ipa_context.cpp', 'params.cpp', 'rkisp1.cpp', - 'utils.cpp', ]) rkisp1_ipa_sources += rkisp1_ipa_algorithms diff --git a/test/ipa/rkisp1/rkisp1-utils.cpp b/test/ipa/libipa/fixedpoint.cpp similarity index 85% rename from test/ipa/rkisp1/rkisp1-utils.cpp rename to test/ipa/libipa/fixedpoint.cpp index b1863894..99eb662d 100644 --- a/test/ipa/rkisp1/rkisp1-utils.cpp +++ b/test/ipa/libipa/fixedpoint.cpp @@ -2,7 +2,7 @@ /* * Copyright (C) 2024, Paul Elder * - * Miscellaneous utility tests + * Fixed / Floating point utility tests */ #include @@ -10,22 +10,22 @@ #include #include -#include "../src/ipa/rkisp1/utils.h" +#include "../src/ipa/libipa/fixedpoint.h" #include "test.h" using namespace std; using namespace libcamera; -using namespace ipa::rkisp1; +using namespace ipa; -class RkISP1UtilsTest : public Test +class FixedPointUtilsTest : public Test { protected: /* R for real, I for integer */ template int testFixedToFloat(I input, R expected) { - R out = utils::fixedToFloatingPoint(input); + R out = fixedToFloatingPoint(input); R prec = 1.0 / (1 << FracPrec); if (std::abs(out - expected) > prec) { cerr << "Reverse conversion expected " << input @@ -40,7 +40,7 @@ protected: template int testSingleFixedPoint(double input, T expected) { - T ret = utils::floatingToFixedPoint(input); + T ret = floatingToFixedPoint(input); if (ret != expected) { cerr << "Expected " << input << " to convert to " << expected << ", got " << ret << std::endl; @@ -51,7 +51,7 @@ protected: * The precision check is fairly arbitrary but is based on what * the rkisp1 is capable of in the crosstalk module. */ - double f = utils::fixedToFloatingPoint(ret); + double f = fixedToFloatingPoint(ret); if (std::abs(f - input) > 0.005) { cerr << "Reverse conversion expected " << ret << " to convert to " << input @@ -105,4 +105,4 @@ protected: } }; -TEST_REGISTER(RkISP1UtilsTest) +TEST_REGISTER(FixedPointUtilsTest) diff --git a/test/ipa/libipa/meson.build b/test/ipa/libipa/meson.build index 4d2427db..281e6b1f 100644 --- a/test/ipa/libipa/meson.build +++ b/test/ipa/libipa/meson.build @@ -1,6 +1,7 @@ # SPDX-License-Identifier: CC0-1.0 libipa_test = [ + {'name': 'fixedpoint', 'sources': ['fixedpoint.cpp']}, {'name': 'interpolator', 'sources': ['interpolator.cpp']}, ] diff --git a/test/ipa/meson.build b/test/ipa/meson.build index 63820de5..ceed15ba 100644 --- a/test/ipa/meson.build +++ b/test/ipa/meson.build @@ -1,7 +1,6 @@ # SPDX-License-Identifier: CC0-1.0 subdir('libipa') -subdir('rkisp1') ipa_test = [ {'name': 'ipa_module_test', 'sources': ['ipa_module_test.cpp']}, diff --git a/test/ipa/rkisp1/meson.build b/test/ipa/rkisp1/meson.build deleted file mode 100644 index 894523da..00000000 --- a/test/ipa/rkisp1/meson.build +++ /dev/null @@ -1,15 +0,0 @@ -# SPDX-License-Identifier: CC0-1.0 - -rkisp1_ipa_test = [ - {'name': 'rkisp1-utils', 'sources': ['rkisp1-utils.cpp']}, -] - -foreach test : rkisp1_ipa_test - exe = executable(test['name'], test['sources'], - dependencies : [libcamera_private, libipa_dep], - link_with : [test_libraries], - include_directories : [test_includes_internal, - '../../../src/ipa/rkisp1/']) - - test(test['name'], exe, suite : 'ipa') -endforeach