@@ -11,6 +11,8 @@
#include <libcamera/control_ids.h>
+constexpr int32_t kDefaultColourTemperature = 5000;
+
/**
* \file awb.h
* \brief Base classes for AWB algorithms
@@ -139,6 +141,33 @@ namespace ipa {
* \return 0 on success, a negative error code otherwise
*/
+/**
+ * \brief Configure the Awb algorithm given an IPAConfigInfo
+ * \param[in] state The AWB specific active state shared across frames
+ * \param[in] session The AWB specific session configuration
+ *
+ * Configure and initialise the AWB algorithm module.
+ *
+ * \return 0 if successful, an error code otherwise
+ */
+int AwbAlgorithm::configure(awb::ActiveState &state, awb::Session &session)
+{
+ state.manual.gains = RGB<double>{ 1.0 };
+ auto gains = gainsFromColourTemperature(kDefaultColourTemperature);
+ if (gains)
+ state.automatic.gains = *gains;
+ else
+ state.automatic.gains = RGB<double>{ 1.0 };
+
+ state.autoEnabled = true;
+ state.manual.temperatureK = kDefaultColourTemperature;
+ state.automatic.temperatureK = kDefaultColourTemperature;
+
+ session.enabled = true;
+
+ return 0;
+}
+
/**
* \fn AwbAlgorithm::calculateAwb()
* \brief Calculate AWB data from the given statistics
@@ -65,6 +65,9 @@ public:
virtual ~AwbAlgorithm() = default;
virtual int init(const YamlObject &tuningData) = 0;
+
+ int configure(awb::ActiveState &state, awb::Session &session);
+
virtual AwbResult calculateAwb(const AwbStats &stats, unsigned int lux) = 0;
virtual std::optional<RGB<double>> gainsFromColourTemperature(double colourTemperature) = 0;
@@ -128,16 +128,7 @@ int Awb::init(IPAContext &context, const YamlObject &tuningData)
int Awb::configure(IPAContext &context,
const IPACameraSensorInfo &configInfo)
{
- context.activeState.awb.manual.gains = RGB<double>{ 1.0 };
- auto gains = awbAlgo_->gainsFromColourTemperature(kDefaultColourTemperature);
- if (gains)
- context.activeState.awb.automatic.gains = *gains;
- else
- context.activeState.awb.automatic.gains = RGB<double>{ 1.0 };
-
- context.activeState.awb.autoEnabled = true;
- context.activeState.awb.manual.temperatureK = kDefaultColourTemperature;
- context.activeState.awb.automatic.temperatureK = kDefaultColourTemperature;
+ awbAlgo_->configure(context.activeState.awb, context.configuration.awb);
/*
* Define the measurement window for AWB as a centered rectangle
@@ -148,8 +139,6 @@ int Awb::configure(IPAContext &context,
context.configuration.awb.measureWindow.h_size = 3 * configInfo.outputSize.width / 4;
context.configuration.awb.measureWindow.v_size = 3 * configInfo.outputSize.height / 4;
- context.configuration.awb.enabled = true;
-
return 0;
}
@@ -106,20 +106,8 @@ int Awb::init(IPAContext &context, const YamlObject &tuningData)
int Awb::configure(IPAContext &context,
[[maybe_unused]] const IPAConfigInfo &configInfo)
{
- context.activeState.awb.manual.gains = RGB<double>{ 1.0 };
- auto gains = awbAlgo_->gainsFromColourTemperature(kDefaultColourTemperature);
- if (gains)
- context.activeState.awb.automatic.gains = *gains;
- else
- context.activeState.awb.automatic.gains = RGB<double>{ 1.0 };
-
- context.activeState.awb.autoEnabled = true;
- context.activeState.awb.manual.temperatureK = kDefaultColourTemperature;
- context.activeState.awb.automatic.temperatureK = kDefaultColourTemperature;
-
- context.configuration.awb.enabled = true;
-
- return 0;
+ return awbAlgo_->configure(context.activeState.awb,
+ context.configuration.awb);
}
/**
Refactor the AWB configuration to use the common implementation supplied by libipa awb module. Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com> --- src/ipa/libipa/awb.cpp | 29 +++++++++++++++++++++++++++++ src/ipa/libipa/awb.h | 3 +++ src/ipa/rkisp1/algorithms/awb.cpp | 13 +------------ src/ipa/simple/algorithms/awb.cpp | 16 ++-------------- 4 files changed, 35 insertions(+), 26 deletions(-)