[libcamera-devel] [PATCH v3 08/19] ipa: ipu3: tonemapping: Generate the LUT only on gamma change
Kieran Bingham
kieran.bingham at ideasonboard.com
Mon Oct 25 23:29:19 CEST 2021
Quoting Jean-Michel Hautbois (2021-10-22 16:12:07)
> The Tone mapping 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>
Reviewed-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 847c03fe..e14bb561 100644
> --- a/src/ipa/ipu3/ipa_context.h
> +++ b/src/ipa/ipu3/ipa_context.h
> @@ -48,6 +48,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 cd27872b..f7632bc0 100644
> --- a/src/ipa/ipu3/ipu3.cpp
> +++ b/src/ipa/ipu3/ipu3.cpp
> @@ -151,6 +151,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.32.0
>
More information about the libcamera-devel
mailing list