[libcamera-devel] [RFC PATCH 04/14] controls: Replace AwbEnable with AwbMode
Naushir Patuck
naush at raspberrypi.com
Fri Jun 18 14:23:03 CEST 2021
Hi Paul,
Thank you for your patch.
On Fri, 18 Jun 2021 at 11:34, Paul Elder <paul.elder at ideasonboard.com>
wrote:
> Previously it was possible to have AwbEnable set to false, yet have
> AwbMode on anything. This caused a confusion situation, so merge the two
> into AwbMode. While at it, pull in the android AWB modes.
>
> Adjust the previous users of AwbEnable accordingly.
>
> Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
> ---
> include/libcamera/ipa/raspberrypi.h | 1 -
> src/ipa/raspberrypi/raspberrypi.cpp | 27 ++++++++----------------
> src/libcamera/control_ids.yaml | 32 +++++++++++++++--------------
> test/controls/control_list.cpp | 6 +++---
> 4 files changed, 29 insertions(+), 37 deletions(-)
>
> diff --git a/include/libcamera/ipa/raspberrypi.h
> b/include/libcamera/ipa/raspberrypi.h
> index a8790000..63392a26 100644
> --- a/include/libcamera/ipa/raspberrypi.h
> +++ b/include/libcamera/ipa/raspberrypi.h
> @@ -35,7 +35,6 @@ static const ControlInfoMap Controls = {
> { &controls::AeConstraintMode,
> ControlInfo(controls::AeConstraintModeValues) },
> { &controls::AeExposureMode,
> ControlInfo(controls::AeExposureModeValues) },
> { &controls::ExposureValue, ControlInfo(0.0f, 16.0f) },
> - { &controls::AwbEnable, ControlInfo(false, true) },
> { &controls::ColourGains, ControlInfo(0.0f, 32.0f) },
> { &controls::AwbMode, ControlInfo(controls::AwbModeValues) },
> { &controls::Brightness, ControlInfo(-1.0f, 1.0f) },
> diff --git a/src/ipa/raspberrypi/raspberrypi.cpp
> b/src/ipa/raspberrypi/raspberrypi.cpp
> index ad0132c0..ed5f1250 100644
> --- a/src/ipa/raspberrypi/raspberrypi.cpp
> +++ b/src/ipa/raspberrypi/raspberrypi.cpp
> @@ -745,24 +745,6 @@ void IPARPi::queueRequest(const ControlList &controls)
> break;
> }
>
> - case controls::AWB_ENABLE: {
> - RPiController::Algorithm *awb =
> controller_.GetAlgorithm("awb");
> - if (!awb) {
> - LOG(IPARPI, Warning)
> - << "Could not set AWB_ENABLE - no
> AWB algorithm";
> - break;
> - }
> -
> - if (ctrl.second.get<bool>() == false)
> - awb->Pause();
> - else
> - awb->Resume();
> -
> - libcameraMetadata_.set(controls::AwbEnable,
> - ctrl.second.get<bool>());
> - break;
> - }
> -
> case controls::AWB_MODE: {
> RPiController::AwbAlgorithm *awb =
> dynamic_cast<RPiController::AwbAlgorithm *>(
> controller_.GetAlgorithm("awb"));
> @@ -773,6 +755,15 @@ void IPARPi::queueRequest(const ControlList &controls)
> }
>
> int32_t idx = ctrl.second.get<int32_t>();
> +
> + if (idx == controls::AwbOff) {
> + awb->Pause();
> + break;
> + }
> +
> + if (idx == controls::AwbAuto)
> + awb->Resume();
>
I think the logic here may need adjusting such that any state that is not
controls::AwbOff will need to call awb->Resume(), or conditionally call
resume if adb->IsPaused() returns true.
Thanks,
Naush
> if (AwbModeTable.count(idx)) {
> awb->SetMode(AwbModeTable.at(idx));
> libcameraMetadata_.set(controls::AwbMode,
> idx);
> diff --git a/src/libcamera/control_ids.yaml
> b/src/libcamera/control_ids.yaml
> index 5717bc1f..2e62f61b 100644
> --- a/src/libcamera/control_ids.yaml
> +++ b/src/libcamera/control_ids.yaml
> @@ -229,13 +229,6 @@ controls:
> Report an estimate of the current illuminance level in lux. The
> Lux
> control can only be returned in metadata.
>
> - - AwbEnable:
> - type: bool
> - description: |
> - Enable or disable the AWB.
> -
> - \sa ColourGains
> -
> # AwbMode needs further attention:
> # - Auto-generate max enum value.
> # - Better handling of custom types.
> @@ -245,29 +238,38 @@ controls:
> Specify the range of illuminants to use for the AWB algorithm.
> The modes
> supported are platform specific, and not all modes may be
> supported.
> enum:
> - - name: AwbAuto
> + - name: AwbOff
> value: 0
> + description: The AWB routune is disabled.
> + - name: AwbAuto
> + value: 1
> description: Search over the whole colour temperature range.
> - name: AwbIncandescent
> - value: 1
> - description: Incandescent AWB lamp mode.
> - - name: AwbTungsten
> value: 2
> - description: Tungsten AWB lamp mode.
> + description: Incandescent AWB lamp mode.
> - name: AwbFluorescent
> value: 3
> description: Fluorescent AWB lamp mode.
> - - name: AwbIndoor
> + - name: AwbWarmFluorescent
> value: 4
> - description: Indoor AWB lighting mode.
> + description: Warm fluorescent AWB lamp mode.
> - name: AwbDaylight
> value: 5
> description: Daylight AWB lighting mode.
> - name: AwbCloudy
> value: 6
> description: Cloudy AWB lighting mode.
> - - name: AwbCustom
> + - name: AwbTwilight
> value: 7
> + description: Twilight AWB lamp mode.
> + - name: AwbTungsten
> + value: 8
> + description: Tungsten AWB lamp mode.
> + - name: AwbIndoor
> + value: 9
> + description: Indoor AWB lighting mode.
> + - name: AwbCustom
> + value: 10
> description: Custom AWB mode.
>
> - AwbLocked:
> diff --git a/test/controls/control_list.cpp
> b/test/controls/control_list.cpp
> index 70cf61b8..ce55d09b 100644
> --- a/test/controls/control_list.cpp
> +++ b/test/controls/control_list.cpp
> @@ -143,10 +143,10 @@ protected:
> * Attempt to set an invalid control and verify that the
> * operation failed.
> */
> - list.set(controls::AwbEnable, true);
> + list.set(controls::AwbMode, true);
>
> - if (list.contains(controls::AwbEnable)) {
> - cout << "List shouldn't contain AwbEnable control"
> << endl;
> + if (list.contains(controls::AwbMode)) {
> + cout << "List shouldn't contain AwbMode control"
> << endl;
> return TestFail;
> }
>
> --
> 2.27.0
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20210618/9feca279/attachment.htm>
More information about the libcamera-devel
mailing list