[libcamera-devel] [PATCH 17/20] ipa: rpi: contrast: Allow adaptive contrast enhancement to be disabled

Jacopo Mondi jacopo.mondi at ideasonboard.com
Thu Oct 12 12:52:52 CEST 2023


Hi Naush

On Fri, Oct 06, 2023 at 02:19:57PM +0100, Naushir Patuck via libcamera-devel wrote:
> From: David Plowman <david.plowman at raspberrypi.com>
>
> The enableCe() function enables or disables adaptive contrast
> enhancement and the restoreCe() function sets it back to its normal
> state (which is what was read from the tuning file).
>
> In future, algorithms like HDR might want to take over tonemapping
> functions, so any dynamic behaviour here would upset them.
>
> Signed-off-by: David Plowman <david.plowman at raspberrypi.com>
> Reviewed-by: Naushir Patuck <naush at raspberrypi.com>

Reviewed-by: Jacopo Mondi <jacopo.mondi at ideasonboard.com>

Thanks
  j
> ---
>  src/ipa/rpi/controller/contrast_algorithm.h |  2 ++
>  src/ipa/rpi/controller/rpi/contrast.cpp     | 13 ++++++++++++-
>  src/ipa/rpi/controller/rpi/contrast.h       |  3 +++
>  3 files changed, 17 insertions(+), 1 deletion(-)
>
> diff --git a/src/ipa/rpi/controller/contrast_algorithm.h b/src/ipa/rpi/controller/contrast_algorithm.h
> index ce17a4f949b9..895b36b0a80f 100644
> --- a/src/ipa/rpi/controller/contrast_algorithm.h
> +++ b/src/ipa/rpi/controller/contrast_algorithm.h
> @@ -17,6 +17,8 @@ public:
>  	/* A contrast algorithm must provide the following: */
>  	virtual void setBrightness(double brightness) = 0;
>  	virtual void setContrast(double contrast) = 0;
> +	virtual void enableCe(bool enable) = 0;
> +	virtual void restoreCe() = 0;
>  };
>
>  } /* namespace RPiController */
> diff --git a/src/ipa/rpi/controller/rpi/contrast.cpp b/src/ipa/rpi/controller/rpi/contrast.cpp
> index bee1eadd3657..4e038a021d8a 100644
> --- a/src/ipa/rpi/controller/rpi/contrast.cpp
> +++ b/src/ipa/rpi/controller/rpi/contrast.cpp
> @@ -42,6 +42,7 @@ int Contrast::read(const libcamera::YamlObject &params)
>  {
>  	// enable adaptive enhancement by default
>  	config_.ceEnable = params["ce_enable"].get<int>(1);
> +	ceEnable_ = config_.ceEnable;
>  	// the point near the bottom of the histogram to move
>  	config_.loHistogram = params["lo_histogram"].get<double>(0.01);
>  	// where in the range to try and move it to
> @@ -65,6 +66,16 @@ void Contrast::setContrast(double contrast)
>  	contrast_ = contrast;
>  }
>
> +void Contrast::enableCe(bool enable)
> +{
> +	ceEnable_ = enable;
> +}
> +
> +void Contrast::restoreCe()
> +{
> +	ceEnable_ = config_.ceEnable;
> +}
> +
>  void Contrast::initialise()
>  {
>  	/*
> @@ -150,7 +161,7 @@ void Contrast::process(StatisticsPtr &stats,
>  	 * histogram down, and possibly push the end up.
>  	 */
>  	Pwl gammaCurve = config_.gammaCurve;
> -	if (config_.ceEnable) {
> +	if (ceEnable_) {
>  		if (config_.loMax != 0 || config_.hiMax != 0)
>  			gammaCurve = computeStretchCurve(histogram, config_).compose(gammaCurve);
>  		/*
> diff --git a/src/ipa/rpi/controller/rpi/contrast.h b/src/ipa/rpi/controller/rpi/contrast.h
> index 9c81277a0450..59aa70dceeb9 100644
> --- a/src/ipa/rpi/controller/rpi/contrast.h
> +++ b/src/ipa/rpi/controller/rpi/contrast.h
> @@ -37,6 +37,8 @@ public:
>  	int read(const libcamera::YamlObject &params) override;
>  	void setBrightness(double brightness) override;
>  	void setContrast(double contrast) override;
> +	void enableCe(bool enable) override;
> +	void restoreCe() override;
>  	void initialise() override;
>  	void prepare(Metadata *imageMetadata) override;
>  	void process(StatisticsPtr &stats, Metadata *imageMetadata) override;
> @@ -46,6 +48,7 @@ private:
>  	double brightness_;
>  	double contrast_;
>  	ContrastStatus status_;
> +	double ceEnable_;
>  };
>
>  } /* namespace RPiController */
> --
> 2.34.1
>


More information about the libcamera-devel mailing list