ipa: raspberrypi: Switch AgcAlgorithm API to use utils::Duration

Switch the AgcAlgorithm API functions to use utils::Duration for all
time based variables.

Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Naushir Patuck 2021-06-08 12:03:34 +01:00 committed by Laurent Pinchart
parent caa753179c
commit 2db8a767ca
4 changed files with 17 additions and 15 deletions

View file

@ -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(libcamera::utils::Duration flicker_period) = 0;
virtual void SetFixedShutter(libcamera::utils::Duration fixed_shutter) = 0;
virtual void SetMaxShutter(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;

View file

@ -21,6 +21,7 @@
using namespace RPiController;
using namespace libcamera;
using libcamera::utils::Duration;
LOG_DEFINE_CATEGORY(RPiAgc)
@ -222,19 +223,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_ = flicker_period.get<std::micro>();
}
void Agc::SetMaxShutter(double max_shutter)
void Agc::SetMaxShutter(Duration max_shutter)
{
max_shutter_ = max_shutter;
max_shutter_ = max_shutter.get<std::micro>();
}
void Agc::SetFixedShutter(double fixed_shutter)
void Agc::SetFixedShutter(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_);
}

View file

@ -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(libcamera::utils::Duration flicker_period) override;
void SetMaxShutter(libcamera::utils::Duration max_shutter) override;
void SetFixedShutter(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;

View file

@ -638,8 +638,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;
@ -1091,7 +1091,7 @@ void IPARPi::applyFrameDurations(Duration minFrameDuration, Duration maxFrameDur
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)