summaryrefslogtreecommitdiff
path: root/src/ipa/raspberrypi/controller/rpi/awb.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ipa/raspberrypi/controller/rpi/awb.cpp')
-rw-r--r--src/ipa/raspberrypi/controller/rpi/awb.cpp20
1 files changed, 8 insertions, 12 deletions
diff --git a/src/ipa/raspberrypi/controller/rpi/awb.cpp b/src/ipa/raspberrypi/controller/rpi/awb.cpp
index 04d1c878..ef3435d6 100644
--- a/src/ipa/raspberrypi/controller/rpi/awb.cpp
+++ b/src/ipa/raspberrypi/controller/rpi/awb.cpp
@@ -21,9 +21,6 @@ LOG_DEFINE_CATEGORY(RPiAwb)
#define NAME "rpi.awb"
-static constexpr unsigned int AwbStatsSizeX = DEFAULT_AWB_REGIONS_X;
-static constexpr unsigned int AwbStatsSizeY = DEFAULT_AWB_REGIONS_Y;
-
/*
* todo - the locking in this algorithm needs some tidying up as has been done
* elsewhere (ALSC and AGC).
@@ -401,17 +398,16 @@ void Awb::asyncFunc()
}
static void generateStats(std::vector<Awb::RGB> &zones,
- bcm2835_isp_stats_region *stats, double minPixels,
+ RgbyRegions &stats, double minPixels,
double minG)
{
- for (unsigned int i = 0; i < AwbStatsSizeX * AwbStatsSizeY; i++) {
+ for (auto const &region : stats) {
Awb::RGB zone;
- double counted = stats[i].counted;
- if (counted >= minPixels) {
- zone.G = stats[i].g_sum / counted;
+ if (region.counted >= minPixels) {
+ zone.G = region.val.gSum / region.counted;
if (zone.G >= minG) {
- zone.R = stats[i].r_sum / counted;
- zone.B = stats[i].b_sum / counted;
+ zone.R = region.val.rSum / region.counted;
+ zone.B = region.val.bSum / region.counted;
zones.push_back(zone);
}
}
@@ -425,7 +421,7 @@ void Awb::prepareStats()
* LSC has already been applied to the stats in this pipeline, so stop
* any LSC compensation. We also ignore config_.fast in this version.
*/
- generateStats(zones_, statistics_->awb_stats, config_.minPixels,
+ generateStats(zones_, statistics_->awbRegions, config_.minPixels,
config_.minG);
/*
* apply sensitivities, so values appear to come from our "canonical"
@@ -641,7 +637,7 @@ void Awb::awbBayes()
* valid... not entirely sure about this.
*/
Pwl prior = interpolatePrior();
- prior *= zones_.size() / (double)(AwbStatsSizeX * AwbStatsSizeY);
+ prior *= zones_.size() / (double)(statistics_->awbRegions.numRegions());
prior.map([](double x, double y) {
LOG(RPiAwb, Debug) << "(" << x << "," << y << ")";
});