[libcamera-devel,v1,2/6] ipa: rpi: alsc: Do not re-read the alsc.status metadata
diff mbox series

Message ID 20231020084002.30665-3-naush@raspberrypi.com
State Accepted
Commit 0923d50b15c6e5125a4b37f399a7a040062b058d
Headers show
Series
  • Raspberry Pi: Preliminary PiSP support (round 2)
Related show

Commit Message

Naushir Patuck Oct. 20, 2023, 8:39 a.m. UTC
From: David Plowman <david.plowman@raspberrypi.com>

This was being re-read in order to determine what LSC gains had been
applied. We can just retrieve these numbers from the prevAsyncResults_
instead.

This will also enable other future algorithms to manipulate the LSC
tables in the alsc.status, without it breaking the core ALSC algorithm
here.

Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
---
 src/ipa/rpi/controller/rpi/alsc.cpp | 22 +++++++---------------
 1 file changed, 7 insertions(+), 15 deletions(-)

Patch
diff mbox series

diff --git a/src/ipa/rpi/controller/rpi/alsc.cpp b/src/ipa/rpi/controller/rpi/alsc.cpp
index f1ccef87c70c..b7413611cdae 100644
--- a/src/ipa/rpi/controller/rpi/alsc.cpp
+++ b/src/ipa/rpi/controller/rpi/alsc.cpp
@@ -338,14 +338,14 @@  double getCt(Metadata *metadata, double defaultCt)
 }
 
 static void copyStats(RgbyRegions &regions, StatisticsPtr &stats,
-		      AlscStatus const &status)
+		      std::array<Array2D<double>, 3> &prevSyncResults)
 {
 	if (!regions.numRegions())
 		regions.init(stats->awbRegions.size());
 
-	const std::vector<double> &rTable = status.r;
-	const std::vector<double> &gTable = status.g;
-	const std::vector<double> &bTable = status.b;
+	const std::vector<double> &rTable = prevSyncResults[0].data(); //status.r;
+	const std::vector<double> &gTable = prevSyncResults[1].data(); //status.g;
+	const std::vector<double> &bTable = prevSyncResults[2].data(); //status.b;
 	for (unsigned int i = 0; i < stats->awbRegions.numRegions(); i++) {
 		auto r = stats->awbRegions.get(i);
 		if (stats->colourStatsPos == Statistics::ColourStatsPos::PostLsc) {
@@ -367,18 +367,10 @@  void Alsc::restartAsync(StatisticsPtr &stats, Metadata *imageMetadata)
 	ct_ = getCt(imageMetadata, ct_);
 	/*
 	 * We have to copy the statistics here, dividing out our best guess of
-	 * the LSC table that the pipeline applied to them.
+	 * the LSC table that the pipeline applied to them which we get from
+	 * prevSyncResults_.
 	 */
-	AlscStatus alscStatus;
-	if (stats->colourStatsPos == Statistics::ColourStatsPos::PostLsc &&
-	    imageMetadata->get("alsc.status", alscStatus) != 0) {
-		LOG(RPiAlsc, Warning)
-			<< "No ALSC status found for applied gains!";
-		alscStatus.r.resize(config_.tableSize.width * config_.tableSize.height, 1.0);
-		alscStatus.g.resize(config_.tableSize.width * config_.tableSize.height, 1.0);
-		alscStatus.b.resize(config_.tableSize.width * config_.tableSize.height, 1.0);
-	}
-	copyStats(statistics_, stats, alscStatus);
+	copyStats(statistics_, stats, prevSyncResults_);
 	framePhase_ = 0;
 	asyncStarted_ = true;
 	{