mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-15 16:35:06 +03:00
ipa: raspberrypi: agc: Add GetConvergenceFrames method to AGC base class
We add a GetConvergenceFrames method to the AgcAlgorithm class which can be called when the AGC is started from scratch. It suggests how many frames should be dropped before displaying any (while the AGC converges). The Raspberry Pi specific implementation makes this customisable from the tuning file. Signed-off-by: David Plowman <david.plowman@raspberrypi.com> Reviewed-by: Naushir Patuck <naush@raspberrypi.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
10bcc51ca3
commit
748f48a006
3 changed files with 14 additions and 0 deletions
|
@ -15,6 +15,7 @@ class AgcAlgorithm : public Algorithm
|
||||||
public:
|
public:
|
||||||
AgcAlgorithm(Controller *controller) : Algorithm(controller) {}
|
AgcAlgorithm(Controller *controller) : Algorithm(controller) {}
|
||||||
// An AGC algorithm must provide the following:
|
// An AGC algorithm must provide the following:
|
||||||
|
virtual unsigned int GetConvergenceFrames() const = 0;
|
||||||
virtual void SetEv(double ev) = 0;
|
virtual void SetEv(double ev) = 0;
|
||||||
virtual void SetFlickerPeriod(double flicker_period) = 0;
|
virtual void SetFlickerPeriod(double flicker_period) = 0;
|
||||||
virtual void SetFixedShutter(double fixed_shutter) = 0; // microseconds
|
virtual void SetFixedShutter(double fixed_shutter) = 0; // microseconds
|
||||||
|
|
|
@ -142,6 +142,7 @@ void AgcConfig::Read(boost::property_tree::ptree const ¶ms)
|
||||||
Y_target.Read(params.get_child("y_target"));
|
Y_target.Read(params.get_child("y_target"));
|
||||||
speed = params.get<double>("speed", 0.2);
|
speed = params.get<double>("speed", 0.2);
|
||||||
startup_frames = params.get<uint16_t>("startup_frames", 10);
|
startup_frames = params.get<uint16_t>("startup_frames", 10);
|
||||||
|
convergence_frames = params.get<unsigned int>("convergence_frames", 6);
|
||||||
fast_reduce_threshold =
|
fast_reduce_threshold =
|
||||||
params.get<double>("fast_reduce_threshold", 0.4);
|
params.get<double>("fast_reduce_threshold", 0.4);
|
||||||
base_ev = params.get<double>("base_ev", 1.0);
|
base_ev = params.get<double>("base_ev", 1.0);
|
||||||
|
@ -206,6 +207,16 @@ void Agc::Resume()
|
||||||
fixed_analogue_gain_ = 0;
|
fixed_analogue_gain_ = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int Agc::GetConvergenceFrames() const
|
||||||
|
{
|
||||||
|
// If shutter and gain have been explicitly set, there is no
|
||||||
|
// convergence to happen, so no need to drop any frames - return zero.
|
||||||
|
if (fixed_shutter_ && fixed_analogue_gain_)
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
return config_.convergence_frames;
|
||||||
|
}
|
||||||
|
|
||||||
void Agc::SetEv(double ev)
|
void Agc::SetEv(double ev)
|
||||||
{
|
{
|
||||||
ev_ = ev;
|
ev_ = ev;
|
||||||
|
|
|
@ -52,6 +52,7 @@ struct AgcConfig {
|
||||||
Pwl Y_target;
|
Pwl Y_target;
|
||||||
double speed;
|
double speed;
|
||||||
uint16_t startup_frames;
|
uint16_t startup_frames;
|
||||||
|
unsigned int convergence_frames;
|
||||||
double max_change;
|
double max_change;
|
||||||
double min_change;
|
double min_change;
|
||||||
double fast_reduce_threshold;
|
double fast_reduce_threshold;
|
||||||
|
@ -74,6 +75,7 @@ public:
|
||||||
bool IsPaused() const override;
|
bool IsPaused() const override;
|
||||||
void Pause() override;
|
void Pause() override;
|
||||||
void Resume() override;
|
void Resume() override;
|
||||||
|
unsigned int GetConvergenceFrames() const override;
|
||||||
void SetEv(double ev) override;
|
void SetEv(double ev) override;
|
||||||
void SetFlickerPeriod(double flicker_period) override;
|
void SetFlickerPeriod(double flicker_period) override;
|
||||||
void SetFixedShutter(double fixed_shutter) override; // microseconds
|
void SetFixedShutter(double fixed_shutter) override; // microseconds
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue