libcamera v0.0.0
Supporting cameras in Linux since 2019
Public Member Functions | List of all members
libcamera::ipa::Algorithm< Context, Config, Params, Stats > Class Template Reference

The base class for all IPA algorithms. More...

Inheritance diagram for libcamera::ipa::Algorithm< Context, Config, Params, Stats >:
Inheritance graph
[legend]

Public Member Functions

virtual int configure (Context &context, const Config &configInfo)
 Configure the Algorithm given an IPAConfigInfo. More...
 
virtual void prepare (Context &context, Params *params)
 Fill the params buffer with ISP processing parameters for a frame. More...
 
virtual void process (Context &context, const Stats *stats)
 Process ISP statistics, and run algorithm operations. More...
 

Detailed Description

template<typename Context, typename Config, typename Params, typename Stats>
class libcamera::ipa::Algorithm< Context, Config, Params, Stats >

The base class for all IPA algorithms.

Template Parameters
ContextThe type of shared IPA context
ConfigThe type of the IPA configuration data
ParamsThe type of the ISP specific parameters
StatsThe type of the IPA statistics and ISP results

The Algorithm class defines a standard interface for IPA algorithms. By abstracting algorithms, it makes possible the implementation of generic code to manage algorithms regardless of their specific type.

Member Function Documentation

◆ configure()

template<typename Context , typename Config , typename Params , typename Stats >
libcamera::ipa::Algorithm< Context, Config, Params, Stats >::configure ( Context &  context,
const Config &  configInfo 
)
inlinevirtual

Configure the Algorithm given an IPAConfigInfo.

Parameters
[in]contextThe shared IPA context
[in]configInfoThe IPA configuration data, received from the pipeline handler

Algorithms may implement a configure operation to pre-calculate parameters prior to commencing streaming.

Configuration state may be stored in the IPASessionConfiguration structure of the IPAContext.

Returns
0 if successful, an error code otherwise

◆ prepare()

template<typename Context , typename Config , typename Params , typename Stats >
libcamera::ipa::Algorithm< Context, Config, Params, Stats >::prepare ( Context &  context,
Params *  params 
)
inlinevirtual

Fill the params buffer with ISP processing parameters for a frame.

Parameters
[in]contextThe shared IPA context
[out]paramsThe ISP specific parameters.

This function is called for every frame when the camera is running before it is processed by the ISP to prepare the ISP processing parameters for that frame.

Algorithms shall fill in the parameter structure fields appropriately to configure the ISP processing blocks that they are responsible for. This includes setting fields and flags that enable those processing blocks.

◆ process()

template<typename Context , typename Config , typename Params , typename Stats >
libcamera::ipa::Algorithm< Context, Config, Params, Stats >::process ( Context &  context,
const Stats *  stats 
)
inlinevirtual

Process ISP statistics, and run algorithm operations.

Parameters
[in]contextThe shared IPA context
[in]statsThe IPA statistics and ISP results

This function is called while camera is running for every frame processed by the ISP, to process statistics generated from that frame by the ISP. Algorithms shall use this data to run calculations and update their state accordingly.

Processing shall not take an undue amount of time, and any extended or computationally expensive calculations or operations must be handled asynchronously in a separate thread.

Algorithms can store state in their respective IPAFrameContext structures, and reference state from the IPAFrameContext of other algorithms.

Todo:
Historical data may be required as part of the processing. Either the previous frame, or the IPAFrameContext state of the frame that generated the statistics for this operation may be required for some advanced algorithms to prevent oscillations or support control loops correctly. Only a single IPAFrameContext is available currently, and so any data stored may represent the results of the previously completed operations.

Care shall be taken to ensure the ordering of access to the information such that the algorithms use up to date state as required.


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