[libcamera-devel] [PATCH 3/4] ipa: raspberrypi: Switch AgcAlgorithm API to use RPiController::Duration
David Plowman
david.plowman at raspberrypi.com
Wed May 19 16:21:20 CEST 2021
Hi Naush
Thanks for this work!
On Tue, 18 May 2021 at 11:09, Naushir Patuck <naush at raspberrypi.com> wrote:
>
> Switch the AgcAlgorithm API functions to use RPiController::Duration
> for all time based variables.
>
> Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
> ---
> src/ipa/raspberrypi/controller/agc_algorithm.hpp | 7 ++++---
> src/ipa/raspberrypi/controller/rpi/agc.cpp | 12 ++++++------
> src/ipa/raspberrypi/controller/rpi/agc.hpp | 6 +++---
> src/ipa/raspberrypi/raspberrypi.cpp | 6 +++---
> 4 files changed, 16 insertions(+), 15 deletions(-)
>
> diff --git a/src/ipa/raspberrypi/controller/agc_algorithm.hpp b/src/ipa/raspberrypi/controller/agc_algorithm.hpp
> index f97deb0fca59..668912c47388 100644
> --- a/src/ipa/raspberrypi/controller/agc_algorithm.hpp
> +++ b/src/ipa/raspberrypi/controller/agc_algorithm.hpp
> @@ -7,6 +7,7 @@
> #pragma once
>
> #include "algorithm.hpp"
> +#include "duration.hpp"
>
> namespace RPiController {
>
> @@ -17,9 +18,9 @@ public:
> // An AGC algorithm must provide the following:
> virtual unsigned int GetConvergenceFrames() const = 0;
> virtual void SetEv(double ev) = 0;
> - virtual void SetFlickerPeriod(double flicker_period) = 0;
> - virtual void SetFixedShutter(double fixed_shutter) = 0; // microseconds
> - virtual void SetMaxShutter(double max_shutter) = 0; // microseconds
> + virtual void SetFlickerPeriod(Duration flicker_period) = 0;
> + virtual void SetFixedShutter(Duration fixed_shutter) = 0;
> + virtual void SetMaxShutter(Duration max_shutter) = 0;
> virtual void SetFixedAnalogueGain(double fixed_analogue_gain) = 0;
> virtual void SetMeteringMode(std::string const &metering_mode_name) = 0;
> virtual void SetExposureMode(std::string const &exposure_mode_name) = 0;
> diff --git a/src/ipa/raspberrypi/controller/rpi/agc.cpp b/src/ipa/raspberrypi/controller/rpi/agc.cpp
> index f4cd5d26fb4e..1cb4472b2691 100644
> --- a/src/ipa/raspberrypi/controller/rpi/agc.cpp
> +++ b/src/ipa/raspberrypi/controller/rpi/agc.cpp
> @@ -222,19 +222,19 @@ void Agc::SetEv(double ev)
> ev_ = ev;
> }
>
> -void Agc::SetFlickerPeriod(double flicker_period)
> +void Agc::SetFlickerPeriod(Duration flicker_period)
> {
> - flicker_period_ = flicker_period;
> + flicker_period_ = DurationValue<std::micro>(flicker_period);
I assume these will all get nicer again in the next patch...!
> }
>
> -void Agc::SetMaxShutter(double max_shutter)
> +void Agc::SetMaxShutter(Duration max_shutter)
> {
> - max_shutter_ = max_shutter;
> + max_shutter_ = DurationValue<std::micro>(max_shutter);
> }
>
> -void Agc::SetFixedShutter(double fixed_shutter)
> +void Agc::SetFixedShutter(Duration fixed_shutter)
> {
> - fixed_shutter_ = fixed_shutter;
> + fixed_shutter_ = DurationValue<std::micro>(fixed_shutter);
> // Set this in case someone calls Pause() straight after.
> status_.shutter_time = clipShutter(fixed_shutter_);
> }
> diff --git a/src/ipa/raspberrypi/controller/rpi/agc.hpp b/src/ipa/raspberrypi/controller/rpi/agc.hpp
> index 0427fb59ec1b..cb79bf61ba42 100644
> --- a/src/ipa/raspberrypi/controller/rpi/agc.hpp
> +++ b/src/ipa/raspberrypi/controller/rpi/agc.hpp
> @@ -77,9 +77,9 @@ public:
> void Resume() override;
> unsigned int GetConvergenceFrames() const override;
> void SetEv(double ev) override;
> - void SetFlickerPeriod(double flicker_period) override;
> - void SetMaxShutter(double max_shutter) override; // microseconds
> - void SetFixedShutter(double fixed_shutter) override; // microseconds
> + void SetFlickerPeriod(Duration flicker_period) override;
> + void SetMaxShutter(Duration max_shutter) override;
> + void SetFixedShutter(Duration fixed_shutter) override;
> void SetFixedAnalogueGain(double fixed_analogue_gain) override;
> void SetMeteringMode(std::string const &metering_mode_name) override;
> void SetExposureMode(std::string const &exposure_mode_name) override;
> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp
> index 994fb7e057a9..f080f2e53bac 100644
> --- a/src/ipa/raspberrypi/raspberrypi.cpp
> +++ b/src/ipa/raspberrypi/raspberrypi.cpp
> @@ -643,8 +643,8 @@ void IPARPi::queueRequest(const ControlList &controls)
> break;
> }
>
> - /* This expects units of micro-seconds. */
> - agc->SetFixedShutter(ctrl.second.get<int32_t>());
> + /* The control provides units of microseconds. */
> + agc->SetFixedShutter(ctrl.second.get<int32_t>() * 1.0us);
I suppose I just wanted to ask if this is the "proper" way to convert
to a Duration - it certainly seems quite clear and tidy.
Reviewed-by: David Plowman <david.plowman at raspberrypi.com>
Thanks
David
>
> libcameraMetadata_.set(controls::ExposureTime, ctrl.second.get<int32_t>());
> break;
> @@ -1097,7 +1097,7 @@ void IPARPi::applyFrameDurations(const Duration &minFrameDuration,
>
> RPiController::AgcAlgorithm *agc = dynamic_cast<RPiController::AgcAlgorithm *>(
> controller_.GetAlgorithm("agc"));
> - agc->SetMaxShutter(DurationValue<std::micro>(maxShutter));
> + agc->SetMaxShutter(maxShutter);
> }
>
> void IPARPi::applyAGC(const struct AgcStatus *agcStatus, ControlList &ctrls)
> --
> 2.25.1
>
More information about the libcamera-devel
mailing list