summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ipa/rkisp1/algorithms/awb.cpp16
-rw-r--r--src/ipa/rkisp1/algorithms/ccm.cpp2
-rw-r--r--src/ipa/rkisp1/algorithms/lsc.cpp6
-rw-r--r--src/ipa/rkisp1/ipa_context.cpp11
-rw-r--r--src/ipa/rkisp1/ipa_context.h2
5 files changed, 21 insertions, 16 deletions
diff --git a/src/ipa/rkisp1/algorithms/awb.cpp b/src/ipa/rkisp1/algorithms/awb.cpp
index c7e65bd2..8a8fccd5 100644
--- a/src/ipa/rkisp1/algorithms/awb.cpp
+++ b/src/ipa/rkisp1/algorithms/awb.cpp
@@ -130,7 +130,8 @@ int Awb::configure(IPAContext &context,
context.activeState.awb.automatic.gains =
awbAlgo_->gainsFromColourTemperature(kDefaultColourTemperature);
context.activeState.awb.autoEnabled = true;
- context.activeState.awb.temperatureK = kDefaultColourTemperature;
+ context.activeState.awb.manual.temperatureK = kDefaultColourTemperature;
+ context.activeState.awb.automatic.temperatureK = kDefaultColourTemperature;
/*
* Define the measurement window for AWB as a centered rectangle
@@ -187,7 +188,7 @@ void Awb::queueRequest(IPAContext &context,
const auto &gains = awbAlgo_->gainsFromColourTemperature(*colourTemperature);
awb.manual.gains.r() = gains.r();
awb.manual.gains.b() = gains.b();
- awb.temperatureK = *colourTemperature;
+ awb.manual.temperatureK = *colourTemperature;
update = true;
}
@@ -196,7 +197,7 @@ void Awb::queueRequest(IPAContext &context,
<< "Set colour gains to " << awb.manual.gains;
frameContext.awb.gains = awb.manual.gains;
- frameContext.awb.temperatureK = awb.temperatureK;
+ frameContext.awb.temperatureK = awb.manual.temperatureK;
}
/**
@@ -210,8 +211,9 @@ void Awb::prepare(IPAContext &context, const uint32_t frame,
* most up-to-date automatic values we can read.
*/
if (frameContext.awb.autoEnabled) {
- frameContext.awb.gains = context.activeState.awb.automatic.gains;
- frameContext.awb.temperatureK = context.activeState.awb.temperatureK;
+ const auto &awb = context.activeState.awb;
+ frameContext.awb.gains = awb.automatic.gains;
+ frameContext.awb.temperatureK = awb.automatic.temperatureK;
}
auto gainConfig = params->block<BlockType::AwbGain>();
@@ -316,7 +318,7 @@ void Awb::process(IPAContext &context,
RkISP1AwbStats awbStats{ rgbMeans };
AwbResult awbResult = awbAlgo_->calculateAwb(awbStats, frameContext.lux.lux);
- activeState.awb.temperatureK = awbResult.colourTemperature;
+ activeState.awb.automatic.temperatureK = awbResult.colourTemperature;
/*
* Clamp the gain values to the hardware, which expresses gains as Q2.8
@@ -337,7 +339,7 @@ void Awb::process(IPAContext &context,
<< std::showpoint
<< "Means " << rgbMeans << ", gains "
<< activeState.awb.automatic.gains << ", temp "
- << activeState.awb.temperatureK << "K";
+ << activeState.awb.automatic.temperatureK << "K";
}
RGB<double> Awb::calculateRgbMeans(const IPAFrameContext &frameContext, const rkisp1_cif_isp_awb_stat *awb) const
diff --git a/src/ipa/rkisp1/algorithms/ccm.cpp b/src/ipa/rkisp1/algorithms/ccm.cpp
index eb8ca39e..2e5e9100 100644
--- a/src/ipa/rkisp1/algorithms/ccm.cpp
+++ b/src/ipa/rkisp1/algorithms/ccm.cpp
@@ -88,7 +88,7 @@ void Ccm::setParameters(struct rkisp1_cif_isp_ctk_config &config,
void Ccm::prepare(IPAContext &context, const uint32_t frame,
IPAFrameContext &frameContext, RkISP1Params *params)
{
- uint32_t ct = context.activeState.awb.temperatureK;
+ uint32_t ct = frameContext.awb.temperatureK;
/*
* \todo The colour temperature will likely be noisy, add filtering to
diff --git a/src/ipa/rkisp1/algorithms/lsc.cpp b/src/ipa/rkisp1/algorithms/lsc.cpp
index e47aa2f0..e7301bfe 100644
--- a/src/ipa/rkisp1/algorithms/lsc.cpp
+++ b/src/ipa/rkisp1/algorithms/lsc.cpp
@@ -404,12 +404,12 @@ void LensShadingCorrection::copyTable(rkisp1_cif_isp_lsc_config &config,
/**
* \copydoc libcamera::ipa::Algorithm::prepare
*/
-void LensShadingCorrection::prepare(IPAContext &context,
+void LensShadingCorrection::prepare([[maybe_unused]] IPAContext &context,
[[maybe_unused]] const uint32_t frame,
- [[maybe_unused]] IPAFrameContext &frameContext,
+ IPAFrameContext &frameContext,
RkISP1Params *params)
{
- uint32_t ct = context.activeState.awb.temperatureK;
+ uint32_t ct = frameContext.awb.temperatureK;
if (std::abs(static_cast<int>(ct) - static_cast<int>(lastAppliedCt_)) <
kColourTemperatureChangeThreshhold)
return;
diff --git a/src/ipa/rkisp1/ipa_context.cpp b/src/ipa/rkisp1/ipa_context.cpp
index 25b5bf50..1ee6aeb1 100644
--- a/src/ipa/rkisp1/ipa_context.cpp
+++ b/src/ipa/rkisp1/ipa_context.cpp
@@ -197,15 +197,15 @@ namespace libcamera::ipa::rkisp1 {
* \var IPAActiveState::awb::AwbState.gains
* \brief White balance gains
*
+ * \var IPAActiveState::awb::AwbState.temperatureK
+ * \brief Color temperature
+ *
* \var IPAActiveState::awb.manual
* \brief Manual regulation state (set through requests)
*
* \var IPAActiveState::awb.automatic
* \brief Automatic regulation state (computed by the algorithm)
*
- * \var IPAActiveState::awb.temperatureK
- * \brief Estimated color temperature
- *
* \var IPAActiveState::awb.autoEnabled
* \brief Whether the Auto White Balance algorithm is enabled
*/
@@ -349,7 +349,10 @@ namespace libcamera::ipa::rkisp1 {
* \brief White balance gains
*
* \var IPAFrameContext::awb.temperatureK
- * \brief Estimated color temperature
+ * \brief Color temperature used for processing this frame
+ *
+ * This does not match the color temperature estimated for this frame as the
+ * measurements were taken on a previous frame.
*
* \var IPAFrameContext::awb.autoEnabled
* \brief Whether the Auto White Balance algorithm is enabled
diff --git a/src/ipa/rkisp1/ipa_context.h b/src/ipa/rkisp1/ipa_context.h
index 6bc922a8..769e9f11 100644
--- a/src/ipa/rkisp1/ipa_context.h
+++ b/src/ipa/rkisp1/ipa_context.h
@@ -91,12 +91,12 @@ struct IPAActiveState {
struct {
struct AwbState {
RGB<double> gains;
+ unsigned int temperatureK;
};
AwbState manual;
AwbState automatic;
- unsigned int temperatureK;
bool autoEnabled;
} awb;