libcamera  v0.3.2+116-83c5ad0f
Supporting cameras in Linux since 2019
agc.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2 /*
3  * Copyright (C) 2021, Ideas On Board
4  *
5  * IPU3 AGC/AEC mean-based control algorithm
6  */
7 
8 #pragma once
9 
10 #include <linux/intel-ipu3.h>
11 
12 #include <libcamera/base/utils.h>
13 
14 #include <libcamera/geometry.h>
15 
17 #include "libipa/histogram.h"
18 
19 #include "algorithm.h"
20 
21 namespace libcamera {
22 
23 struct IPACameraSensorInfo;
24 
25 namespace ipa::ipu3::algorithms {
26 
27 class Agc : public Algorithm, public AgcMeanLuminance
28 {
29 public:
30  Agc();
31  ~Agc() = default;
32 
33  int init(IPAContext &context, const YamlObject &tuningData) override;
34  int configure(IPAContext &context, const IPAConfigInfo &configInfo) override;
35  void process(IPAContext &context, const uint32_t frame,
36  IPAFrameContext &frameContext,
37  const ipu3_uapi_stats_3a *stats,
38  ControlList &metadata) override;
39 
40 private:
41  double estimateLuminance(double gain) const override;
42  Histogram parseStatistics(const ipu3_uapi_stats_3a *stats,
43  const ipu3_uapi_grid_config &grid);
44 
45  utils::Duration minShutterSpeed_;
46  utils::Duration maxShutterSpeed_;
47 
48  double minAnalogueGain_;
49  double maxAnalogueGain_;
50 
51  uint32_t stride_;
52  double rGain_;
53  double gGain_;
54  double bGain_;
55  ipu3_uapi_grid_config bdsGrid_;
56  std::vector<std::tuple<uint8_t, uint8_t, uint8_t>> rgbTriples_;
57 };
58 
59 } /* namespace ipa::ipu3::algorithms */
60 
61 } /* namespace libcamera */
Global IPA context data shared between all algorithms.
Definition: ipa_context.h:86
Base class implementing mean luminance AEGC.
void process(IPAContext &context, const uint32_t frame, IPAFrameContext &frameContext, const ipu3_uapi_stats_3a *stats, ControlList &metadata) override
Process IPU3 statistics, and run AGC operations.
Definition: agc.cpp:207
Top-level libcamera namespace.
Definition: backtrace.h:17
Miscellaneous utility functions.
A mean-based auto-exposure algorithm.
Definition: agc_mean_luminance.h:28
int init(IPAContext &context, const YamlObject &tuningData) override
Initialise the AGC algorithm from tuning files.
Definition: agc.cpp:75
Helper class from std::chrono::duration that represents a time duration in nanoseconds with double pr...
Definition: utils.h:353
The base class for creating histograms.
Definition: histogram.h:22
A class representing the tree structure of the YAML content.
Definition: yaml_parser.h:27
IPU3-specific FrameContext.
Definition: ipa_context.h:79
Class to represent Histograms and manipulate them.
Associate a list of ControlId with their values for an object.
Definition: controls.h:380
int configure(IPAContext &context, const IPAConfigInfo &configInfo) override
Configure the AGC given a configInfo.
Definition: agc.cpp:95
The base class for all IPA algorithms.
Definition: algorithm.h:22
A mean-based auto-exposure algorithm.
Definition: agc.h:27
Data structures related to geometric objects.