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

Naushir Patuck naush at raspberrypi.com
Tue Feb 8 09:23:42 CET 2022


Hi David,

Thank you for your patch.

On Fri, 4 Feb 2022 at 09:25, David Plowman <david.plowman at raspberrypi.com>
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>
> ---
>  src/ipa/raspberrypi/controller/rpi/awb.cpp | 21 +++++++++++++++++++++
>  src/ipa/raspberrypi/controller/rpi/awb.hpp |  4 ++++
>  2 files changed, 25 insertions(+)
>
> diff --git a/src/ipa/raspberrypi/controller/rpi/awb.cpp
> b/src/ipa/raspberrypi/controller/rpi/awb.cpp
> index 5cfd33a3..1ad912c7 100644
> --- a/src/ipa/raspberrypi/controller/rpi/awb.cpp
> +++ b/src/ipa/raspberrypi/controller/rpi/awb.cpp
> @@ -172,6 +172,27 @@ 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_.gain_g = prev_sync_results_.gain_g;
>

Duplicate line.  Apart from that:

Reviewed-by: Naushir Patuck <naush at raspberrypi.com>



> +       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;
> --
> 2.30.2
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20220208/6dbf8d7d/attachment.htm>


More information about the libcamera-devel mailing list