<div dir="ltr"><div dir="ltr">Hi David,<div><br></div><div>Thank you for your patch.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, 7 Dec 2020 at 18:02, David Plowman <<a href="mailto:david.plowman@raspberrypi.com">david.plowman@raspberrypi.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">We add a GetConvergenceFrames method to the AgcAlgorithm class which<br>
can be called when the AGC is started from scratch. It suggests how<br>
many frames should be dropped before displaying any (while the AGC<br>
converges).<br>
<br>
The Raspberry Pi specific implementation makes this customisable from<br>
the tuning file.<br>
<br>
Signed-off-by: David Plowman <<a href="mailto:david.plowman@raspberrypi.com" target="_blank">david.plowman@raspberrypi.com</a>><br>
---<br>
src/ipa/raspberrypi/controller/agc_algorithm.hpp | 1 +<br>
src/ipa/raspberrypi/controller/rpi/agc.cpp | 13 +++++++++++++<br>
src/ipa/raspberrypi/controller/rpi/agc.hpp | 2 ++<br>
3 files changed, 16 insertions(+)<br>
<br>
diff --git a/src/ipa/raspberrypi/controller/agc_algorithm.hpp b/src/ipa/raspberrypi/controller/agc_algorithm.hpp<br>
index b4ea54fb..85fc6084 100644<br>
--- a/src/ipa/raspberrypi/controller/agc_algorithm.hpp<br>
+++ b/src/ipa/raspberrypi/controller/agc_algorithm.hpp<br>
@@ -15,6 +15,7 @@ class AgcAlgorithm : public Algorithm<br>
public:<br>
AgcAlgorithm(Controller *controller) : Algorithm(controller) {}<br>
// An AGC algorithm must provide the following:<br>
+ virtual unsigned int GetConvergenceFrames(unsigned int mistrust_frames) const = 0;<br></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> virtual void SetEv(double ev) = 0;<br>
virtual void SetFlickerPeriod(double flicker_period) = 0;<br>
virtual void SetFixedShutter(double fixed_shutter) = 0; // microseconds<br>
diff --git a/src/ipa/raspberrypi/controller/rpi/agc.cpp b/src/ipa/raspberrypi/controller/rpi/agc.cpp<br>
index 9da18c31..787918cc 100644<br>
--- a/src/ipa/raspberrypi/controller/rpi/agc.cpp<br>
+++ b/src/ipa/raspberrypi/controller/rpi/agc.cpp<br>
@@ -142,6 +142,7 @@ void AgcConfig::Read(boost::property_tree::ptree const ¶ms)<br>
Y_target.Read(params.get_child("y_target"));<br>
speed = params.get<double>("speed", 0.2);<br>
startup_frames = params.get<uint16_t>("startup_frames", 10);<br>
+ convergence_frames = params.get<unsigned int>("convergence_frames", 6);<br>
fast_reduce_threshold =<br>
params.get<double>("fast_reduce_threshold", 0.4);<br>
base_ev = params.get<double>("base_ev", 1.0);<br>
@@ -206,6 +207,18 @@ void Agc::Resume()<br>
fixed_analogue_gain_ = 0;<br>
}<br>
<br>
+unsigned int Agc::GetConvergenceFrames(unsigned int mistrust_frames) const<br>
+{<br>
+ // If shutter and gain have been explicitly set, there is no<br>
+ // convergence to happen, so no need to drop any frames - return zero.<br>
+ // Otherwise, any frames for which we have been told not to trust the<br>
+ // statistics must be added to our own count.<br>
+ if (fixed_shutter_ && fixed_analogue_gain_)<br>
+ return 0;<br>
+ else<br>
+ return config_.convergence_frames + mistrust_frames;<br>
+}<br>
+<br></blockquote><div><br></div><div>Minor nitpick, but why do you pass mistrust_frames into
GetConvergenceFrames? Could you not leave it out and do the addition of mistrust frames in the IPA? Either way,</div><div><br></div><div>Reviewed-by: Naushir Patuck <<a href="mailto:naush@raspberrypi.com">naush@raspberrypi.com</a>></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
void Agc::SetEv(double ev)<br>
{<br>
ev_ = ev;<br>
diff --git a/src/ipa/raspberrypi/controller/rpi/agc.hpp b/src/ipa/raspberrypi/controller/rpi/agc.hpp<br>
index 95db1812..7d41608a 100644<br>
--- a/src/ipa/raspberrypi/controller/rpi/agc.hpp<br>
+++ b/src/ipa/raspberrypi/controller/rpi/agc.hpp<br>
@@ -52,6 +52,7 @@ struct AgcConfig {<br>
Pwl Y_target;<br>
double speed;<br>
uint16_t startup_frames;<br>
+ unsigned int convergence_frames;<br>
double max_change;<br>
double min_change;<br>
double fast_reduce_threshold;<br>
@@ -74,6 +75,7 @@ public:<br>
bool IsPaused() const override;<br>
void Pause() override;<br>
void Resume() override;<br>
+ unsigned int GetConvergenceFrames(unsigned int mistrust_frames) const override;<br>
void SetEv(double ev) override;<br>
void SetFlickerPeriod(double flicker_period) override;<br>
void SetFixedShutter(double fixed_shutter) override; // microseconds<br>
-- <br>
2.20.1<br>
<br>
_______________________________________________<br>
libcamera-devel mailing list<br>
<a href="mailto:libcamera-devel@lists.libcamera.org" target="_blank">libcamera-devel@lists.libcamera.org</a><br>
<a href="https://lists.libcamera.org/listinfo/libcamera-devel" rel="noreferrer" target="_blank">https://lists.libcamera.org/listinfo/libcamera-devel</a><br>
</blockquote></div></div>