[libcamera-devel] [PATCH] ipa: rpi: agc: Do not switch to a default if a mode is unavailable

David Plowman david.plowman at raspberrypi.com
Mon Jun 12 15:37:40 CEST 2023


Hi Naush

Thanks for the patch!

On Mon, 12 Jun 2023 at 14:30, Naushir Patuck <naush at raspberrypi.com> wrote:
>
> In commit 0ee9339331c6, a default metering/exposure/constraint mode is
> used if a control sets a mode that is not listed in the camera tuning
> file.
>
> Setting a default mode may be undesirable in these cases, so instead
> keep the agc mode unchanged. This also matches the behaviour for other
> IPA controls where no changes are made in error conditions.
>
> Fixes: 0ee9339331c6 ("ipa: rpi: agc: Gracefully handle missing agc modes")
> Signed-off-by: Naushir Patuck <naush at raspberrypi.com>

It's only a marginal thing but yes, I think I prefer this version!

Reviewed-by: David Plowman <david.plowman at raspberrypi.com>

Thanks!
David

> ---
>  src/ipa/rpi/controller/rpi/agc.cpp | 27 ++++++++++-----------------
>  1 file changed, 10 insertions(+), 17 deletions(-)
>
> diff --git a/src/ipa/rpi/controller/rpi/agc.cpp b/src/ipa/rpi/controller/rpi/agc.cpp
> index e60ca33f867b..ae9ff219fa03 100644
> --- a/src/ipa/rpi/controller/rpi/agc.cpp
> +++ b/src/ipa/rpi/controller/rpi/agc.cpp
> @@ -541,39 +541,32 @@ void Agc::housekeepConfig()
>         if (meteringModeName_ != status_.meteringMode) {
>                 auto it = config_.meteringModes.find(meteringModeName_);
>                 if (it == config_.meteringModes.end()) {
> -                       LOG(RPiAgc, Warning) << "No metering mode " << meteringModeName_
> -                                            << ", defaulting to " << config_.defaultMeteringMode;
> -                       meteringModeName_ = config_.defaultMeteringMode;
> -                       meteringMode_ = &config_.meteringModes[meteringModeName_];
> +                       LOG(RPiAgc, Warning) << "No metering mode " << meteringModeName_;
> +                       meteringModeName_ = status_.meteringMode;
>                 } else {
>                         meteringMode_ = &it->second;
> +                       status_.meteringMode = meteringModeName_;
>                 }
> -               status_.meteringMode = meteringModeName_;
>         }
>         if (exposureModeName_ != status_.exposureMode) {
>                 auto it = config_.exposureModes.find(exposureModeName_);
>                 if (it == config_.exposureModes.end()) {
> -                       LOG(RPiAgc, Warning) << "No exposure profile " << exposureModeName_
> -                                            << ", defaulting to " << config_.defaultExposureMode;
> -                       exposureModeName_ = config_.defaultExposureMode;
> -                       exposureMode_ = &config_.exposureModes[exposureModeName_];
> +                       LOG(RPiAgc, Warning) << "No exposure profile " << exposureModeName_;
> +                       exposureModeName_ = status_.exposureMode;
>                 } else {
>                         exposureMode_ = &it->second;
> +                       status_.exposureMode = exposureModeName_;
>                 }
> -               status_.exposureMode = exposureModeName_;
>         }
>         if (constraintModeName_ != status_.constraintMode) {
> -               auto it =
> -                       config_.constraintModes.find(constraintModeName_);
> +               auto it = config_.constraintModes.find(constraintModeName_);
>                 if (it == config_.constraintModes.end()) {
> -                       LOG(RPiAgc, Warning) << "No constraint list " << constraintModeName_
> -                                            << ", defaulting to " << config_.defaultConstraintMode;
> -                       constraintModeName_ = config_.defaultConstraintMode;
> -                       constraintMode_ = &config_.constraintModes[constraintModeName_];
> +                       LOG(RPiAgc, Warning) << "No constraint list " << constraintModeName_;
> +                       constraintModeName_ = status_.constraintMode;
>                 } else {
>                         constraintMode_ = &it->second;
> +                       status_.constraintMode = constraintModeName_;
>                 }
> -               status_.constraintMode = constraintModeName_;
>         }
>         LOG(RPiAgc, Debug) << "exposureMode "
>                            << exposureModeName_ << " constraintMode "
> --
> 2.34.1
>


More information about the libcamera-devel mailing list