[libcamera-devel] [PATCH 19/20] ipa: rpi: agc: Avoid overwriting caller's statistics pointer
Naushir Patuck
naush at raspberrypi.com
Fri Oct 6 15:19:59 CEST 2023
From: David Plowman <david.plowman at raspberrypi.com>
The code was inadvertently overwriting the caller's StatisticsPtr,
meaning that subsequent algorithms would get the wrong image
statistics when AGC channels changed.
This could be fix using std::ref, though I find the C-style pointer
fix easier to understand!
Signed-off-by: David Plowman <david.plowman at raspberrypi.com>
Reviewed-by: Naushir Patuck <naush at raspberrypi.com>
---
src/ipa/rpi/controller/rpi/agc.cpp | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/ipa/rpi/controller/rpi/agc.cpp b/src/ipa/rpi/controller/rpi/agc.cpp
index 870cb4315c42..758da0719b9b 100644
--- a/src/ipa/rpi/controller/rpi/agc.cpp
+++ b/src/ipa/rpi/controller/rpi/agc.cpp
@@ -311,15 +311,16 @@ void Agc::process(StatisticsPtr &stats, Metadata *imageMetadata)
* exist, and call process(). We must make the agc.status metadata record correctly
* which channel this is.
*/
+ StatisticsPtr *statsPtr = &stats;
if (channelData.statistics && channelData.deviceStatus) {
deviceStatus = *channelData.deviceStatus;
- stats = channelData.statistics;
+ statsPtr = &channelData.statistics;
} else {
/* Can also happen when new channels start. */
LOG(RPiAgc, Debug) << "process: channel " << channelIndex << " not seen yet";
}
- channelData.channel.process(stats, deviceStatus, imageMetadata, channelTotalExposures_);
+ channelData.channel.process(*statsPtr, deviceStatus, imageMetadata, channelTotalExposures_);
auto dur = setCurrentChannelIndexGetExposure(imageMetadata, "process: no AGC status found",
channelIndex);
if (dur)
--
2.34.1
More information about the libcamera-devel
mailing list