summaryrefslogtreecommitdiff
path: root/src/ipa
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2022-10-22 01:47:31 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2022-11-09 23:43:57 +0200
commit00b650b6b813230eb328742c560236aa43465134 (patch)
tree089d02ae454dd8765de0c2ea5b72780ae09ba938 /src/ipa
parent02bc2a8a24baaff82d1c5f8cb5d9ab7d1afab426 (diff)
ipa: rkisp1: Move shutter speed and analogue gain limits from agc to sensor
The limits for the shutter speed and analogue gain are stored in IPASessionConfiguration::agc. While they're related to the AGC, they are properties of the sensor, and are stored in the session configuration by the IPA module, not the AGC algorithm. Move them to the IPASessionConfiguration::sensor structure where they belong. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Diffstat (limited to 'src/ipa')
-rw-r--r--src/ipa/rkisp1/algorithms/agc.cpp11
-rw-r--r--src/ipa/rkisp1/ipa_context.cpp28
-rw-r--r--src/ipa/rkisp1/ipa_context.h9
-rw-r--r--src/ipa/rkisp1/rkisp1.cpp10
4 files changed, 32 insertions, 26 deletions
diff --git a/src/ipa/rkisp1/algorithms/agc.cpp b/src/ipa/rkisp1/algorithms/agc.cpp
index 11613d1c..dba58c90 100644
--- a/src/ipa/rkisp1/algorithms/agc.cpp
+++ b/src/ipa/rkisp1/algorithms/agc.cpp
@@ -74,7 +74,8 @@ Agc::Agc()
int Agc::configure(IPAContext &context, const IPACameraSensorInfo &configInfo)
{
/* Configure the default exposure and gain. */
- context.activeState.agc.gain = std::max(context.configuration.agc.minAnalogueGain, kMinAnalogueGain);
+ context.activeState.agc.gain = std::max(context.configuration.sensor.minAnalogueGain,
+ kMinAnalogueGain);
context.activeState.agc.exposure = 10ms / context.configuration.sensor.lineDuration;
/*
@@ -202,13 +203,13 @@ void Agc::computeExposure(IPAContext &context, IPAFrameContext &frameContext,
/* Use the highest of the two gain estimates. */
double evGain = std::max(yGain, iqMeanGain);
- utils::Duration minShutterSpeed = configuration.agc.minShutterSpeed;
- utils::Duration maxShutterSpeed = std::min(configuration.agc.maxShutterSpeed,
+ utils::Duration minShutterSpeed = configuration.sensor.minShutterSpeed;
+ utils::Duration maxShutterSpeed = std::min(configuration.sensor.maxShutterSpeed,
kMaxShutterSpeed);
- double minAnalogueGain = std::max(configuration.agc.minAnalogueGain,
+ double minAnalogueGain = std::max(configuration.sensor.minAnalogueGain,
kMinAnalogueGain);
- double maxAnalogueGain = std::min(configuration.agc.maxAnalogueGain,
+ double maxAnalogueGain = std::min(configuration.sensor.maxAnalogueGain,
kMaxAnalogueGain);
/* Consider within 1% of the target as correctly exposed. */
diff --git a/src/ipa/rkisp1/ipa_context.cpp b/src/ipa/rkisp1/ipa_context.cpp
index 3c14cf34..7a987497 100644
--- a/src/ipa/rkisp1/ipa_context.cpp
+++ b/src/ipa/rkisp1/ipa_context.cpp
@@ -28,21 +28,11 @@ namespace libcamera::ipa::rkisp1 {
* \var IPASessionConfiguration::agc
* \brief AGC parameters configuration of the IPA
*
- * \var IPASessionConfiguration::agc.minShutterSpeed
- * \brief Minimum shutter speed supported with the configured sensor
- *
- * \var IPASessionConfiguration::agc.maxShutterSpeed
- * \brief Maximum shutter speed supported with the configured sensor
- *
- * \var IPASessionConfiguration::agc.minAnalogueGain
- * \brief Minimum analogue gain supported with the configured sensor
- *
- * \var IPASessionConfiguration::agc.maxAnalogueGain
- * \brief Maximum analogue gain supported with the configured sensor
- *
* \var IPASessionConfiguration::agc.measureWindow
* \brief AGC measure window
- *
+ */
+
+/**
* \var IPASessionConfiguration::hw
* \brief RkISP1-specific hardware information
*
@@ -77,6 +67,18 @@ namespace libcamera::ipa::rkisp1 {
* \var IPASessionConfiguration::sensor
* \brief Sensor-specific configuration of the IPA
*
+ * \var IPASessionConfiguration::sensor.minShutterSpeed
+ * \brief Minimum shutter speed supported with the sensor
+ *
+ * \var IPASessionConfiguration::sensor.maxShutterSpeed
+ * \brief Maximum shutter speed supported with the sensor
+ *
+ * \var IPASessionConfiguration::sensor.minAnalogueGain
+ * \brief Minimum analogue gain supported with the sensor
+ *
+ * \var IPASessionConfiguration::sensor.maxAnalogueGain
+ * \brief Maximum analogue gain supported with the sensor
+ *
* \var IPASessionConfiguration::sensor.defVBlank
* \brief The default vblank value of the sensor
*
diff --git a/src/ipa/rkisp1/ipa_context.h b/src/ipa/rkisp1/ipa_context.h
index 60e8a7e1..bb60ab9e 100644
--- a/src/ipa/rkisp1/ipa_context.h
+++ b/src/ipa/rkisp1/ipa_context.h
@@ -22,10 +22,6 @@ namespace ipa::rkisp1 {
struct IPASessionConfiguration {
struct {
- utils::Duration minShutterSpeed;
- utils::Duration maxShutterSpeed;
- double minAnalogueGain;
- double maxAnalogueGain;
struct rkisp1_cif_isp_window measureWindow;
} agc;
@@ -39,6 +35,11 @@ struct IPASessionConfiguration {
} lsc;
struct {
+ utils::Duration minShutterSpeed;
+ utils::Duration maxShutterSpeed;
+ double minAnalogueGain;
+ double maxAnalogueGain;
+
int32_t defVBlank;
utils::Duration lineDuration;
Size size;
diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp
index 069c901b..d61b73e1 100644
--- a/src/ipa/rkisp1/rkisp1.cpp
+++ b/src/ipa/rkisp1/rkisp1.cpp
@@ -256,10 +256,12 @@ int IPARkISP1::configure([[maybe_unused]] const IPACameraSensorInfo &info,
*
* \todo take VBLANK into account for maximum shutter speed
*/
- context_.configuration.agc.minShutterSpeed = minExposure * context_.configuration.sensor.lineDuration;
- context_.configuration.agc.maxShutterSpeed = maxExposure * context_.configuration.sensor.lineDuration;
- context_.configuration.agc.minAnalogueGain = camHelper_->gain(minGain);
- context_.configuration.agc.maxAnalogueGain = camHelper_->gain(maxGain);
+ context_.configuration.sensor.minShutterSpeed =
+ minExposure * context_.configuration.sensor.lineDuration;
+ context_.configuration.sensor.maxShutterSpeed =
+ maxExposure * context_.configuration.sensor.lineDuration;
+ context_.configuration.sensor.minAnalogueGain = camHelper_->gain(minGain);
+ context_.configuration.sensor.maxAnalogueGain = camHelper_->gain(maxGain);
for (auto const &algo : algorithms()) {
int ret = algo->configure(context_, info);