@@ -46,6 +46,28 @@ Dpf::Dpf()
*/
int Dpf::init([[maybe_unused]] IPAContext &context,
const YamlObject &tuningData)
+{
+ /* Parse tuning block. */
+ int ret = parseConfig(tuningData);
+ if (ret)
+ return ret;
+
+ return 0;
+}
+
+int Dpf::parseConfig(const YamlObject &tuningData)
+{
+ /* Parse base config. */
+ int ret = parseSingleConfig(tuningData, config_, strengthConfig_);
+ if (ret)
+ return ret;
+
+ return 0;
+}
+
+int Dpf::parseSingleConfig(const YamlObject &tuningData,
+ rkisp1_cif_isp_dpf_config &config,
+ rkisp1_cif_isp_dpf_strength_config &strengthConfig)
{
std::vector<uint8_t> values;
@@ -82,10 +104,10 @@ int Dpf::init([[maybe_unused]] IPAContext &context,
}
std::copy_n(values.begin(), values.size(),
- std::begin(config_.g_flt.spatial_coeff));
+ std::begin(config.g_flt.spatial_coeff));
- config_.g_flt.gr_enable = true;
- config_.g_flt.gb_enable = true;
+ config.g_flt.gr_enable = true;
+ config.g_flt.gb_enable = true;
/*
* For the red and blue components, we have the 13x9 kernel specified
@@ -119,15 +141,15 @@ int Dpf::init([[maybe_unused]] IPAContext &context,
return -EINVAL;
}
- config_.rb_flt.fltsize = values.size() == RKISP1_CIF_ISP_DPF_MAX_SPATIAL_COEFFS
- ? RKISP1_CIF_ISP_DPF_RB_FILTERSIZE_13x9
- : RKISP1_CIF_ISP_DPF_RB_FILTERSIZE_9x9;
+ config.rb_flt.fltsize = values.size() == RKISP1_CIF_ISP_DPF_MAX_SPATIAL_COEFFS
+ ? RKISP1_CIF_ISP_DPF_RB_FILTERSIZE_13x9
+ : RKISP1_CIF_ISP_DPF_RB_FILTERSIZE_9x9;
std::copy_n(values.begin(), values.size(),
- std::begin(config_.rb_flt.spatial_coeff));
+ std::begin(config.rb_flt.spatial_coeff));
- config_.rb_flt.r_enable = true;
- config_.rb_flt.b_enable = true;
+ config.rb_flt.r_enable = true;
+ config.rb_flt.b_enable = true;
/*
* The range kernel is configured with a noise level lookup table (NLL)
@@ -147,13 +169,13 @@ int Dpf::init([[maybe_unused]] IPAContext &context,
}
std::copy_n(nllValues.begin(), nllValues.size(),
- std::begin(config_.nll.coeff));
+ std::begin(config.nll.coeff));
std::string scaleMode = rFObject["scale-mode"].get<std::string>("");
if (scaleMode == "linear") {
- config_.nll.scale_mode = RKISP1_CIF_ISP_NLL_SCALE_LINEAR;
+ config.nll.scale_mode = RKISP1_CIF_ISP_NLL_SCALE_LINEAR;
} else if (scaleMode == "logarithmic") {
- config_.nll.scale_mode = RKISP1_CIF_ISP_NLL_SCALE_LOGARITHMIC;
+ config.nll.scale_mode = RKISP1_CIF_ISP_NLL_SCALE_LOGARITHMIC;
} else {
LOG(RkISP1Dpf, Error)
<< "Invalid 'RangeFilter:scale-mode': expected "
@@ -164,9 +186,9 @@ int Dpf::init([[maybe_unused]] IPAContext &context,
const YamlObject &fSObject = tuningData["FilterStrength"];
- strengthConfig_.r = fSObject["r"].get<uint16_t>(64);
- strengthConfig_.g = fSObject["g"].get<uint16_t>(64);
- strengthConfig_.b = fSObject["b"].get<uint16_t>(64);
+ strengthConfig.r = fSObject["r"].get<uint8_t>().value_or(64);
+ strengthConfig.g = fSObject["g"].get<uint8_t>().value_or(64);
+ strengthConfig.b = fSObject["b"].get<uint8_t>().value_or(64);
return 0;
}
@@ -30,6 +30,11 @@ public:
RkISP1Params *params) override;
private:
+ int parseConfig(const YamlObject &tuningData);
+ int parseSingleConfig(const YamlObject &tuningData,
+ rkisp1_cif_isp_dpf_config &config,
+ rkisp1_cif_isp_dpf_strength_config &strengthConfig);
+
struct rkisp1_cif_isp_dpf_config config_;
struct rkisp1_cif_isp_dpf_strength_config strengthConfig_;
};
Split DPF configuration parsing and initialization into clearer, self-contained helpers and modernized initialization patterns. Introduce parseSingleConfig() as DPF tuning file parser helper make future extensions and maintenance easier. Change strengthconfig.r/g/b parser from uint16 to uint8 to match rkisp1_cif_isp_dpf_strength_config defination. Signed-off-by: Rui Wang <rui.wang@ideasonboard.com> --- changelog: - propagates specific integer error codes (e.g. -EINVAL) from parseConfig and parseSingleConfig instead of returning boolean false values, improving error reporting. - format the code : Unbraced if (single-statement if) src/ipa/rkisp1/algorithms/dpf.cpp | 52 ++++++++++++++++++++++--------- src/ipa/rkisp1/algorithms/dpf.h | 5 +++ 2 files changed, 42 insertions(+), 15 deletions(-)