libcamera v0.7.2 Supporting cameras in Linux since 2019

Loading...
Searching...
No Matches
awb.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 AWB control algorithm
6 */
7
8#pragma once
9
10#include <vector>
11
12#include <linux/intel-ipu3.h>
13
14#include <libcamera/geometry.h>
15
16#include "libcamera/internal/vector.h"
17
18#include "algorithm.h"
19
20 namespace libcamera {
21
22 namespace ipa::ipu3::algorithms {
23
24/* Region size for the statistics generation algorithm */
25 static constexpr uint32_t kAwbStatsSizeX = 16;
26 static constexpr uint32_t kAwbStatsSizeY = 12;
27
28 struct Accumulator {
29 unsigned int counted;
30 struct {
31 uint64_t red;
32 uint64_t green;
33 uint64_t blue;
34 } sum;
35};
36
37 class Awb : public Algorithm
38{
39 public:
40 Awb();
41 ~Awb();
42
43 int configure(IPAContext &context, const IPAConfigInfo &configInfo) override;
44 void prepare(IPAContext &context, const uint32_t frame,
45 IPAFrameContext &frameContext,
46 ipu3_uapi_params *params) override;
47 void process(IPAContext &context, const uint32_t frame,
48 IPAFrameContext &frameContext,
49 const ipu3_uapi_stats_3a *stats,
50 ControlList &metadata) override;
51
52 private:
53 struct AwbStatus {
54 double temperatureK;
55 double redGain;
56 double greenGain;
57 double blueGain;
58 };
59
60 private:
61 void calculateWBGains(const ipu3_uapi_stats_3a *stats);
62 void generateZones();
63 void generateAwbStats(const ipu3_uapi_stats_3a *stats);
64 void clearAwbStats();
65 void awbGreyWorld();
66 static constexpr uint16_t threshold(float value);
67 static constexpr uint16_t gainValue(double gain);
68
69 std::vector<RGB<double>> zones_;
70 Accumulator awbStats_[kAwbStatsSizeX * kAwbStatsSizeY];
71 AwbStatus asyncResults_;
72
73 uint32_t stride_;
74 uint32_t cellsPerZoneX_;
75 uint32_t cellsPerZoneY_;
76 uint32_t cellsPerZoneThreshold_;
77};
78
79} /* namespace ipa::ipu3::algorithms */
80
81} /* namespace libcamera*/
libcamera::ControlList
Associate a list of ControlId with their values for an object.
Definition controls.h:409
libcamera::ipa::ipu3::algorithms::Awb::configure
int configure(IPAContext &context, const IPAConfigInfo &configInfo) override
Configure the Algorithm given an IPAConfigInfo.
Definition awb.cpp:203
libcamera::ipa::ipu3::algorithms::Awb::prepare
void prepare(IPAContext &context, const uint32_t frame, IPAFrameContext &frameContext, ipu3_uapi_params *params) override
Fill the params buffer with ISP processing parameters for a frame.
Definition awb.cpp:249
libcamera::ipa::ipu3::algorithms::Awb::process
void process(IPAContext &context, const uint32_t frame, IPAFrameContext &frameContext, const ipu3_uapi_stats_3a *stats, ControlList &metadata) override
Process ISP statistics, and run algorithm operations.
Definition awb.cpp:450
geometry.h
Data structures related to geometric objects.
libcamera
Top-level libcamera namespace.
Definition backtrace.h:17
libcamera::ipa::ipu3::IPAContext
Global IPA context data shared between all algorithms.
Definition ipa_context.h:86
libcamera::ipa::ipu3::IPAFrameContext
IPU3-specific FrameContext.
Definition ipa_context.h:79
libcamera::ipa::ipu3::algorithms::Accumulator
RGB statistics for a given zone.
Definition awb.h:28
libcamera::ipa::ipu3::algorithms::Accumulator::sum
struct libcamera::ipa::ipu3::algorithms::Accumulator::@046015366141165261174332173113205110321337047250 sum
A structure containing the average red, green and blue sums.
libcamera::ipa::ipu3::algorithms::Accumulator::counted
unsigned int counted
Number of unsaturated cells used to calculate the sums.
Definition awb.h:29
vector.h
Vector class.