[libcamera-devel] [PATCH v2] ipa: raspberrypi: awb: Better handling of how we disable AWB

Laurent Pinchart laurent.pinchart at ideasonboard.com
Tue Feb 8 11:42:50 CET 2022


Hi David,

Thank you for the patch.

On Tue, Feb 08, 2022 at 10:04:36AM +0000, David Plowman wrote:
> We now handle disabling ("pausing") AWB in the same way as
> AEC/AGC. Instead of letting the pause flag be set so that the code
> never runs at all, we instead fix the manual settings to the current
> values (but continue to be called).
> 
> The algorithm does not restart any calculations in this state, but
> continues to add AWB metadata to every frame. Therefore certain other
> algorithms that want to know it (CCM and ALSC, for example) can still
> find it.
> 
> Signed-off-by: David Plowman <david.plowman at raspberrypi.com>
> Reviewed-by: Naushir Patuck <naush at raspberrypi.com>

Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>

> ---
>  src/ipa/raspberrypi/controller/rpi/awb.cpp | 20 ++++++++++++++++++++
>  src/ipa/raspberrypi/controller/rpi/awb.hpp |  4 ++++
>  2 files changed, 24 insertions(+)
> 
> diff --git a/src/ipa/raspberrypi/controller/rpi/awb.cpp b/src/ipa/raspberrypi/controller/rpi/awb.cpp
> index 5cfd33a3..d4c93447 100644
> --- a/src/ipa/raspberrypi/controller/rpi/awb.cpp
> +++ b/src/ipa/raspberrypi/controller/rpi/awb.cpp
> @@ -172,6 +172,26 @@ void Awb::Initialise()
>  	async_results_ = sync_results_;
>  }
>  
> +bool Awb::IsPaused() const
> +{
> +	return false;
> +}
> +
> +void Awb::Pause()
> +{
> +	// "Pause" by fixing everything to the most recent values.
> +	manual_r_ = sync_results_.gain_r = prev_sync_results_.gain_r;
> +	manual_b_ = sync_results_.gain_b = prev_sync_results_.gain_b;
> +	sync_results_.gain_g = prev_sync_results_.gain_g;
> +	sync_results_.temperature_K = prev_sync_results_.temperature_K;
> +}
> +
> +void Awb::Resume()
> +{
> +	manual_r_ = 0.0;
> +	manual_b_ = 0.0;
> +}
> +
>  unsigned int Awb::GetConvergenceFrames() const
>  {
>  	// If not in auto mode, there is no convergence
> diff --git a/src/ipa/raspberrypi/controller/rpi/awb.hpp b/src/ipa/raspberrypi/controller/rpi/awb.hpp
> index 8af1f27c..ac3dca6f 100644
> --- a/src/ipa/raspberrypi/controller/rpi/awb.hpp
> +++ b/src/ipa/raspberrypi/controller/rpi/awb.hpp
> @@ -83,6 +83,10 @@ public:
>  	char const *Name() const override;
>  	void Initialise() override;
>  	void Read(boost::property_tree::ptree const &params) override;
> +	// AWB handles "pausing" for itself.
> +	bool IsPaused() const override;
> +	void Pause() override;
> +	void Resume() override;
>  	unsigned int GetConvergenceFrames() const override;
>  	void SetMode(std::string const &name) override;
>  	void SetManualGains(double manual_r, double manual_b) override;

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list