summaryrefslogtreecommitdiff
path: root/src/ipa/ipu3/ipu3_awb.h
diff options
context:
space:
mode:
authorJean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>2021-08-18 17:54:02 +0200
committerJean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>2021-08-20 12:11:29 +0200
commitb145ae42428b9f21fff01d7353a655e07e818c33 (patch)
treec88399ecf4cd1d5f2725324f98f849a41ddfc689 /src/ipa/ipu3/ipu3_awb.h
parent16266def40cda947aaa1a50009e89f639c26e7cf (diff)
ipa: ipu3: Move IPU3 awb into algorithms
Now that the interface is properly used by the AWB class, move it into ipa::ipu3::algorithms and let the loops do the calls. Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src/ipa/ipu3/ipu3_awb.h')
-rw-r--r--src/ipa/ipu3/ipu3_awb.h91
1 files changed, 0 insertions, 91 deletions
diff --git a/src/ipa/ipu3/ipu3_awb.h b/src/ipa/ipu3/ipu3_awb.h
deleted file mode 100644
index 12703489..00000000
--- a/src/ipa/ipu3/ipu3_awb.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-/*
- * Copyright (C) 2021, Ideas On Board
- *
- * ipu3_awb.h - IPU3 AWB control algorithm
- */
-#ifndef __LIBCAMERA_IPU3_AWB_H__
-#define __LIBCAMERA_IPU3_AWB_H__
-
-#include <vector>
-
-#include <linux/intel-ipu3.h>
-
-#include <libcamera/geometry.h>
-
-#include "algorithms/algorithm.h"
-
-namespace libcamera {
-
-namespace ipa::ipu3 {
-
-/* Region size for the statistics generation algorithm */
-static constexpr uint32_t kAwbStatsSizeX = 16;
-static constexpr uint32_t kAwbStatsSizeY = 12;
-
-class IPU3Awb : public Algorithm
-{
-public:
- IPU3Awb();
- ~IPU3Awb();
-
- void prepare(IPAContext &context, ipu3_uapi_params *params) override;
- void process(IPAContext &context, const ipu3_uapi_stats_3a *stats) override;
-
- struct Ipu3AwbCell {
- unsigned char greenRedAvg;
- unsigned char redAvg;
- unsigned char blueAvg;
- unsigned char greenBlueAvg;
- unsigned char satRatio;
- unsigned char padding[3];
- } __attribute__((packed));
-
- /* \todo Make these three structs available to all the ISPs ? */
- struct RGB {
- RGB(double _R = 0, double _G = 0, double _B = 0)
- : R(_R), G(_G), B(_B)
- {
- }
- double R, G, B;
- RGB &operator+=(RGB const &other)
- {
- R += other.R, G += other.G, B += other.B;
- return *this;
- }
- };
-
- struct IspStatsRegion {
- unsigned int counted;
- unsigned int uncounted;
- unsigned long long rSum;
- unsigned long long gSum;
- unsigned long long bSum;
- };
-
- struct AwbStatus {
- double temperatureK;
- double redGain;
- double greenGain;
- double blueGain;
- };
-
-private:
- void calculateWBGains(const ipu3_uapi_stats_3a *stats);
- void generateZones(std::vector<RGB> &zones);
- void generateAwbStats(const ipu3_uapi_stats_3a *stats);
- void clearAwbStats();
- void awbGreyWorld();
- uint32_t estimateCCT(double red, double green, double blue);
-
- struct ipu3_uapi_grid_config awbGrid_;
-
- std::vector<RGB> zones_;
- IspStatsRegion awbStats_[kAwbStatsSizeX * kAwbStatsSizeY];
- AwbStatus asyncResults_;
-};
-
-} /* namespace ipa::ipu3 */
-
-} /* namespace libcamera*/
-#endif /* __LIBCAMERA_IPU3_AWB_H__ */