libcamera v0.3.1 Supporting cameras in Linux since 2019

Loading...
Searching...
No Matches
Public Member Functions | List of all members
libcamera::ipa::MatrixInterpolator< T, R, C > Class Template Reference

Class for storing, retrieving, and interpolating matrices. More...

## Public Member Functions
| MatrixInterpolator (const std::map< unsigned int, Matrix< T, R, C > > &matrices)
| Construct a matrix interpolator from a map of matrices.
void | reset ()
| Reset the matrix interpolator content to a single identity matrix.
int | readYaml (const libcamera::YamlObject &yaml, const std::string &key_name, const std::string &matrix_name)
| Initialize an MatrixInterpolator instance from yaml.
Matrix< T, R, C > | get (unsigned int ct)
| Retrieve a matrix from the list of matrices, interpolating if necessary.

## Detailed Description

template<typename T, unsigned int R, unsigned int C>
class libcamera::ipa::MatrixInterpolator< T, R, C >

Class for storing, retrieving, and interpolating matrices.

Template Parameters

  T | Type of numerical values to be stored in the matrices
  R | Number of rows in the matrices
  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.

## Constructor & Destructor Documentation

## ◆ MatrixInterpolator()

template<typename T , unsigned int R, unsigned int C>

libcamera::ipa::MatrixInterpolator< T, R, C >::MatrixInterpolator | ( | const std::map< unsigned int, Matrix< T, R, C > > & | matrices | ) |
| inline

Construct a matrix interpolator from a map of matrices.

Parameters

  matrices | Map from which to construct the matrix interpolator

## Member Function Documentation

## ◆ get()

template<typename T , unsigned int R, unsigned int C>

Matrix< T, R, C > libcamera::ipa::MatrixInterpolator< T, R, C >::get | ( | unsigned int | key | ) |
| inline

Retrieve a matrix from the list of matrices, interpolating if necessary.

Parameters

  [in] | key | The unsigned integer key of the matrix to retrieve

Returns
  The matrix corresponding to the color temperature

## ◆ readYaml()

template<typename T , unsigned int R, unsigned int C>

int libcamera::ipa::MatrixInterpolator< T, R, C >::readYaml | ( | const libcamera::YamlObject & | yaml,
|  | const std::string & | key_name,
|  | const std::string & | matrix_name )
| inline

Initialize an MatrixInterpolator instance from yaml.

Template Parameters

  T | Type of data stored in the matrices
  R | Number of rows of the matrices
  C | Number of columns of the matrices

Parameters

  [in] | yaml | The yaml object that contains the map of unsigned integers to matrices
  [in] | key_name | The name of the key in the yaml object
  [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 key_name to the key value (usually color temperature), and one or more of 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, key_name would be 'ct', and 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 matrix_name parameter.

Returns
  Zero on success, negative error code otherwise

The documentation for this class was generated from the following files:

- src/ipa/libipa/matrix_interpolator.h
- src/ipa/libipa/matrix_interpolator.cpp