[libcamera-devel] [PATCH v5 3/4] ipa: raspberrypi: Switch AgcAlgorithm API to use utils::Duration

Laurent Pinchart laurent.pinchart at ideasonboard.com
Tue Jun 8 03:11:48 CEST 2021


Hi Naush,

Thank you for the patch.

On Tue, May 25, 2021 at 12:42:40PM +0100, Naushir Patuck wrote:
> Switch the AgcAlgorithm API functions to use utils::Duration for all
> time based variables.
> 
> Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
> Reviewed-by: David Plowman <david.plowman at raspberrypi.com>
> Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
> ---
>  src/ipa/raspberrypi/controller/agc_algorithm.hpp |  7 ++++---
>  src/ipa/raspberrypi/controller/rpi/agc.cpp       | 13 +++++++------
>  src/ipa/raspberrypi/controller/rpi/agc.hpp       |  6 +++---
>  src/ipa/raspberrypi/raspberrypi.cpp              |  6 +++---
>  4 files changed, 17 insertions(+), 15 deletions(-)
> 
> diff --git a/src/ipa/raspberrypi/controller/agc_algorithm.hpp b/src/ipa/raspberrypi/controller/agc_algorithm.hpp
> index f97deb0fca59..579ee2c91fa8 100644
> --- a/src/ipa/raspberrypi/controller/agc_algorithm.hpp
> +++ b/src/ipa/raspberrypi/controller/agc_algorithm.hpp
> @@ -6,6 +6,7 @@
>   */
>  #pragma once
>  
> +#include "libcamera/internal/utils.h"
>  #include "algorithm.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(const libcamera::utils::Duration &flicker_period) = 0;
> +	virtual void SetFixedShutter(const libcamera::utils::Duration &fixed_shutter) = 0;
> +	virtual void SetMaxShutter(const libcamera::utils::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..4e3318445cf3 100644
> --- a/src/ipa/raspberrypi/controller/rpi/agc.cpp
> +++ b/src/ipa/raspberrypi/controller/rpi/agc.cpp
> @@ -21,6 +21,7 @@
>  
>  using namespace RPiController;
>  using namespace libcamera;
> +using libcamera::utils::Duration;

I would have used utils::Duration instead of Duration below, but I don't
mind.

Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

>  
>  LOG_DEFINE_CATEGORY(RPiAgc)
>  
> @@ -222,19 +223,19 @@ void Agc::SetEv(double ev)
>  	ev_ = ev;
>  }
>  
> -void Agc::SetFlickerPeriod(double flicker_period)
> +void Agc::SetFlickerPeriod(const Duration &flicker_period)
>  {
> -	flicker_period_ = flicker_period;
> +	flicker_period_ = flicker_period.get<std::micro>();
>  }
>  
> -void Agc::SetMaxShutter(double max_shutter)
> +void Agc::SetMaxShutter(const Duration &max_shutter)
>  {
> -	max_shutter_ = max_shutter;
> +	max_shutter_ = max_shutter.get<std::micro>();
>  }
>  
> -void Agc::SetFixedShutter(double fixed_shutter)
> +void Agc::SetFixedShutter(const Duration &fixed_shutter)
>  {
> -	fixed_shutter_ = fixed_shutter;
> +	fixed_shutter_ = fixed_shutter.get<std::micro>();
>  	// 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..2b39fcabada3 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(const libcamera::utils::Duration &flicker_period) override;
> +	void SetMaxShutter(const libcamera::utils::Duration &max_shutter) override;
> +	void SetFixedShutter(const libcamera::utils::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 4e02e94084f7..e083f6c254cc 100644
> --- a/src/ipa/raspberrypi/raspberrypi.cpp
> +++ b/src/ipa/raspberrypi/raspberrypi.cpp
> @@ -640,8 +640,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);
>  
>  			libcameraMetadata_.set(controls::ExposureTime, ctrl.second.get<int32_t>());
>  			break;
> @@ -1094,7 +1094,7 @@ void IPARPi::applyFrameDurations(const Duration &minFrameDuration,
>  
>  	RPiController::AgcAlgorithm *agc = dynamic_cast<RPiController::AgcAlgorithm *>(
>  		controller_.GetAlgorithm("agc"));
> -	agc->SetMaxShutter(maxShutter.get<std::micro>());
> +	agc->SetMaxShutter(maxShutter);
>  }
>  
>  void IPARPi::applyAGC(const struct AgcStatus *agcStatus, ControlList &ctrls)

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list