@@ -186,8 +186,7 @@ double Agc::estimateLuminance(double gain) const
sum.b() += std::min(std::get<2>(rgbTriples_[i]) * gain, 255.0);
}
- RGB<double> gains{{ rGain_, gGain_, bGain_ }};
- double ySum = rec601LuminanceFromRGB(sum * gains);
+ double ySum = rec601LuminanceFromRGB(sum * gains_);
return ySum / (bdsGrid_.height * bdsGrid_.width) / 255;
}
@@ -208,9 +207,9 @@ void Agc::process(IPAContext &context, [[maybe_unused]] const uint32_t frame,
ControlList &metadata)
{
Histogram hist = parseStatistics(stats, context.configuration.grid.bdsGrid);
- rGain_ = context.activeState.awb.gains.red;
- gGain_ = context.activeState.awb.gains.blue;
- bGain_ = context.activeState.awb.gains.green;
+ gains_ = RGB<double>({ context.activeState.awb.gains.red,
+ context.activeState.awb.gains.blue,
+ context.activeState.awb.gains.green });
/*
* The Agc algorithm needs to know the effective exposure value that was
@@ -13,6 +13,8 @@
#include <libcamera/geometry.h>
+#include "libcamera/internal/vector.h"
+
#include "libipa/agc_mean_luminance.h"
#include "libipa/histogram.h"
@@ -49,9 +51,7 @@ private:
double maxAnalogueGain_;
uint32_t stride_;
- double rGain_;
- double gGain_;
- double bGain_;
+ RGB<double> gains_;
ipu3_uapi_grid_config bdsGrid_;
std::vector<std::tuple<uint8_t, uint8_t, uint8_t>> rgbTriples_;
};
The AGC algorithm stores red, blue and green gains as type double class members. Switch to using a single member of type RGB<double> instead to simplify the code. Signed-off-by: Daniel Scally <dan.scally@ideasonboard.com> --- Changes in v2: - New patch --- src/ipa/ipu3/algorithms/agc.cpp | 9 ++++----- src/ipa/ipu3/algorithms/agc.h | 6 +++--- 2 files changed, 7 insertions(+), 8 deletions(-)