[libcamera-devel] [PATCH v3 2/4] src: ipa: raspberrypi: agc: Make AGC handle Pause/Resume for itself
Kieran Bingham
kieran.bingham at ideasonboard.com
Mon Nov 30 12:06:39 CET 2020
Hi David,
On 26/11/2020 14:23, David Plowman wrote:
> AGC, when paused, sets the last exposure/gain it wrote to be its
> "fixed" values and will therefore continue to return them. When
> resumed, we clear them so that both will float again.
>
> This approach is better because AGC can be paused and we can
> subsequently change (for example) the exposure and the gain won't
> float again.
>
> Signed-off-by: David Plowman <david.plowman at raspberrypi.com>
Pulling my tag forwards here too:
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
Naush, Can you review this one directly please?
This is the only one in this series that hasn't got your tag.
--
Kieran
> ---
> src/ipa/raspberrypi/controller/rpi/agc.cpp | 24 ++++++++++++++++++++++
> src/ipa/raspberrypi/controller/rpi/agc.hpp | 4 ++++
> 2 files changed, 28 insertions(+)
>
> diff --git a/src/ipa/raspberrypi/controller/rpi/agc.cpp b/src/ipa/raspberrypi/controller/rpi/agc.cpp
> index 30a1c1c1..9da18c31 100644
> --- a/src/ipa/raspberrypi/controller/rpi/agc.cpp
> +++ b/src/ipa/raspberrypi/controller/rpi/agc.cpp
> @@ -184,6 +184,26 @@ void Agc::Read(boost::property_tree::ptree const ¶ms)
> exposure_mode_ = &config_.exposure_modes[exposure_mode_name_];
> constraint_mode_name_ = config_.default_constraint_mode;
> constraint_mode_ = &config_.constraint_modes[constraint_mode_name_];
> + // Set up the "last shutter/gain" values, in case AGC starts "disabled".
> + status_.shutter_time = config_.default_exposure_time;
> + status_.analogue_gain = config_.default_analogue_gain;
> +}
> +
> +bool Agc::IsPaused() const
> +{
> + return false;
> +}
> +
> +void Agc::Pause()
> +{
> + fixed_shutter_ = status_.shutter_time;
> + fixed_analogue_gain_ = status_.analogue_gain;
> +}
> +
> +void Agc::Resume()
> +{
> + fixed_shutter_ = 0;
> + fixed_analogue_gain_ = 0;
> }
>
> void Agc::SetEv(double ev)
> @@ -199,11 +219,15 @@ void Agc::SetFlickerPeriod(double flicker_period)
> void Agc::SetFixedShutter(double fixed_shutter)
> {
> fixed_shutter_ = fixed_shutter;
> + // Set this in case someone calls Pause() straight after.
> + status_.shutter_time = fixed_shutter;
> }
>
> void Agc::SetFixedAnalogueGain(double fixed_analogue_gain)
> {
> fixed_analogue_gain_ = fixed_analogue_gain;
> + // Set this in case someone calls Pause() straight after.
> + status_.analogue_gain = fixed_analogue_gain;
> }
>
> void Agc::SetMeteringMode(std::string const &metering_mode_name)
> diff --git a/src/ipa/raspberrypi/controller/rpi/agc.hpp b/src/ipa/raspberrypi/controller/rpi/agc.hpp
> index 47ebb324..95db1812 100644
> --- a/src/ipa/raspberrypi/controller/rpi/agc.hpp
> +++ b/src/ipa/raspberrypi/controller/rpi/agc.hpp
> @@ -70,6 +70,10 @@ public:
> Agc(Controller *controller);
> char const *Name() const override;
> void Read(boost::property_tree::ptree const ¶ms) override;
> + // AGC handles "pausing" for itself.
> + bool IsPaused() const override;
> + void Pause() override;
> + void Resume() override;
> void SetEv(double ev) override;
> void SetFlickerPeriod(double flicker_period) override;
> void SetFixedShutter(double fixed_shutter) override; // microseconds
>
--
Regards
--
Kieran
More information about the libcamera-devel
mailing list