[v1,03/16] ipa: rkisp1: algorithms: add Denoise state toggles
diff mbox series

Message ID 20251028170847.2673396-3-rui.wang@ideasonboard.com
State New
Headers show
Series
  • [v1,01/16] ipa: rkisp1: algorithms: add Denoise base class shell
Related show

Commit Message

Rui Wang Oct. 28, 2025, 5:08 p.m. UTC
Add state management helpers to DenoiseBaseAlgorithm:
- EnableState struct to track enable/disable state changes
- processEnableToggle() to detect state transitions
- Manual mode setters/getters (setManualMode, isManualMode)
- Developer mode setters/getters (setDevMode, isDevMode)
- Private member variables for mode tracking

These helpers provide shared state management for derived DPF and
Filter algorithms.

Signed-off-by: Rui Wang <rui.wang@ideasonboard.com>
---
 src/ipa/rkisp1/algorithms/denoise.h | 31 ++++++++++++++++++++---------
 1 file changed, 22 insertions(+), 9 deletions(-)

Patch
diff mbox series

diff --git a/src/ipa/rkisp1/algorithms/denoise.h b/src/ipa/rkisp1/algorithms/denoise.h
index d97301f0..f40e5aa1 100644
--- a/src/ipa/rkisp1/algorithms/denoise.h
+++ b/src/ipa/rkisp1/algorithms/denoise.h
@@ -15,27 +15,40 @@  namespace libcamera {
 
 namespace ipa::rkisp1::algorithms {
 
-/**
- * \class DenoiseBaseAlgorithm
- * \brief Base class for RkISP1 denoising algorithms
- *
- * This abstract base class provides common functionality for denoising algorithms
- * in the RkISP1 Image Processing Algorithm (IPA).
- *
- * Derived classes must implement algorithm-specific behavior.
- */
 class DenoiseBaseAlgorithm : public ipa::rkisp1::Algorithm
 {
 protected:
 	DenoiseBaseAlgorithm() = default;
 	~DenoiseBaseAlgorithm() = default;
+	struct EnableState {
+		bool enabled = true; /**< Current enable state */
+		bool lastEnabled = true; /**< Previous enable state for change detection */
+	};
+	bool processEnableToggle(bool value, EnableState &state);
+
+	void setManualMode(bool manual) { manualMode_ = manual; }
+
+	void setDevMode(bool dev) { devMode_ = dev; }
 
+	bool isManualMode() const { return manualMode_; }
+	bool isDevMode() const { return devMode_; }
 	unsigned computeIso(const IPAContext &context,
 			    const IPAFrameContext &frameContext) const;
 	template<typename LevelContainer>
 	int selectIsoBand(unsigned iso, const LevelContainer &levels) const;
+
+private:
+	bool manualMode_ = false; /**< Current manual/auto mode state */
+	bool devMode_ = false; /**< Developer mode state for advanced controls */
 };
 
+inline bool DenoiseBaseAlgorithm::processEnableToggle(bool value, EnableState &state)
+{
+	state.lastEnabled = state.enabled;
+	state.enabled = value;
+	return state.enabled != state.lastEnabled;
+}
+
 inline unsigned DenoiseBaseAlgorithm::computeIso(const IPAContext &context,
 						 const IPAFrameContext &frameContext) const
 {