libcamera  v0.4.0
Supporting cameras in Linux since 2019
algorithm.h
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2 /*
3  * Copyright (C) 2021, Ideas On Board
4  *
5  * ISP control algorithm interface
6  */
7 #pragma once
8 
9 #include <memory>
10 #include <stdint.h>
11 #include <string>
12 
13 #include <libcamera/controls.h>
14 
15 namespace libcamera {
16 
17 class YamlObject;
18 
19 namespace ipa {
20 
21 template<typename _Module>
22 class Algorithm
23 {
24 public:
25  using Module = _Module;
26 
27  virtual ~Algorithm() {}
28 
29  virtual int init([[maybe_unused]] typename Module::Context &context,
30  [[maybe_unused]] const YamlObject &tuningData)
31  {
32  return 0;
33  }
34 
35  virtual int configure([[maybe_unused]] typename Module::Context &context,
36  [[maybe_unused]] const typename Module::Config &configInfo)
37  {
38  return 0;
39  }
40 
41  virtual void queueRequest([[maybe_unused]] typename Module::Context &context,
42  [[maybe_unused]] const uint32_t frame,
43  [[maybe_unused]] typename Module::FrameContext &frameContext,
44  [[maybe_unused]] const ControlList &controls)
45  {
46  }
47 
48  virtual void prepare([[maybe_unused]] typename Module::Context &context,
49  [[maybe_unused]] const uint32_t frame,
50  [[maybe_unused]] typename Module::FrameContext &frameContext,
51  [[maybe_unused]] typename Module::Params *params)
52  {
53  }
54 
55  virtual void process([[maybe_unused]] typename Module::Context &context,
56  [[maybe_unused]] const uint32_t frame,
57  [[maybe_unused]] typename Module::FrameContext &frameContext,
58  [[maybe_unused]] const typename Module::Stats *stats,
59  [[maybe_unused]] ControlList &metadata)
60  {
61  }
62 };
63 
64 template<typename _Module>
65 class AlgorithmFactoryBase
66 {
67 public:
68  AlgorithmFactoryBase(const char *name)
69  : name_(name)
70  {
71  _Module::registerAlgorithm(this);
72  }
73 
74  virtual ~AlgorithmFactoryBase() = default;
75 
76  const std::string &name() const { return name_; }
77 
78  virtual std::unique_ptr<Algorithm<_Module>> create() const = 0;
79 
80 private:
81  std::string name_;
82 };
83 
84 template<typename _Algorithm>
85 class AlgorithmFactory : public AlgorithmFactoryBase<typename _Algorithm::Module>
86 {
87 public:
88  AlgorithmFactory(const char *name)
89  : AlgorithmFactoryBase<typename _Algorithm::Module>(name)
90  {
91  }
92 
93  ~AlgorithmFactory() = default;
94 
95  std::unique_ptr<Algorithm<typename _Algorithm::Module>> create() const override
96  {
97  return std::make_unique<_Algorithm>();
98  }
99 };
100 
101 #define REGISTER_IPA_ALGORITHM(algorithm, name) \
102 static AlgorithmFactory<algorithm> global_##algorithm##Factory(name);
103 
104 } /* namespace ipa */
105 
106 } /* namespace libcamera */
_Config Config
The type of the IPA configuration data.
Definition: module.h:35
virtual int init([[maybe_unused]] typename Module::Context &context, [[maybe_unused]] const YamlObject &tuningData)
Initialize the Algorithm with tuning data.
Definition: algorithm.h:29
virtual void process([[maybe_unused]] typename Module::Context &context, [[maybe_unused]] const uint32_t frame, [[maybe_unused]] typename Module::FrameContext &frameContext, [[maybe_unused]] const typename Module::Stats *stats, [[maybe_unused]] ControlList &metadata)
Process ISP statistics, and run algorithm operations.
Definition: algorithm.h:55
_Params Params
The type of the ISP specific parameters.
Definition: module.h:36
Top-level libcamera namespace.
Definition: backtrace.h:17
_FrameContext FrameContext
The type of the frame context.
Definition: module.h:34
Registration of Algorithm classes and creation of instances.
Definition: algorithm.h:85
_Stats Stats
The type of the IPA statistics and ISP results.
Definition: module.h:37
_Module Module
The IPA module type for this class of algorithms.
Definition: algorithm.h:25
std::unique_ptr< Algorithm< typename _Algorithm::Module > > create() const override
Create an instance of the Algorithm corresponding to the factory.
Definition: algorithm.h:95
AlgorithmFactory(const char *name)
Construct an algorithm factory.
Definition: algorithm.h:88
_Context Context
The type of the shared IPA context.
Definition: module.h:33
A class representing the tree structure of the YAML content.
Definition: yaml_parser.h:27
virtual int configure([[maybe_unused]] typename Module::Context &context, [[maybe_unused]] const typename Module::Config &configInfo)
Configure the Algorithm given an IPAConfigInfo.
Definition: algorithm.h:35
const ControlIdMap controls
List of all supported libcamera controls.
Definition: control_ids.cpp:1985
Associate a list of ControlId with their values for an object.
Definition: controls.h:410
Framework to manage controls related to an object.
The base class for all IPA algorithms.
Definition: algorithm.h:22
virtual void queueRequest([[maybe_unused]] typename Module::Context &context, [[maybe_unused]] const uint32_t frame, [[maybe_unused]] typename Module::FrameContext &frameContext, [[maybe_unused]] const ControlList &controls)
Provide control values to the algorithm.
Definition: algorithm.h:41
The base class for all IPA modules.
Definition: module.h:30
virtual void prepare([[maybe_unused]] typename Module::Context &context, [[maybe_unused]] const uint32_t frame, [[maybe_unused]] typename Module::FrameContext &frameContext, [[maybe_unused]] typename Module::Params *params)
Fill the params buffer with ISP processing parameters for a frame.
Definition: algorithm.h:48