libcamera  v0.3.1+12-19bbca3c
Supporting cameras in Linux since 2019
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. More...
 
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. More...
 
Matrix< T, R, C > get (unsigned int ct)
 Retrieve a matrix from the list of matrices, interpolating if necessary. More...
 

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
TType of numerical values to be stored in the matrices
RNumber of rows in the matrices
CNumber 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
matricesMap 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]keyThe 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
TType of data stored in the matrices
RNumber of rows of the matrices
CNumber of columns of the matrices
Parameters
[in]yamlThe yaml object that contains the map of unsigned integers to matrices
[in]key_nameThe name of the key in the yaml object
[in]matrix_nameThe 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: