mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-13 23:39:44 +03:00
ipa: rpi: Prepare AWB for PiSP support
Prepare the AWB algorithm to support the PiSP hardware. The key change is to factor in the LS correction in the AWB zone statistics. This is different from VC4 where the LS correction happens before statistics gathering. Signed-off-by: Naushir Patuck <naush@raspberrypi.com> Reviewed-by: David Plowman <david.plowman@raspberrypi.com> Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
parent
0be32012ef
commit
c9fb1d44d8
1 changed files with 20 additions and 9 deletions
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
#include "../lux_status.h"
|
#include "../lux_status.h"
|
||||||
|
|
||||||
|
#include "alsc_status.h"
|
||||||
#include "awb.h"
|
#include "awb.h"
|
||||||
|
|
||||||
using namespace RPiController;
|
using namespace RPiController;
|
||||||
|
@ -398,18 +399,28 @@ void Awb::asyncFunc()
|
||||||
}
|
}
|
||||||
|
|
||||||
static void generateStats(std::vector<Awb::RGB> &zones,
|
static void generateStats(std::vector<Awb::RGB> &zones,
|
||||||
RgbyRegions &stats, double minPixels,
|
StatisticsPtr &stats, double minPixels,
|
||||||
double minG)
|
double minG, Metadata &globalMetadata)
|
||||||
{
|
{
|
||||||
for (auto const ®ion : stats) {
|
std::scoped_lock<RPiController::Metadata> l(globalMetadata);
|
||||||
|
|
||||||
|
for (unsigned int i = 0; i < stats->awbRegions.numRegions(); i++) {
|
||||||
Awb::RGB zone;
|
Awb::RGB zone;
|
||||||
|
auto ®ion = stats->awbRegions.get(i);
|
||||||
if (region.counted >= minPixels) {
|
if (region.counted >= minPixels) {
|
||||||
zone.G = region.val.gSum / region.counted;
|
zone.G = region.val.gSum / region.counted;
|
||||||
if (zone.G >= minG) {
|
if (zone.G < minG)
|
||||||
|
continue;
|
||||||
zone.R = region.val.rSum / region.counted;
|
zone.R = region.val.rSum / region.counted;
|
||||||
zone.B = region.val.bSum / region.counted;
|
zone.B = region.val.bSum / region.counted;
|
||||||
zones.push_back(zone);
|
/* Factor in the ALSC applied colour shading correction if required. */
|
||||||
|
const AlscStatus *alscStatus = globalMetadata.getLocked<AlscStatus>("alsc.status");
|
||||||
|
if (stats->colourStatsPos == Statistics::ColourStatsPos::PreLsc && alscStatus) {
|
||||||
|
zone.R *= alscStatus->r[i];
|
||||||
|
zone.G *= alscStatus->g[i];
|
||||||
|
zone.B *= alscStatus->b[i];
|
||||||
}
|
}
|
||||||
|
zones.push_back(zone);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -421,8 +432,8 @@ void Awb::prepareStats()
|
||||||
* LSC has already been applied to the stats in this pipeline, so stop
|
* LSC has already been applied to the stats in this pipeline, so stop
|
||||||
* any LSC compensation. We also ignore config_.fast in this version.
|
* any LSC compensation. We also ignore config_.fast in this version.
|
||||||
*/
|
*/
|
||||||
generateStats(zones_, statistics_->awbRegions, config_.minPixels,
|
generateStats(zones_, statistics_, config_.minPixels,
|
||||||
config_.minG);
|
config_.minG, getGlobalMetadata());
|
||||||
/*
|
/*
|
||||||
* apply sensitivities, so values appear to come from our "canonical"
|
* apply sensitivities, so values appear to come from our "canonical"
|
||||||
* sensor.
|
* sensor.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue