ipa: rkisp1: awb: Load white balance gains from tuning file

For the implementation of a manual colour temperature setting, it is
necessary to read predefined colour gains per colour temperature from
the tuning file. Implement this in a backwards compatible way. If no
gains are contained in the tuning file, loading just continues as
before.

Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Stefan Klug 2024-12-19 18:57:19 +01:00
parent 4d2618fb10
commit 886e0328c3
2 changed files with 25 additions and 0 deletions

View file

@ -41,6 +41,24 @@ Awb::Awb()
{ {
} }
/**
* \copydoc libcamera::ipa::Algorithm::init
*/
int Awb::init([[maybe_unused]] IPAContext &context, const YamlObject &tuningData)
{
Interpolator<Vector<double, 2>> gainCurve;
int ret = gainCurve.readYaml(tuningData["colourGains"], "ct", "gains");
if (ret < 0)
LOG(RkISP1Awb, Warning)
<< "Failed to parse 'colourGains' "
<< "parameter from tuning file; "
<< "manual colour temperature will not work properly";
else
colourGainCurve_ = gainCurve;
return 0;
}
/** /**
* \copydoc libcamera::ipa::Algorithm::configure * \copydoc libcamera::ipa::Algorithm::configure
*/ */

View file

@ -7,6 +7,11 @@
#pragma once #pragma once
#include <optional>
#include "libipa/interpolator.h"
#include "libipa/vector.h"
#include "algorithm.h" #include "algorithm.h"
namespace libcamera { namespace libcamera {
@ -19,6 +24,7 @@ public:
Awb(); Awb();
~Awb() = default; ~Awb() = default;
int init(IPAContext &context, const YamlObject &tuningData) override;
int configure(IPAContext &context, const IPACameraSensorInfo &configInfo) override; int configure(IPAContext &context, const IPACameraSensorInfo &configInfo) override;
void queueRequest(IPAContext &context, const uint32_t frame, void queueRequest(IPAContext &context, const uint32_t frame,
IPAFrameContext &frameContext, IPAFrameContext &frameContext,
@ -32,6 +38,7 @@ public:
ControlList &metadata) override; ControlList &metadata) override;
private: private:
std::optional<Interpolator<Vector<double, 2>>> colourGainCurve_;
bool rgbMode_; bool rgbMode_;
}; };