[v2,5/7] ipa: rkisp1: filter: Parse tuning at init and active manual-mode
diff mbox series

Message ID 20260220221636.216353-6-rui.wang@ideasonboard.com
State New
Headers show
Series
  • ipa: rkisp1: make Filter tuning-driven and add manual controls
Related show

Commit Message

Rui Wang Feb. 20, 2026, 10:16 p.m. UTC
-Initialize Filter from tuning data in init() via parseConfig/registerControls.
 -Route manual mode requests through parseControls().
 -Clamp Sharpness using tuning-defined levels.
 -Skip sharpness table override in prepare() when NoiseReductionModeManual is active.

Signed-off-by: Rui Wang <rui.wang@ideasonboard.com>
---
 src/ipa/rkisp1/algorithms/filter.cpp | 40 +++++++++++++++++-----------
 1 file changed, 25 insertions(+), 15 deletions(-)

Patch
diff mbox series

diff --git a/src/ipa/rkisp1/algorithms/filter.cpp b/src/ipa/rkisp1/algorithms/filter.cpp
index 62d470f4..48831791 100644
--- a/src/ipa/rkisp1/algorithms/filter.cpp
+++ b/src/ipa/rkisp1/algorithms/filter.cpp
@@ -56,10 +56,13 @@  const std::unordered_set<std::string> kFilterKeyNames = {
  * \copydoc libcamera::ipa::Algorithm::init
  */
 int Filter::init(IPAContext &context,
-		 [[maybe_unused]] const YamlObject &tuningData)
+		 const YamlObject &tuningData)
 {
-	auto &cmap = context.ctrlMap;
-	cmap[&controls::Sharpness] = ControlInfo(0.0f, 10.0f, 1.0f);
+	int ret = parseConfig(tuningData);
+	if (ret)
+		return ret;
+
+	registerControls(context);
 
 	return 0;
 }
@@ -323,18 +326,6 @@  void Filter::queueRequest(IPAContext &context,
 	auto &filter = context.activeState.filter;
 	bool update = false;
 
-	const auto &sharpness = controls.get(controls::Sharpness);
-	if (sharpness) {
-		unsigned int value = std::round(std::clamp(*sharpness, 0.0f, 10.0f));
-
-		if (filter.sharpness != value) {
-			filter.sharpness = value;
-			update = true;
-		}
-
-		LOG(RkISP1Filter, Debug) << "Set sharpness to " << *sharpness;
-	}
-
 	const auto &denoise = controls.get(controls::draft::NoiseReductionMode);
 	if (denoise) {
 		LOG(RkISP1Filter, Debug) << "Set denoise to " << *denoise;
@@ -346,6 +337,22 @@  void Filter::queueRequest(IPAContext &context,
 		}
 	}
 
+	if (filter.denoise == controls::draft::NoiseReductionModeManual) {
+		update |= parseControls(controls);
+	} else {
+		const auto &sharpness = controls.get(controls::Sharpness);
+		if (sharpness) {
+			unsigned int value = std::round(std::clamp(*sharpness, 0.0f, static_cast<float>(sharpness_.size() - 1)));
+
+			if (filter.sharpness != value) {
+				filter.sharpness = value;
+				update = true;
+			}
+
+			LOG(RkISP1Filter, Debug) << "Set sharpness to " << *sharpness;
+		}
+	}
+
 	frameContext.filter.denoise = filter.denoise;
 	frameContext.filter.sharpness = filter.sharpness;
 	frameContext.filter.update = update;
@@ -399,6 +406,9 @@  void Filter::prepare([[maybe_unused]] IPAContext &context,
 		return;
 	}
 
+	if (denoise == controls::draft::NoiseReductionModeManual)
+		return;
+
 	/* sharpness override filter register .*/
 	const auto &sharp = sharpness_[sharpness];
 	config->fac_sh0 = sharp.at("fac_sh0");