summaryrefslogtreecommitdiff
path: root/src/ipa/rkisp1
diff options
context:
space:
mode:
Diffstat (limited to 'src/ipa/rkisp1')
-rw-r--r--src/ipa/rkisp1/algorithms/blc.cpp49
-rw-r--r--src/ipa/rkisp1/algorithms/blc.h10
2 files changed, 50 insertions, 9 deletions
diff --git a/src/ipa/rkisp1/algorithms/blc.cpp b/src/ipa/rkisp1/algorithms/blc.cpp
index 3542f61c..a58569fa 100644
--- a/src/ipa/rkisp1/algorithms/blc.cpp
+++ b/src/ipa/rkisp1/algorithms/blc.cpp
@@ -7,6 +7,10 @@
#include "blc.h"
+#include <libcamera/base/log.h>
+
+#include "libcamera/internal/yaml_parser.h"
+
/**
* \file blc.h
*/
@@ -29,6 +33,35 @@ namespace ipa::rkisp1::algorithms {
* isn't currently supported.
*/
+LOG_DEFINE_CATEGORY(RkISP1Blc)
+
+BlackLevelCorrection::BlackLevelCorrection()
+ : tuningParameters_(false)
+{
+}
+
+/**
+ * \copydoc libcamera::ipa::Algorithm::init
+ */
+int BlackLevelCorrection::init([[maybe_unused]] IPAContext &context,
+ const YamlObject &tuningData)
+{
+ blackLevelRed_ = tuningData["R"].get<int16_t>(256);
+ blackLevelGreenR_ = tuningData["Gr"].get<int16_t>(256);
+ blackLevelGreenB_ = tuningData["Gb"].get<int16_t>(256);
+ blackLevelBlue_ = tuningData["B"].get<int16_t>(256);
+
+ tuningParameters_ = true;
+
+ LOG(RkISP1Blc, Debug)
+ << "Black levels: red " << blackLevelRed_
+ << ", green (red) " << blackLevelGreenR_
+ << ", green (blue) " << blackLevelGreenB_
+ << ", blue " << blackLevelBlue_;
+
+ return 0;
+}
+
/**
* \copydoc libcamera::ipa::Algorithm::prepare
*/
@@ -37,15 +70,15 @@ void BlackLevelCorrection::prepare(IPAContext &context,
{
if (context.frameContext.frameCount > 0)
return;
- /*
- * Substract fixed values taken from imx219 tuning file.
- * \todo Use a configuration file for it ?
- */
+
+ if (!tuningParameters_)
+ return;
+
params->others.bls_config.enable_auto = 0;
- params->others.bls_config.fixed_val.r = 256;
- params->others.bls_config.fixed_val.gr = 256;
- params->others.bls_config.fixed_val.gb = 256;
- params->others.bls_config.fixed_val.b = 256;
+ params->others.bls_config.fixed_val.r = blackLevelRed_;
+ params->others.bls_config.fixed_val.gr = blackLevelGreenR_;
+ params->others.bls_config.fixed_val.gb = blackLevelGreenB_;
+ params->others.bls_config.fixed_val.b = blackLevelBlue_;
params->module_en_update |= RKISP1_CIF_ISP_MODULE_BLS;
params->module_ens |= RKISP1_CIF_ISP_MODULE_BLS;
diff --git a/src/ipa/rkisp1/algorithms/blc.h b/src/ipa/rkisp1/algorithms/blc.h
index 69874d8f..c2649dd7 100644
--- a/src/ipa/rkisp1/algorithms/blc.h
+++ b/src/ipa/rkisp1/algorithms/blc.h
@@ -20,10 +20,18 @@ namespace ipa::rkisp1::algorithms {
class BlackLevelCorrection : public Algorithm
{
public:
- BlackLevelCorrection() = default;
+ BlackLevelCorrection();
~BlackLevelCorrection() = default;
+ int init(IPAContext &context, const YamlObject &tuningData) override;
void prepare(IPAContext &context, rkisp1_params_cfg *params) override;
+
+private:
+ bool tuningParameters_;
+ int16_t blackLevelRed_;
+ int16_t blackLevelGreenR_;
+ int16_t blackLevelGreenB_;
+ int16_t blackLevelBlue_;
};
} /* namespace ipa::rkisp1::algorithms */