ipa: raspberrypi: Remove generic "pause" mechanism from Algorithm

No existing Algorithm used the base pause(), resume() functions
or the paused_ flag, nor is there a need for a generic pause API.
Remove these. The AGC and AWB algorithms now have methods named
disableAuto(), enableAuto() which better describe their functionality.

Signed-off-by: Nick Hollinghurst <nick.hollinghurst@raspberrypi.com>
Reviewed-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Nick Hollinghurst 2022-11-21 14:47:29 +00:00 committed by Laurent Pinchart
parent 47c53f8084
commit 1bcb7539df
9 changed files with 26 additions and 40 deletions

View file

@ -26,6 +26,8 @@ public:
virtual void setMeteringMode(std::string const &meteringModeName) = 0; virtual void setMeteringMode(std::string const &meteringModeName) = 0;
virtual void setExposureMode(std::string const &exposureModeName) = 0; virtual void setExposureMode(std::string const &exposureModeName) = 0;
virtual void setConstraintMode(std::string const &contraintModeName) = 0; virtual void setConstraintMode(std::string const &contraintModeName) = 0;
virtual void enableAuto() = 0;
virtual void disableAuto() = 0;
}; };
} /* namespace RPiController */ } /* namespace RPiController */

View file

@ -27,14 +27,11 @@ class Algorithm
{ {
public: public:
Algorithm(Controller *controller) Algorithm(Controller *controller)
: controller_(controller), paused_(false) : controller_(controller)
{ {
} }
virtual ~Algorithm() = default; virtual ~Algorithm() = default;
virtual char const *name() const = 0; virtual char const *name() const = 0;
virtual bool isPaused() const { return paused_; }
virtual void pause() { paused_ = true; }
virtual void resume() { paused_ = false; }
virtual int read(const libcamera::YamlObject &params); virtual int read(const libcamera::YamlObject &params);
virtual void initialise(); virtual void initialise();
virtual void switchMode(CameraMode const &cameraMode, Metadata *metadata); virtual void switchMode(CameraMode const &cameraMode, Metadata *metadata);
@ -47,7 +44,6 @@ public:
private: private:
Controller *controller_; Controller *controller_;
bool paused_;
}; };
/* /*

View file

@ -18,6 +18,8 @@ public:
virtual unsigned int getConvergenceFrames() const = 0; virtual unsigned int getConvergenceFrames() const = 0;
virtual void setMode(std::string const &modeName) = 0; virtual void setMode(std::string const &modeName) = 0;
virtual void setManualGains(double manualR, double manualB) = 0; virtual void setManualGains(double manualR, double manualB) = 0;
virtual void enableAuto() = 0;
virtual void disableAuto() = 0;
}; };
} /* namespace RPiController */ } /* namespace RPiController */

View file

@ -108,16 +108,14 @@ void Controller::prepare(Metadata *imageMetadata)
{ {
assert(switchModeCalled_); assert(switchModeCalled_);
for (auto &algo : algorithms_) for (auto &algo : algorithms_)
if (!algo->isPaused()) algo->prepare(imageMetadata);
algo->prepare(imageMetadata);
} }
void Controller::process(StatisticsPtr stats, Metadata *imageMetadata) void Controller::process(StatisticsPtr stats, Metadata *imageMetadata)
{ {
assert(switchModeCalled_); assert(switchModeCalled_);
for (auto &algo : algorithms_) for (auto &algo : algorithms_)
if (!algo->isPaused()) algo->process(stats, imageMetadata);
algo->process(stats, imageMetadata);
} }
Metadata &Controller::getGlobalMetadata() Metadata &Controller::getGlobalMetadata()

View file

@ -270,18 +270,13 @@ int Agc::read(const libcamera::YamlObject &params)
return 0; return 0;
} }
bool Agc::isPaused() const void Agc::disableAuto()
{
return false;
}
void Agc::pause()
{ {
fixedShutter_ = status_.shutterTime; fixedShutter_ = status_.shutterTime;
fixedAnalogueGain_ = status_.analogueGain; fixedAnalogueGain_ = status_.analogueGain;
} }
void Agc::resume() void Agc::enableAuto()
{ {
fixedShutter_ = 0s; fixedShutter_ = 0s;
fixedAnalogueGain_ = 0; fixedAnalogueGain_ = 0;
@ -317,14 +312,14 @@ void Agc::setMaxShutter(Duration maxShutter)
void Agc::setFixedShutter(Duration fixedShutter) void Agc::setFixedShutter(Duration fixedShutter)
{ {
fixedShutter_ = fixedShutter; fixedShutter_ = fixedShutter;
/* Set this in case someone calls Pause() straight after. */ /* Set this in case someone calls disableAuto() straight after. */
status_.shutterTime = clipShutter(fixedShutter_); status_.shutterTime = clipShutter(fixedShutter_);
} }
void Agc::setFixedAnalogueGain(double fixedAnalogueGain) void Agc::setFixedAnalogueGain(double fixedAnalogueGain)
{ {
fixedAnalogueGain_ = fixedAnalogueGain; fixedAnalogueGain_ = fixedAnalogueGain;
/* Set this in case someone calls Pause() straight after. */ /* Set this in case someone calls disableAuto() straight after. */
status_.analogueGain = fixedAnalogueGain; status_.analogueGain = fixedAnalogueGain;
} }

View file

@ -75,10 +75,6 @@ public:
Agc(Controller *controller); Agc(Controller *controller);
char const *name() const override; char const *name() const override;
int read(const libcamera::YamlObject &params) override; int read(const libcamera::YamlObject &params) override;
/* AGC handles "pausing" for itself. */
bool isPaused() const override;
void pause() override;
void resume() override;
unsigned int getConvergenceFrames() const override; unsigned int getConvergenceFrames() const override;
void setEv(double ev) override; void setEv(double ev) override;
void setFlickerPeriod(libcamera::utils::Duration flickerPeriod) override; void setFlickerPeriod(libcamera::utils::Duration flickerPeriod) override;
@ -88,6 +84,8 @@ public:
void setMeteringMode(std::string const &meteringModeName) override; void setMeteringMode(std::string const &meteringModeName) override;
void setExposureMode(std::string const &exposureModeName) override; void setExposureMode(std::string const &exposureModeName) override;
void setConstraintMode(std::string const &contraintModeName) override; void setConstraintMode(std::string const &contraintModeName) override;
void enableAuto() override;
void disableAuto() override;
void switchMode(CameraMode const &cameraMode, Metadata *metadata) override; void switchMode(CameraMode const &cameraMode, Metadata *metadata) override;
void prepare(Metadata *imageMetadata) override; void prepare(Metadata *imageMetadata) override;
void process(StatisticsPtr &stats, Metadata *imageMetadata) override; void process(StatisticsPtr &stats, Metadata *imageMetadata) override;

View file

@ -222,21 +222,16 @@ void Awb::initialise()
asyncResults_ = syncResults_; asyncResults_ = syncResults_;
} }
bool Awb::isPaused() const void Awb::disableAuto()
{ {
return false; /* Freeze the most recent values, and treat them as manual gains */
}
void Awb::pause()
{
/* "Pause" by fixing everything to the most recent values. */
manualR_ = syncResults_.gainR = prevSyncResults_.gainR; manualR_ = syncResults_.gainR = prevSyncResults_.gainR;
manualB_ = syncResults_.gainB = prevSyncResults_.gainB; manualB_ = syncResults_.gainB = prevSyncResults_.gainB;
syncResults_.gainG = prevSyncResults_.gainG; syncResults_.gainG = prevSyncResults_.gainG;
syncResults_.temperatureK = prevSyncResults_.temperatureK; syncResults_.temperatureK = prevSyncResults_.temperatureK;
} }
void Awb::resume() void Awb::enableAuto()
{ {
manualR_ = 0.0; manualR_ = 0.0;
manualB_ = 0.0; manualB_ = 0.0;

View file

@ -93,13 +93,11 @@ public:
char const *name() const override; char const *name() const override;
void initialise() override; void initialise() override;
int read(const libcamera::YamlObject &params) override; int read(const libcamera::YamlObject &params) override;
/* AWB handles "pausing" for itself. */
bool isPaused() const override;
void pause() override;
void resume() override;
unsigned int getConvergenceFrames() const override; unsigned int getConvergenceFrames() const override;
void setMode(std::string const &name) override; void setMode(std::string const &name) override;
void setManualGains(double manualR, double manualB) override; void setManualGains(double manualR, double manualB) override;
void enableAuto() override;
void disableAuto() override;
void switchMode(CameraMode const &cameraMode, Metadata *metadata) override; void switchMode(CameraMode const &cameraMode, Metadata *metadata) override;
void prepare(Metadata *imageMetadata) override; void prepare(Metadata *imageMetadata) override;
void process(StatisticsPtr &stats, Metadata *imageMetadata) override; void process(StatisticsPtr &stats, Metadata *imageMetadata) override;

View file

@ -706,7 +706,8 @@ void IPARPi::queueRequest(const ControlList &controls)
switch (ctrl.first) { switch (ctrl.first) {
case controls::AE_ENABLE: { case controls::AE_ENABLE: {
RPiController::Algorithm *agc = controller_.getAlgorithm("agc"); RPiController::AgcAlgorithm *agc = dynamic_cast<RPiController::AgcAlgorithm *>(
controller_.getAlgorithm("agc"));
if (!agc) { if (!agc) {
LOG(IPARPI, Warning) LOG(IPARPI, Warning)
<< "Could not set AE_ENABLE - no AGC algorithm"; << "Could not set AE_ENABLE - no AGC algorithm";
@ -714,9 +715,9 @@ void IPARPi::queueRequest(const ControlList &controls)
} }
if (ctrl.second.get<bool>() == false) if (ctrl.second.get<bool>() == false)
agc->pause(); agc->disableAuto();
else else
agc->resume(); agc->enableAuto();
libcameraMetadata_.set(controls::AeEnable, ctrl.second.get<bool>()); libcameraMetadata_.set(controls::AeEnable, ctrl.second.get<bool>());
break; break;
@ -835,7 +836,8 @@ void IPARPi::queueRequest(const ControlList &controls)
} }
case controls::AWB_ENABLE: { case controls::AWB_ENABLE: {
RPiController::Algorithm *awb = controller_.getAlgorithm("awb"); RPiController::AwbAlgorithm *awb = dynamic_cast<RPiController::AwbAlgorithm *>(
controller_.getAlgorithm("awb"));
if (!awb) { if (!awb) {
LOG(IPARPI, Warning) LOG(IPARPI, Warning)
<< "Could not set AWB_ENABLE - no AWB algorithm"; << "Could not set AWB_ENABLE - no AWB algorithm";
@ -843,9 +845,9 @@ void IPARPi::queueRequest(const ControlList &controls)
} }
if (ctrl.second.get<bool>() == false) if (ctrl.second.get<bool>() == false)
awb->pause(); awb->disableAuto();
else else
awb->resume(); awb->enableAuto();
libcameraMetadata_.set(controls::AwbEnable, libcameraMetadata_.set(controls::AwbEnable,
ctrl.second.get<bool>()); ctrl.second.get<bool>());