summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDavid Plowman <david.plowman@raspberrypi.com>2023-10-13 08:48:40 +0100
committerKieran Bingham <kieran.bingham@ideasonboard.com>2023-10-18 11:01:23 +0100
commitdaeaf681c90f4837e4835c10f55c8f01f1a3d098 (patch)
tree47fb2d0550bc2da520caa5d27e982cf0ba161015 /src
parentac232470fb3182b8b6299a7d317681d540561d5d (diff)
ipa: rpi: agc: Avoid overwriting caller's statistics pointer
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@raspberrypi.com> Reviewed-by: Naushir Patuck <naush@raspberrypi.com> Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'src')
-rw-r--r--src/ipa/rpi/controller/rpi/agc.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/ipa/rpi/controller/rpi/agc.cpp b/src/ipa/rpi/controller/rpi/agc.cpp
index 870cb431..758da071 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)