[libcamera-devel] [PATCH 07/18] ipa: ipu3: tonemapping: Generate the LUT only on gamma change

Jean-Michel Hautbois jeanmichel.hautbois at ideasonboard.com
Thu Sep 30 11:55:02 CEST 2021


The Tonemapping algorithm calculates the gamma curve for every frame,
regardless of whether the gamma value has changed or not. This issue is
exasperated as we currently hardcode the gamma to a single value.

Optimise the implementation to only recalculate the look up table when
the gamma setting is changed, and store the gamma setting of the LUT
curve as part of the IPA context.

Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois at ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
---
 src/ipa/ipu3/algorithms/tone_mapping.cpp | 5 +++++
 src/ipa/ipu3/ipa_context.h               | 1 +
 src/ipa/ipu3/ipu3.cpp                    | 3 +++
 3 files changed, 9 insertions(+)

diff --git a/src/ipa/ipu3/algorithms/tone_mapping.cpp b/src/ipa/ipu3/algorithms/tone_mapping.cpp
index 3af96261..40337f9d 100644
--- a/src/ipa/ipu3/algorithms/tone_mapping.cpp
+++ b/src/ipa/ipu3/algorithms/tone_mapping.cpp
@@ -43,6 +43,9 @@ void ToneMapping::process([[maybe_unused]] IPAContext &context,
 	 */
 	gamma_ = 1.1;
 
+	if (context.frameContext.toneMapping.gamma == gamma_)
+		return;
+
 	struct ipu3_uapi_gamma_corr_lut &lut =
 		context.frameContext.toneMapping.gammaCorrection;
 
@@ -53,6 +56,8 @@ void ToneMapping::process([[maybe_unused]] IPAContext &context,
 		/* The output value is expressed on 13 bits. */
 		lut.lut[i] = gamma * 8191;
 	}
+
+	context.frameContext.toneMapping.gamma = gamma_;
 }
 
 } /* namespace ipa::ipu3::algorithms */
diff --git a/src/ipa/ipu3/ipa_context.h b/src/ipa/ipu3/ipa_context.h
index 5bab684c..e50de726 100644
--- a/src/ipa/ipu3/ipa_context.h
+++ b/src/ipa/ipu3/ipa_context.h
@@ -39,6 +39,7 @@ struct IPAFrameContext {
 	} awb;
 
 	struct {
+		double gamma;
 		struct ipu3_uapi_gamma_corr_lut gammaCorrection;
 	} toneMapping;
 };
diff --git a/src/ipa/ipu3/ipu3.cpp b/src/ipa/ipu3/ipu3.cpp
index a27f5e98..9867c993 100644
--- a/src/ipa/ipu3/ipu3.cpp
+++ b/src/ipa/ipu3/ipu3.cpp
@@ -131,6 +131,9 @@
  * \struct IPAFrameContext::toneMapping
  * \brief Context for ToneMapping and Gamma control
  *
+ * \var IPAFrameContext::toneMapping::gamma
+ * \brief Gamma value for the LUT
+ *
  * \var IPAFrameContext::toneMapping::gammaCorrection
  * \brief Per-pixel tone mapping implemented as a LUT
  *
-- 
2.30.2



More information about the libcamera-devel mailing list