ipa: rpi: agc: Make AGC controls affect all channels

We need to be able to do things like enable/disable AGC for all the
channels, so most of the AGC controls are updated to be applied to all
channels. There are a couple of exceptions, such as setting explicit
shutter/gain values, which apply only to channel 0.

Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
David Plowman
2023-10-18 15:05:54 +01:00
committed by Kieran Bingham
parent 78a2d00c79
commit 02eea043f2
4 changed files with 42 additions and 47 deletions
+5 -6
View File
@@ -22,17 +22,16 @@ public:
virtual unsigned int getConvergenceFrames() const = 0;
virtual std::vector<double> const &getWeights() const = 0;
virtual void setEv(unsigned int channel, double ev) = 0;
virtual void setFlickerPeriod(unsigned int channel,
libcamera::utils::Duration flickerPeriod) = 0;
virtual void setFlickerPeriod(libcamera::utils::Duration flickerPeriod) = 0;
virtual void setFixedShutter(unsigned int channel,
libcamera::utils::Duration fixedShutter) = 0;
virtual void setMaxShutter(libcamera::utils::Duration maxShutter) = 0;
virtual void setFixedAnalogueGain(unsigned int channel, double fixedAnalogueGain) = 0;
virtual void setMeteringMode(std::string const &meteringModeName) = 0;
virtual void setExposureMode(unsigned int channel, std::string const &exposureModeName) = 0;
virtual void setConstraintMode(unsigned int channel, std::string const &contraintModeName) = 0;
virtual void enableAuto(unsigned int channel) = 0;
virtual void disableAuto(unsigned int channel) = 0;
virtual void setExposureMode(std::string const &exposureModeName) = 0;
virtual void setConstraintMode(std::string const &contraintModeName) = 0;
virtual void enableAuto() = 0;
virtual void disableAuto() = 0;
virtual void setActiveChannels(const std::vector<unsigned int> &activeChannels) = 0;
};
+25 -26
View File
@@ -74,22 +74,22 @@ int Agc::checkChannel(unsigned int channelIndex) const
return 0;
}
void Agc::disableAuto(unsigned int channelIndex)
void Agc::disableAuto()
{
if (checkChannel(channelIndex))
return;
LOG(RPiAgc, Debug) << "disableAuto";
LOG(RPiAgc, Debug) << "disableAuto for channel " << channelIndex;
channelData_[channelIndex].channel.disableAuto();
/* All channels are enabled/disabled together. */
for (auto &data : channelData_)
data.channel.disableAuto();
}
void Agc::enableAuto(unsigned int channelIndex)
void Agc::enableAuto()
{
if (checkChannel(channelIndex))
return;
LOG(RPiAgc, Debug) << "enableAuto";
LOG(RPiAgc, Debug) << "enableAuto for channel " << channelIndex;
channelData_[channelIndex].channel.enableAuto();
/* All channels are enabled/disabled together. */
for (auto &data : channelData_)
data.channel.enableAuto();
}
unsigned int Agc::getConvergenceFrames() const
@@ -118,14 +118,13 @@ void Agc::setEv(unsigned int channelIndex, double ev)
channelData_[channelIndex].channel.setEv(ev);
}
void Agc::setFlickerPeriod(unsigned int channelIndex, Duration flickerPeriod)
void Agc::setFlickerPeriod(Duration flickerPeriod)
{
if (checkChannel(channelIndex))
return;
LOG(RPiAgc, Debug) << "setFlickerPeriod " << flickerPeriod;
LOG(RPiAgc, Debug) << "setFlickerPeriod " << flickerPeriod
<< " for channel " << channelIndex;
channelData_[channelIndex].channel.setFlickerPeriod(flickerPeriod);
/* Flicker period will be the same across all channels. */
for (auto &data : channelData_)
data.channel.setFlickerPeriod(flickerPeriod);
}
void Agc::setMaxShutter(Duration maxShutter)
@@ -162,22 +161,22 @@ void Agc::setMeteringMode(std::string const &meteringModeName)
data.channel.setMeteringMode(meteringModeName);
}
void Agc::setExposureMode(unsigned int channelIndex, std::string const &exposureModeName)
void Agc::setExposureMode(std::string const &exposureModeName)
{
if (checkChannel(channelIndex))
return;
LOG(RPiAgc, Debug) << "setExposureMode " << exposureModeName;
LOG(RPiAgc, Debug) << "setExposureMode " << exposureModeName
<< " for channel " << channelIndex;
channelData_[channelIndex].channel.setExposureMode(exposureModeName);
/* Exposure mode will be the same across all channels. */
for (auto &data : channelData_)
data.channel.setExposureMode(exposureModeName);
}
void Agc::setConstraintMode(unsigned int channelIndex, std::string const &constraintModeName)
void Agc::setConstraintMode(std::string const &constraintModeName)
{
if (checkChannel(channelIndex))
return;
LOG(RPiAgc, Debug) << "setConstraintMode " << constraintModeName;
channelData_[channelIndex].channel.setConstraintMode(constraintModeName);
/* Constraint mode will be the same across all channels. */
for (auto &data : channelData_)
data.channel.setConstraintMode(constraintModeName);
}
template<typename T>
+5 -8
View File
@@ -31,20 +31,17 @@ public:
unsigned int getConvergenceFrames() const override;
std::vector<double> const &getWeights() const override;
void setEv(unsigned int channel, double ev) override;
void setFlickerPeriod(unsigned int channelIndex,
libcamera::utils::Duration flickerPeriod) override;
void setFlickerPeriod(libcamera::utils::Duration flickerPeriod) override;
void setMaxShutter(libcamera::utils::Duration maxShutter) override;
void setFixedShutter(unsigned int channelIndex,
libcamera::utils::Duration fixedShutter) override;
void setFixedAnalogueGain(unsigned int channelIndex,
double fixedAnalogueGain) override;
void setMeteringMode(std::string const &meteringModeName) override;
void setExposureMode(unsigned int channelIndex,
std::string const &exposureModeName) override;
void setConstraintMode(unsigned int channelIndex,
std::string const &contraintModeName) override;
void enableAuto(unsigned int channelIndex) override;
void disableAuto(unsigned int channelIndex) override;
void setExposureMode(std::string const &exposureModeName) override;
void setConstraintMode(std::string const &contraintModeName) override;
void enableAuto() override;
void disableAuto() override;
void switchMode(CameraMode const &cameraMode, Metadata *metadata) override;
void prepare(Metadata *imageMetadata) override;
void process(StatisticsPtr &stats, Metadata *imageMetadata) override;