[v2,4/9] ipa: rkisp1: Remove MatrixInterpolator
diff mbox series

Message ID 20240913075750.35115-5-stefan.klug@ideasonboard.com
State Superseded
Headers show
Series
  • Implement polynomial lsc support
Related show

Commit Message

Stefan Klug Sept. 13, 2024, 7:57 a.m. UTC
The MatrixInterpolator is no longer used. Remove it.

Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>
---
 src/ipa/libipa/matrix_interpolator.cpp | 103 ---------------------
 src/ipa/libipa/matrix_interpolator.h   | 120 -------------------------
 src/ipa/libipa/meson.build             |   2 -
 3 files changed, 225 deletions(-)
 delete mode 100644 src/ipa/libipa/matrix_interpolator.cpp
 delete mode 100644 src/ipa/libipa/matrix_interpolator.h

Comments

Kieran Bingham Sept. 13, 2024, 9:15 a.m. UTC | #1
Quoting Stefan Klug (2024-09-13 08:57:22)
> The MatrixInterpolator is no longer used. Remove it.

That's an easy one.

Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>

> Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>
> ---
>  src/ipa/libipa/matrix_interpolator.cpp | 103 ---------------------
>  src/ipa/libipa/matrix_interpolator.h   | 120 -------------------------
>  src/ipa/libipa/meson.build             |   2 -
>  3 files changed, 225 deletions(-)
>  delete mode 100644 src/ipa/libipa/matrix_interpolator.cpp
>  delete mode 100644 src/ipa/libipa/matrix_interpolator.h
> 
> diff --git a/src/ipa/libipa/matrix_interpolator.cpp b/src/ipa/libipa/matrix_interpolator.cpp
> deleted file mode 100644
> index d5188f8aa4e9..000000000000
> --- a/src/ipa/libipa/matrix_interpolator.cpp
> +++ /dev/null
> @@ -1,103 +0,0 @@
> -/* SPDX-License-Identifier: LGPL-2.1-or-later */
> -/*
> - * Copyright (C) 2024, Paul Elder <paul.elder@ideasonboard.com>
> - *
> - * Helper class for interpolating maps of matrices
> - */
> -#include "matrix_interpolator.h"
> -
> -#include <libcamera/base/log.h>
> -
> -/**
> - * \file matrix_interpolator.h
> - * \brief Helper class for interpolating maps of matrices
> - */
> -
> -namespace libcamera {
> -
> -LOG_DEFINE_CATEGORY(MatrixInterpolator)
> -
> -namespace ipa {
> -
> -/**
> - * \class MatrixInterpolator
> - * \brief Class for storing, retrieving, and interpolating matrices
> - * \tparam T Type of numerical values to be stored in the matrices
> - * \tparam R Number of rows in the matrices
> - * \tparam C Number of columns in the matrices
> - *
> - * The main use case is to pass a map from color temperatures to corresponding
> - * matrices (eg. color correction), and then requesting a matrix for a specific
> - * color temperature. This class will abstract away the interpolation portion.
> - */
> -
> -/**
> - * \fn MatrixInterpolator::MatrixInterpolator(const std::map<unsigned int, Matrix<T, R, C>> &matrices)
> - * \brief Construct a matrix interpolator from a map of matrices
> - * \param matrices Map from which to construct the matrix interpolator
> - */
> -
> -/**
> - * \fn MatrixInterpolator::reset()
> - * \brief Reset the matrix interpolator content to a single identity matrix
> - */
> -
> -/**
> - * \fn int MatrixInterpolator<T, R, C>::readYaml()
> - * \brief Initialize an MatrixInterpolator instance from yaml
> - * \tparam T Type of data stored in the matrices
> - * \tparam R Number of rows of the matrices
> - * \tparam C Number of columns of the matrices
> - * \param[in] yaml The yaml object that contains the map of unsigned integers to matrices
> - * \param[in] key_name The name of the key in the yaml object
> - * \param[in] matrix_name The name of the matrix in the yaml object
> - *
> - * The yaml object is expected to be a list of maps. Each map has two or more
> - * pairs: one of \a key_name to the key value (usually color temperature), and
> - * one or more of \a matrix_name to the matrix. This is a bit difficult to
> - * explain, so here is an example (in python, as it is easier to parse than
> - * yaml):
> - *       [
> - *               {
> - *                   'ct': 2860,
> - *                   'ccm': [ 2.12089, -0.52461, -0.59629,
> - *                           -0.85342,  2.80445, -0.95103,
> - *                           -0.26897, -1.14788,  2.41685 ],
> - *                   'offsets': [ 0, 0, 0 ]
> - *               },
> - *
> - *               {
> - *                   'ct': 2960,
> - *                   'ccm': [ 2.26962, -0.54174, -0.72789,
> - *                           -0.77008,  2.60271, -0.83262,
> - *                           -0.26036, -1.51254,  2.77289 ],
> - *                   'offsets': [ 0, 0, 0 ]
> - *               },
> - *
> - *               {
> - *                   'ct': 3603,
> - *                   'ccm': [ 2.18644, -0.66148, -0.52496,
> - *                           -0.77828,  2.69474, -0.91645,
> - *                           -0.25239, -0.83059,  2.08298 ],
> - *                   'offsets': [ 0, 0, 0 ]
> - *               },
> - *       ]
> - *
> - * In this case, \a key_name would be 'ct', and \a matrix_name can be either
> - * 'ccm' or 'offsets'. This way multiple matrix interpolators can be defined in
> - * one set of color temperature ranges in the tuning file, and they can be
> - * retrieved separately with the \a matrix_name parameter.
> - *
> - * \return Zero on success, negative error code otherwise
> - */
> -
> -/**
> - * \fn Matrix<T, R, C> MatrixInterpolator<T, R, C>::get(unsigned int key)
> - * \brief Retrieve a matrix from the list of matrices, interpolating if necessary
> - * \param[in] key The unsigned integer key of the matrix to retrieve
> - * \return The matrix corresponding to the color temperature
> - */
> -
> -} /* namespace ipa */
> -
> -} /* namespace libcamera */
> diff --git a/src/ipa/libipa/matrix_interpolator.h b/src/ipa/libipa/matrix_interpolator.h
> deleted file mode 100644
> index afbce5386b06..000000000000
> --- a/src/ipa/libipa/matrix_interpolator.h
> +++ /dev/null
> @@ -1,120 +0,0 @@
> -/* SPDX-License-Identifier: LGPL-2.1-or-later */
> -/*
> - * Copyright (C) 2024, Paul Elder <paul.elder@ideasonboard.com>
> - *
> - * Helper class for interpolating maps of matrices
> - */
> -
> -#pragma once
> -
> -#include <map>
> -#include <string>
> -
> -#include <libcamera/base/log.h>
> -
> -#include "libcamera/internal/yaml_parser.h"
> -
> -#include "matrix.h"
> -
> -namespace libcamera {
> -
> -LOG_DECLARE_CATEGORY(MatrixInterpolator)
> -
> -namespace ipa {
> -
> -#ifndef __DOXYGEN__
> -template<typename T, unsigned int R, unsigned int C,
> -        std::enable_if_t<std::is_arithmetic_v<T>> * = nullptr>
> -#else
> -template<typename T, unsigned int R, unsigned int C>
> -#endif /* __DOXYGEN__ */
> -class MatrixInterpolator
> -{
> -public:
> -       MatrixInterpolator()
> -       {
> -               reset();
> -       }
> -
> -       MatrixInterpolator(const std::map<unsigned int, Matrix<T, R, C>> &matrices)
> -       {
> -               for (const auto &pair : matrices)
> -                       matrices_[pair.first] = pair.second;
> -       }
> -
> -       ~MatrixInterpolator() {}
> -
> -       void reset()
> -       {
> -               matrices_.clear();
> -               matrices_[0] = Matrix<T, R, C>::identity();
> -       }
> -
> -       int readYaml(const libcamera::YamlObject &yaml,
> -                    const std::string &key_name,
> -                    const std::string &matrix_name)
> -       {
> -               matrices_.clear();
> -
> -               if (!yaml.isList()) {
> -                       LOG(MatrixInterpolator, Error) << "yaml object must be a list";
> -                       return -EINVAL;
> -               }
> -
> -               for (const auto &value : yaml.asList()) {
> -                       unsigned int ct = std::stoul(value[key_name].get<std::string>(""));
> -                       std::optional<Matrix<T, R, C>> matrix =
> -                               value[matrix_name].get<Matrix<T, R, C>>();
> -                       if (!matrix) {
> -                               LOG(MatrixInterpolator, Error) << "Failed to read matrix";
> -                               return -EINVAL;
> -                       }
> -
> -                       matrices_[ct] = *matrix;
> -
> -                       LOG(MatrixInterpolator, Debug)
> -                               << "Read matrix '" << matrix_name << "' for key '"
> -                               << key_name << "' " << ct << ": "
> -                               << matrices_[ct].toString();
> -               }
> -
> -               if (matrices_.size() < 1) {
> -                       LOG(MatrixInterpolator, Error) << "Need at least one matrix";
> -                       return -EINVAL;
> -               }
> -
> -               return 0;
> -       }
> -
> -       Matrix<T, R, C> get(unsigned int ct)
> -       {
> -               ASSERT(matrices_.size() > 0);
> -
> -               if (matrices_.size() == 1 ||
> -                   ct <= matrices_.begin()->first)
> -                       return matrices_.begin()->second;
> -
> -               if (ct >= matrices_.rbegin()->first)
> -                       return matrices_.rbegin()->second;
> -
> -               if (matrices_.find(ct) != matrices_.end())
> -                       return matrices_[ct];
> -
> -               /* The above four guarantee that this will succeed */
> -               auto iter = matrices_.upper_bound(ct);
> -               unsigned int ctUpper = iter->first;
> -               unsigned int ctLower = (--iter)->first;
> -
> -               double lambda = (ct - ctLower) / static_cast<double>(ctUpper - ctLower);
> -               Matrix<T, R, C> ret =
> -                       lambda * matrices_[ctUpper] + (1.0 - lambda) * matrices_[ctLower];
> -               return ret;
> -       }
> -
> -private:
> -       std::map<unsigned int, Matrix<T, R, C>> matrices_;
> -};
> -
> -} /* namespace ipa */
> -
> -} /* namespace libcamera */
> diff --git a/src/ipa/libipa/meson.build b/src/ipa/libipa/meson.build
> index 2c2712a7d252..3740178b2909 100644
> --- a/src/ipa/libipa/meson.build
> +++ b/src/ipa/libipa/meson.build
> @@ -9,7 +9,6 @@ libipa_headers = files([
>      'histogram.h',
>      'interpolator.h',
>      'matrix.h',
> -    'matrix_interpolator.h',
>      'module.h',
>      'pwl.h',
>      'vector.h',
> @@ -24,7 +23,6 @@ libipa_sources = files([
>      'histogram.cpp',
>      'interpolator.cpp',
>      'matrix.cpp',
> -    'matrix_interpolator.cpp',
>      'module.cpp',
>      'pwl.cpp',
>      'vector.cpp',
> -- 
> 2.43.0
>
Paul Elder Sept. 13, 2024, 10:19 a.m. UTC | #2
On Fri, Sep 13, 2024 at 09:57:22AM +0200, Stefan Klug wrote:
> The MatrixInterpolator is no longer used. Remove it.
> 
> Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>

Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>

> ---
>  src/ipa/libipa/matrix_interpolator.cpp | 103 ---------------------
>  src/ipa/libipa/matrix_interpolator.h   | 120 -------------------------
>  src/ipa/libipa/meson.build             |   2 -
>  3 files changed, 225 deletions(-)
>  delete mode 100644 src/ipa/libipa/matrix_interpolator.cpp
>  delete mode 100644 src/ipa/libipa/matrix_interpolator.h
> 
> diff --git a/src/ipa/libipa/matrix_interpolator.cpp b/src/ipa/libipa/matrix_interpolator.cpp
> deleted file mode 100644
> index d5188f8aa4e9..000000000000
> --- a/src/ipa/libipa/matrix_interpolator.cpp
> +++ /dev/null
> @@ -1,103 +0,0 @@
> -/* SPDX-License-Identifier: LGPL-2.1-or-later */
> -/*
> - * Copyright (C) 2024, Paul Elder <paul.elder@ideasonboard.com>
> - *
> - * Helper class for interpolating maps of matrices
> - */
> -#include "matrix_interpolator.h"
> -
> -#include <libcamera/base/log.h>
> -
> -/**
> - * \file matrix_interpolator.h
> - * \brief Helper class for interpolating maps of matrices
> - */
> -
> -namespace libcamera {
> -
> -LOG_DEFINE_CATEGORY(MatrixInterpolator)
> -
> -namespace ipa {
> -
> -/**
> - * \class MatrixInterpolator
> - * \brief Class for storing, retrieving, and interpolating matrices
> - * \tparam T Type of numerical values to be stored in the matrices
> - * \tparam R Number of rows in the matrices
> - * \tparam C Number of columns in the matrices
> - *
> - * The main use case is to pass a map from color temperatures to corresponding
> - * matrices (eg. color correction), and then requesting a matrix for a specific
> - * color temperature. This class will abstract away the interpolation portion.
> - */
> -
> -/**
> - * \fn MatrixInterpolator::MatrixInterpolator(const std::map<unsigned int, Matrix<T, R, C>> &matrices)
> - * \brief Construct a matrix interpolator from a map of matrices
> - * \param matrices Map from which to construct the matrix interpolator
> - */
> -
> -/**
> - * \fn MatrixInterpolator::reset()
> - * \brief Reset the matrix interpolator content to a single identity matrix
> - */
> -
> -/**
> - * \fn int MatrixInterpolator<T, R, C>::readYaml()
> - * \brief Initialize an MatrixInterpolator instance from yaml
> - * \tparam T Type of data stored in the matrices
> - * \tparam R Number of rows of the matrices
> - * \tparam C Number of columns of the matrices
> - * \param[in] yaml The yaml object that contains the map of unsigned integers to matrices
> - * \param[in] key_name The name of the key in the yaml object
> - * \param[in] matrix_name The name of the matrix in the yaml object
> - *
> - * The yaml object is expected to be a list of maps. Each map has two or more
> - * pairs: one of \a key_name to the key value (usually color temperature), and
> - * one or more of \a matrix_name to the matrix. This is a bit difficult to
> - * explain, so here is an example (in python, as it is easier to parse than
> - * yaml):
> - *       [
> - *               {
> - *                   'ct': 2860,
> - *                   'ccm': [ 2.12089, -0.52461, -0.59629,
> - *                           -0.85342,  2.80445, -0.95103,
> - *                           -0.26897, -1.14788,  2.41685 ],
> - *                   'offsets': [ 0, 0, 0 ]
> - *               },
> - *
> - *               {
> - *                   'ct': 2960,
> - *                   'ccm': [ 2.26962, -0.54174, -0.72789,
> - *                           -0.77008,  2.60271, -0.83262,
> - *                           -0.26036, -1.51254,  2.77289 ],
> - *                   'offsets': [ 0, 0, 0 ]
> - *               },
> - *
> - *               {
> - *                   'ct': 3603,
> - *                   'ccm': [ 2.18644, -0.66148, -0.52496,
> - *                           -0.77828,  2.69474, -0.91645,
> - *                           -0.25239, -0.83059,  2.08298 ],
> - *                   'offsets': [ 0, 0, 0 ]
> - *               },
> - *       ]
> - *
> - * In this case, \a key_name would be 'ct', and \a matrix_name can be either
> - * 'ccm' or 'offsets'. This way multiple matrix interpolators can be defined in
> - * one set of color temperature ranges in the tuning file, and they can be
> - * retrieved separately with the \a matrix_name parameter.
> - *
> - * \return Zero on success, negative error code otherwise
> - */
> -
> -/**
> - * \fn Matrix<T, R, C> MatrixInterpolator<T, R, C>::get(unsigned int key)
> - * \brief Retrieve a matrix from the list of matrices, interpolating if necessary
> - * \param[in] key The unsigned integer key of the matrix to retrieve
> - * \return The matrix corresponding to the color temperature
> - */
> -
> -} /* namespace ipa */
> -
> -} /* namespace libcamera */
> diff --git a/src/ipa/libipa/matrix_interpolator.h b/src/ipa/libipa/matrix_interpolator.h
> deleted file mode 100644
> index afbce5386b06..000000000000
> --- a/src/ipa/libipa/matrix_interpolator.h
> +++ /dev/null
> @@ -1,120 +0,0 @@
> -/* SPDX-License-Identifier: LGPL-2.1-or-later */
> -/*
> - * Copyright (C) 2024, Paul Elder <paul.elder@ideasonboard.com>
> - *
> - * Helper class for interpolating maps of matrices
> - */
> -
> -#pragma once
> -
> -#include <map>
> -#include <string>
> -
> -#include <libcamera/base/log.h>
> -
> -#include "libcamera/internal/yaml_parser.h"
> -
> -#include "matrix.h"
> -
> -namespace libcamera {
> -
> -LOG_DECLARE_CATEGORY(MatrixInterpolator)
> -
> -namespace ipa {
> -
> -#ifndef __DOXYGEN__
> -template<typename T, unsigned int R, unsigned int C,
> -	 std::enable_if_t<std::is_arithmetic_v<T>> * = nullptr>
> -#else
> -template<typename T, unsigned int R, unsigned int C>
> -#endif /* __DOXYGEN__ */
> -class MatrixInterpolator
> -{
> -public:
> -	MatrixInterpolator()
> -	{
> -		reset();
> -	}
> -
> -	MatrixInterpolator(const std::map<unsigned int, Matrix<T, R, C>> &matrices)
> -	{
> -		for (const auto &pair : matrices)
> -			matrices_[pair.first] = pair.second;
> -	}
> -
> -	~MatrixInterpolator() {}
> -
> -	void reset()
> -	{
> -		matrices_.clear();
> -		matrices_[0] = Matrix<T, R, C>::identity();
> -	}
> -
> -	int readYaml(const libcamera::YamlObject &yaml,
> -		     const std::string &key_name,
> -		     const std::string &matrix_name)
> -	{
> -		matrices_.clear();
> -
> -		if (!yaml.isList()) {
> -			LOG(MatrixInterpolator, Error) << "yaml object must be a list";
> -			return -EINVAL;
> -		}
> -
> -		for (const auto &value : yaml.asList()) {
> -			unsigned int ct = std::stoul(value[key_name].get<std::string>(""));
> -			std::optional<Matrix<T, R, C>> matrix =
> -				value[matrix_name].get<Matrix<T, R, C>>();
> -			if (!matrix) {
> -				LOG(MatrixInterpolator, Error) << "Failed to read matrix";
> -				return -EINVAL;
> -			}
> -
> -			matrices_[ct] = *matrix;
> -
> -			LOG(MatrixInterpolator, Debug)
> -				<< "Read matrix '" << matrix_name << "' for key '"
> -				<< key_name << "' " << ct << ": "
> -				<< matrices_[ct].toString();
> -		}
> -
> -		if (matrices_.size() < 1) {
> -			LOG(MatrixInterpolator, Error) << "Need at least one matrix";
> -			return -EINVAL;
> -		}
> -
> -		return 0;
> -	}
> -
> -	Matrix<T, R, C> get(unsigned int ct)
> -	{
> -		ASSERT(matrices_.size() > 0);
> -
> -		if (matrices_.size() == 1 ||
> -		    ct <= matrices_.begin()->first)
> -			return matrices_.begin()->second;
> -
> -		if (ct >= matrices_.rbegin()->first)
> -			return matrices_.rbegin()->second;
> -
> -		if (matrices_.find(ct) != matrices_.end())
> -			return matrices_[ct];
> -
> -		/* The above four guarantee that this will succeed */
> -		auto iter = matrices_.upper_bound(ct);
> -		unsigned int ctUpper = iter->first;
> -		unsigned int ctLower = (--iter)->first;
> -
> -		double lambda = (ct - ctLower) / static_cast<double>(ctUpper - ctLower);
> -		Matrix<T, R, C> ret =
> -			lambda * matrices_[ctUpper] + (1.0 - lambda) * matrices_[ctLower];
> -		return ret;
> -	}
> -
> -private:
> -	std::map<unsigned int, Matrix<T, R, C>> matrices_;
> -};
> -
> -} /* namespace ipa */
> -
> -} /* namespace libcamera */
> diff --git a/src/ipa/libipa/meson.build b/src/ipa/libipa/meson.build
> index 2c2712a7d252..3740178b2909 100644
> --- a/src/ipa/libipa/meson.build
> +++ b/src/ipa/libipa/meson.build
> @@ -9,7 +9,6 @@ libipa_headers = files([
>      'histogram.h',
>      'interpolator.h',
>      'matrix.h',
> -    'matrix_interpolator.h',
>      'module.h',
>      'pwl.h',
>      'vector.h',
> @@ -24,7 +23,6 @@ libipa_sources = files([
>      'histogram.cpp',
>      'interpolator.cpp',
>      'matrix.cpp',
> -    'matrix_interpolator.cpp',
>      'module.cpp',
>      'pwl.cpp',
>      'vector.cpp',
> -- 
> 2.43.0
>

Patch
diff mbox series

diff --git a/src/ipa/libipa/matrix_interpolator.cpp b/src/ipa/libipa/matrix_interpolator.cpp
deleted file mode 100644
index d5188f8aa4e9..000000000000
--- a/src/ipa/libipa/matrix_interpolator.cpp
+++ /dev/null
@@ -1,103 +0,0 @@ 
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-/*
- * Copyright (C) 2024, Paul Elder <paul.elder@ideasonboard.com>
- *
- * Helper class for interpolating maps of matrices
- */
-#include "matrix_interpolator.h"
-
-#include <libcamera/base/log.h>
-
-/**
- * \file matrix_interpolator.h
- * \brief Helper class for interpolating maps of matrices
- */
-
-namespace libcamera {
-
-LOG_DEFINE_CATEGORY(MatrixInterpolator)
-
-namespace ipa {
-
-/**
- * \class MatrixInterpolator
- * \brief Class for storing, retrieving, and interpolating matrices
- * \tparam T Type of numerical values to be stored in the matrices
- * \tparam R Number of rows in the matrices
- * \tparam C Number of columns in the matrices
- *
- * The main use case is to pass a map from color temperatures to corresponding
- * matrices (eg. color correction), and then requesting a matrix for a specific
- * color temperature. This class will abstract away the interpolation portion.
- */
-
-/**
- * \fn MatrixInterpolator::MatrixInterpolator(const std::map<unsigned int, Matrix<T, R, C>> &matrices)
- * \brief Construct a matrix interpolator from a map of matrices
- * \param matrices Map from which to construct the matrix interpolator
- */
-
-/**
- * \fn MatrixInterpolator::reset()
- * \brief Reset the matrix interpolator content to a single identity matrix
- */
-
-/**
- * \fn int MatrixInterpolator<T, R, C>::readYaml()
- * \brief Initialize an MatrixInterpolator instance from yaml
- * \tparam T Type of data stored in the matrices
- * \tparam R Number of rows of the matrices
- * \tparam C Number of columns of the matrices
- * \param[in] yaml The yaml object that contains the map of unsigned integers to matrices
- * \param[in] key_name The name of the key in the yaml object
- * \param[in] matrix_name The name of the matrix in the yaml object
- *
- * The yaml object is expected to be a list of maps. Each map has two or more
- * pairs: one of \a key_name to the key value (usually color temperature), and
- * one or more of \a matrix_name to the matrix. This is a bit difficult to
- * explain, so here is an example (in python, as it is easier to parse than
- * yaml):
- *       [
- *               {
- *                   'ct': 2860,
- *                   'ccm': [ 2.12089, -0.52461, -0.59629,
- *                           -0.85342,  2.80445, -0.95103,
- *                           -0.26897, -1.14788,  2.41685 ],
- *                   'offsets': [ 0, 0, 0 ]
- *               },
- *
- *               {
- *                   'ct': 2960,
- *                   'ccm': [ 2.26962, -0.54174, -0.72789,
- *                           -0.77008,  2.60271, -0.83262,
- *                           -0.26036, -1.51254,  2.77289 ],
- *                   'offsets': [ 0, 0, 0 ]
- *               },
- *
- *               {
- *                   'ct': 3603,
- *                   'ccm': [ 2.18644, -0.66148, -0.52496,
- *                           -0.77828,  2.69474, -0.91645,
- *                           -0.25239, -0.83059,  2.08298 ],
- *                   'offsets': [ 0, 0, 0 ]
- *               },
- *       ]
- *
- * In this case, \a key_name would be 'ct', and \a matrix_name can be either
- * 'ccm' or 'offsets'. This way multiple matrix interpolators can be defined in
- * one set of color temperature ranges in the tuning file, and they can be
- * retrieved separately with the \a matrix_name parameter.
- *
- * \return Zero on success, negative error code otherwise
- */
-
-/**
- * \fn Matrix<T, R, C> MatrixInterpolator<T, R, C>::get(unsigned int key)
- * \brief Retrieve a matrix from the list of matrices, interpolating if necessary
- * \param[in] key The unsigned integer key of the matrix to retrieve
- * \return The matrix corresponding to the color temperature
- */
-
-} /* namespace ipa */
-
-} /* namespace libcamera */
diff --git a/src/ipa/libipa/matrix_interpolator.h b/src/ipa/libipa/matrix_interpolator.h
deleted file mode 100644
index afbce5386b06..000000000000
--- a/src/ipa/libipa/matrix_interpolator.h
+++ /dev/null
@@ -1,120 +0,0 @@ 
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-/*
- * Copyright (C) 2024, Paul Elder <paul.elder@ideasonboard.com>
- *
- * Helper class for interpolating maps of matrices
- */
-
-#pragma once
-
-#include <map>
-#include <string>
-
-#include <libcamera/base/log.h>
-
-#include "libcamera/internal/yaml_parser.h"
-
-#include "matrix.h"
-
-namespace libcamera {
-
-LOG_DECLARE_CATEGORY(MatrixInterpolator)
-
-namespace ipa {
-
-#ifndef __DOXYGEN__
-template<typename T, unsigned int R, unsigned int C,
-	 std::enable_if_t<std::is_arithmetic_v<T>> * = nullptr>
-#else
-template<typename T, unsigned int R, unsigned int C>
-#endif /* __DOXYGEN__ */
-class MatrixInterpolator
-{
-public:
-	MatrixInterpolator()
-	{
-		reset();
-	}
-
-	MatrixInterpolator(const std::map<unsigned int, Matrix<T, R, C>> &matrices)
-	{
-		for (const auto &pair : matrices)
-			matrices_[pair.first] = pair.second;
-	}
-
-	~MatrixInterpolator() {}
-
-	void reset()
-	{
-		matrices_.clear();
-		matrices_[0] = Matrix<T, R, C>::identity();
-	}
-
-	int readYaml(const libcamera::YamlObject &yaml,
-		     const std::string &key_name,
-		     const std::string &matrix_name)
-	{
-		matrices_.clear();
-
-		if (!yaml.isList()) {
-			LOG(MatrixInterpolator, Error) << "yaml object must be a list";
-			return -EINVAL;
-		}
-
-		for (const auto &value : yaml.asList()) {
-			unsigned int ct = std::stoul(value[key_name].get<std::string>(""));
-			std::optional<Matrix<T, R, C>> matrix =
-				value[matrix_name].get<Matrix<T, R, C>>();
-			if (!matrix) {
-				LOG(MatrixInterpolator, Error) << "Failed to read matrix";
-				return -EINVAL;
-			}
-
-			matrices_[ct] = *matrix;
-
-			LOG(MatrixInterpolator, Debug)
-				<< "Read matrix '" << matrix_name << "' for key '"
-				<< key_name << "' " << ct << ": "
-				<< matrices_[ct].toString();
-		}
-
-		if (matrices_.size() < 1) {
-			LOG(MatrixInterpolator, Error) << "Need at least one matrix";
-			return -EINVAL;
-		}
-
-		return 0;
-	}
-
-	Matrix<T, R, C> get(unsigned int ct)
-	{
-		ASSERT(matrices_.size() > 0);
-
-		if (matrices_.size() == 1 ||
-		    ct <= matrices_.begin()->first)
-			return matrices_.begin()->second;
-
-		if (ct >= matrices_.rbegin()->first)
-			return matrices_.rbegin()->second;
-
-		if (matrices_.find(ct) != matrices_.end())
-			return matrices_[ct];
-
-		/* The above four guarantee that this will succeed */
-		auto iter = matrices_.upper_bound(ct);
-		unsigned int ctUpper = iter->first;
-		unsigned int ctLower = (--iter)->first;
-
-		double lambda = (ct - ctLower) / static_cast<double>(ctUpper - ctLower);
-		Matrix<T, R, C> ret =
-			lambda * matrices_[ctUpper] + (1.0 - lambda) * matrices_[ctLower];
-		return ret;
-	}
-
-private:
-	std::map<unsigned int, Matrix<T, R, C>> matrices_;
-};
-
-} /* namespace ipa */
-
-} /* namespace libcamera */
diff --git a/src/ipa/libipa/meson.build b/src/ipa/libipa/meson.build
index 2c2712a7d252..3740178b2909 100644
--- a/src/ipa/libipa/meson.build
+++ b/src/ipa/libipa/meson.build
@@ -9,7 +9,6 @@  libipa_headers = files([
     'histogram.h',
     'interpolator.h',
     'matrix.h',
-    'matrix_interpolator.h',
     'module.h',
     'pwl.h',
     'vector.h',
@@ -24,7 +23,6 @@  libipa_sources = files([
     'histogram.cpp',
     'interpolator.cpp',
     'matrix.cpp',
-    'matrix_interpolator.cpp',
     'module.cpp',
     'pwl.cpp',
     'vector.cpp',