diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ipa/rkisp1/rkisp1.cpp | 30 | ||||
-rw-r--r-- | src/libcamera/pipeline/rkisp1/rkisp1.cpp | 31 |
2 files changed, 29 insertions, 32 deletions
diff --git a/src/ipa/rkisp1/rkisp1.cpp b/src/ipa/rkisp1/rkisp1.cpp index 0ebd69aa..6cf4d169 100644 --- a/src/ipa/rkisp1/rkisp1.cpp +++ b/src/ipa/rkisp1/rkisp1.cpp @@ -46,7 +46,8 @@ namespace ipa::rkisp1 { class IPARkISP1 : public IPARkISP1Interface, public Module { public: - int init(const IPASettings &settings, unsigned int hwRevision) override; + int init(const IPASettings &settings, unsigned int hwRevision, + ControlInfoMap *ipaControls) override; int start() override; void stop() override {} @@ -89,12 +90,27 @@ private: struct IPAContext context_; }; +namespace { + +/* List of controls handled by the RkISP1 IPA */ +const ControlInfoMap::Map rkisp1Controls{ + { &controls::AeEnable, ControlInfo(false, true) }, + { &controls::Brightness, ControlInfo(-1.0f, 0.993f) }, + { &controls::Contrast, ControlInfo(0.0f, 1.993f) }, + { &controls::Saturation, ControlInfo(0.0f, 1.993f) }, + { &controls::Sharpness, ControlInfo(0.0f, 10.0f, 1.0f) }, + { &controls::draft::NoiseReductionMode, ControlInfo(controls::draft::NoiseReductionModeValues) }, +}; + +} /* namespace */ + std::string IPARkISP1::logPrefix() const { return "rkisp1"; } -int IPARkISP1::init(const IPASettings &settings, unsigned int hwRevision) +int IPARkISP1::init(const IPASettings &settings, unsigned int hwRevision, + ControlInfoMap *ipaControls) { /* \todo Add support for other revisions */ switch (hwRevision) { @@ -155,7 +171,15 @@ int IPARkISP1::init(const IPASettings &settings, unsigned int hwRevision) return -EINVAL; } - return createAlgorithms(context_, (*data)["algorithms"]); + int ret = createAlgorithms(context_, (*data)["algorithms"]); + if (ret) + return ret; + + /* Return the controls handled by the IPA. */ + ControlInfoMap::Map ctrlMap = rkisp1Controls; + *ipaControls = ControlInfoMap(std::move(ctrlMap), controls::controls); + + return 0; } int IPARkISP1::start() diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp index de687f4d..93287332 100644 --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp @@ -344,7 +344,8 @@ int RkISP1CameraData::loadIPA(unsigned int hwRevision) ipaTuningFile = std::string(configFromEnv); } - int ret = ipa_->init({ ipaTuningFile, sensor_->model() }, hwRevision); + int ret = ipa_->init({ ipaTuningFile, sensor_->model() }, hwRevision, + &controlInfo_); if (ret < 0) { LOG(RkISP1, Error) << "IPA initialization failure"; return ret; @@ -967,34 +968,6 @@ int PipelineHandlerRkISP1::createCamera(MediaEntity *sensor) std::make_unique<RkISP1CameraData>(this, &mainPath_, hasSelfPath_ ? &selfPath_ : nullptr); - ControlInfoMap::Map ctrls; - ctrls.emplace(std::piecewise_construct, - std::forward_as_tuple(&controls::Sharpness), - std::forward_as_tuple(0.0f, 10.0f, 1.0f)); - - ctrls.emplace(std::piecewise_construct, - std::forward_as_tuple(&controls::Brightness), - std::forward_as_tuple(-1.0f, 0.993f)); - - ctrls.emplace(std::piecewise_construct, - std::forward_as_tuple(&controls::Contrast), - std::forward_as_tuple(0.0f, 1.993f)); - - ctrls.emplace(std::piecewise_construct, - std::forward_as_tuple(&controls::Saturation), - std::forward_as_tuple(0.0f, 1.993f)); - - ctrls.emplace(std::piecewise_construct, - std::forward_as_tuple(&controls::draft::NoiseReductionMode), - std::forward_as_tuple(controls::draft::NoiseReductionModeValues)); - - ctrls.emplace(std::piecewise_construct, - std::forward_as_tuple(&controls::AeEnable), - std::forward_as_tuple(false, true)); - - data->controlInfo_ = ControlInfoMap(std::move(ctrls), - controls::controls); - data->sensor_ = std::make_unique<CameraSensor>(sensor); ret = data->sensor_->init(); if (ret) |