[PATCH v7 09/12] controls: Redefine AeEnable
Stefan Klug
stefan.klug at ideasonboard.com
Mon Jan 13 11:49:33 CET 2025
Hi Paul,
Thank you for the patch.
On Fri, Jan 10, 2025 at 05:57:34PM -0600, Paul Elder wrote:
> In the redesign of the AE-related controls, the AeEnable control was
> intended to be removed in favor of more specific sub-controls for
> analogue gain and exposure time. However this will cause problems if
> aperture sub-controls are introduced, and an application from a
> pre-aperture era uses a camera that supports aperture.
>
> If there is no AeEnable control, then a pre-aperture era application
> might set analogue gain and exposure time to manual, while aperture
> silently stays auto since that's the default mode. Thus aperture would
> be uncontrollable by the application.
>
> With an AeEnable control, then a pre-aperture era application can set
> AeEnable to manual, and under the hood all three of analogue gain and
> exposure time and aperture will be set to manual. The application won't
> be able to set the manual aperture, however.
>
> Although the above scenario is expected to be rare, the scenario with an
> AeEnable control seems less detrimental. With an AeEnable control at
> least the aperture would be static at a reasonably usable value, whereas
> without an AeEnable the aperture would be more-or-less uncontrolable and
> could go to extreme values as the AEGC algorithm tries to compensate for
> the manual analogue gain and exposure time values.
>
> Thus we redefine the AeEnable control, available only as a control and
> not in metadata. It will be preprocessed by the Camera class so that the
> relevant sub-controls are set. No pipline handler nor IPA shall act on
> the AeEnable control. The IPA still has to report the control as
> available, however.
>
> Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
> Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Excited to see, how that feels in the implementation...
Reviewed-by: Stefan Klug <stefan.klug at ideasonboard.com>
Cheers,
Stefan
>
> ---
> Changes in v7:
> - fix wording
>
> New in v6
> ---
> Documentation/design/ae.rst | 23 +++++++++++++++++------
> src/libcamera/control_ids_core.yaml | 12 +++++++++---
> 2 files changed, 26 insertions(+), 9 deletions(-)
>
> diff --git a/Documentation/design/ae.rst b/Documentation/design/ae.rst
> index 9d5bb5078..df9b1fa76 100644
> --- a/Documentation/design/ae.rst
> +++ b/Documentation/design/ae.rst
> @@ -185,6 +185,10 @@ A diagram of our solution:
> 0: Auto
> 1: Manual
>
> + AeEnable
> + - True -> ExposureTimeMode:Auto + AnalogueGainMode:Auto
> + - False -> ExposureTimeMode:Manual + AnalogueGainMode:Manual
> +
>
> The diagram is divided in four sections horizontally:
>
> @@ -225,10 +229,14 @@ This simulates an auto -> locked -> manual or auto -> manual state transition,
> and makes it impossible to do the nonsensical manual -> locked state
> transition.
>
> -We specifically do not have a "master AE control" like the old AeEnable. This
> -is because we have the individual mode controls, and if we had a master AE
> -control it would be a "control that sets other controls", which could easily
> -get out of control.
> +AeEnable still exists to allow applications to set the mode of all the
> +sub-controls at once. Besides being for convenience, this will also be useful
> +when we eventually implement an aperture control. This is because applications
> +that will be made before aperture will have been available would still be able
> +to set aperture mode to auto or manual, as opposed to having the aperture stuck
> +at auto while the application really wanted manual. Although the aperture would
> +still be stuck at an uncontrollable value, at least it would be at a static
> +usable value as opposed to varying via the AEGC algorithm.
>
> With this solution, the earlier example would become:
>
> @@ -277,9 +285,12 @@ and gain:
>
> - AeState
>
> +- AeEnable
> +
> Auto-exposure and auto-gain can be enabled and disabled separately using the
> -ExposureTimeMode and AnalogueGainMode controls respectively. There is no
> -overarching AeEnable control.
> +ExposureTimeMode and AnalogueGainMode controls respectively. The AeEnable
> +control can also be used, as it sets both of the modes simultaneously. The
> +AeEnable control is not returned in metadata.
>
> When the respective mode is set to auto, the respective value that is computed
> by the AEGC algorithm is applied to the image sensor. Any value that is
> diff --git a/src/libcamera/control_ids_core.yaml b/src/libcamera/control_ids_core.yaml
> index d88c1852e..aa7448645 100644
> --- a/src/libcamera/control_ids_core.yaml
> +++ b/src/libcamera/control_ids_core.yaml
> @@ -10,11 +10,17 @@ vendor: libcamera
> controls:
> - AeEnable:
> type: bool
> - direction: inout
> + direction: in
> description: |
> - Enable or disable the AE.
> + Enable or disable the AEGC algorithm. When this control is set to true,
> + both ExposureTimeMode and AnalogueGainMode are set to auto, and if this
> + control is set to false then both are set to manual.
> +
> + If ExposureTimeMode or AnalogueGainMode are also set in the same
> + request as AeEnable, then the modes supplied by ExposureTimeMode or
> + AnalogueGainMode will take precedence.
>
> - \sa ExposureTime AnalogueGain
> + \sa ExposureTimeMode AnalogueGainMode
>
> - AeState:
> type: int32_t
> --
> 2.39.2
>
More information about the libcamera-devel
mailing list