[libcamera-devel] [PATCH 4/9] fixup: Expand AeState documentation

Jacopo Mondi jacopo at jmondi.org
Thu Aug 11 09:39:23 CEST 2022


Hi Paul

On Thu, Aug 04, 2022 at 12:04:10AM +0900, paul.elder at ideasonboard.com wrote:
> Hi Jacopo,
>
> On Fri, Jul 01, 2022 at 05:46:56PM +0200, Jacopo Mondi wrote:
> > The AeState control is tricky, it describes the state of the whole AEGC
> > block which is independently controlled by ExposureTimeMode and
> > AnalogueGainMode.
> >
> > Try to expand the documentation.
> >
> > Use "AEGC" when referring to the algorithm.
> >
> > Maybe the control should be named AEGCState ?
>
> It's uuuugly.
>

It is !

> But also maybe more correct. idk I'm neutral maybe people that have a
> bigger preference can do the bikeshedding :)
>

Let's see if we get more comments, I'll keep it as it is for now

> >
> > Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> > ---
> >  src/libcamera/control_ids.yaml | 64 ++++++++++++++++++++++++----------
> >  1 file changed, 46 insertions(+), 18 deletions(-)
> >
> > diff --git a/src/libcamera/control_ids.yaml b/src/libcamera/control_ids.yaml
> > index bb5eeb1507a9..d50df8bcad28 100644
> > --- a/src/libcamera/control_ids.yaml
> > +++ b/src/libcamera/control_ids.yaml
> > @@ -10,43 +10,71 @@ controls:
> >    - AeState:
> >        type: int32_t
> >        description: |
> > -        Control to report the AE algorithm state associated with the capture
> > -        result.
> > +        Control to report the AEGC algorithm state.
> >
> > -        The state is still reported even if ExposureTimeMode or
> > -        AnalogueGainMode is set to Manual.
> > +        The AEGC algorithm computes the exposure time and the analogue gain
> > +        values to be applied to the image sensor.
> > +
> > +        The AEGC algorithm behaviour is controlled by the ExposureTimeMode and
> > +        AnalogueGainMode controls, which allow applications to decide how
> > +        the exposure time and gain are computed, in Auto or Manual mode,
> > +        independently one from the other.
>
> s/one from the other/from one another/
>

Thanks :)

> > +
> > +        The AeState control reports the AEGC algorithm state through a single
> > +        value and describes it a single computation block which computes
>
> s/it //
>

I actually meant "describes it as a single computation block"

Do you think it's correct ?

> > +        both the exposure time and the analogue gain values.
> > +
> > +        When both the exposure time and analogue gain values are configured to
> > +        be in Manual mode, the AEGC algorithm is quiescent and does not actively
> > +        compute any value and the AeState control will report AeStateIdle.
> > +
> > +        When at least the exposure time or analogue gain are configured to be
> > +        computed by the AEGC algorithm, the AeState control will report if the
> > +        algorithm has converged to stable values for any of the controls set
>
> I would've s/any/all/, but now I'm wondering if it's even possible for
> AEGC with both E and G set to auto to have only one converged but not
> the other.

Good question

>
> Although maybe s/any/all/ is proper, because this is *one* state to
> describe *all* of AEGC, so I think if at least one is still converging
> it should be converging, and only if both are converged then it should
> be converged. Even if it's not really possible, that's probably the more
> correct description.
>

I think s/any/all as you suggested helps clarify it

> > +        to be computed in Auto mode.
> >
> > -        \sa AnalogueGain
> >          \sa AnalogueGainMode
> > -        \sa ExposureTime
> >          \sa ExposureTimeMode
> >
> >        enum:
> >          - name: AeStateIdle
> >            value: 0
> >            description: |
> > -            The AE algorithm is inactive.
> > +            The AEGC algorithm is inactive.
> > +
> > +            This state is returned when both AnalogueGainMode and
> > +            ExposureTimeMode are set to Manual and the algorithm is not
> > +            actively computing any value.
>
> Do we need to explicitly state an exception for if only one is
> manual-able?  Although due to the constraints that we've defined, if
> only one is manual-able then both are auto-able. So maybe it's implicit?
>

If I got your question right you suggest that only one might be
manual-able and the other is auto-only, hence the state will never be
reported as idle ?

Isn't this desired ? The AeState control will report the state of the
auto control, either if it is searching or it has converged, while the
other will be operated in manual mode.

I might have missed what constraints you are referring to here.

> >
> > -            This state should be returned if both AnalogueGainMode and
> > -            ExposureTimeMode are set to manual (or one, if the camera only
> > -            supports one of the two controls).
> > +            When ExposureTimeMode or AnalogueGainMode are set to Auto mode, the
> > +            AEGC algorithm might spontaneously initiate a new scan, in which
> > +            case the AeState control is moved to AeStateSearching.
> >          - name: AeStateSearching
> >            value: 1
> >            description: |
> > -            The AE algorithm has not converged yet.
> > +            The AEGC algorithm is actively computing new values, for either the
> > +            exposure time or the analogue gain, but has not converged to a
> > +            stable result yet.
> > +
> > +            This state is returned if at least one of AnalogueGainMode
> > +            or ExposureTimeMode is set to auto and the algorithm hasn't
> > +            converged yet.
> >
> > -            This state should be returned if at least one of AnalogueGainMode
> > -            or ExposureTimeMode is set to auto, and the AE algorithm hasn't
> > -            converged yet. If the AE algorithm converges, the state shall go to
> > -            AeStateConverged.
> > +            The AEGC algorithm converges once stable values are computed for
> > +            any of the controls set to be computed in Auto mode.
> > +
> > +            Once the algorithm converges the state is moved to AeStateConverged.
> >          - name: AeStateConverged
> >            value: 2
> >            description: |
> >              The AE algorithm has converged.
>
> s/AE/AEGC/?
>

Thanks!

>
> Otherwise looks good.
>
>
> Thanks,
>
> Paul
>
>
> >
> > -            This state should be returned if at least one of AnalogueGainMode
> > -            or ExposureTimeMode is set to auto, and the AE algorithm has
> > -            converged.
> > +            This state is returned if at least one of AnalogueGainMode
> > +            or ExposureTimeMode is set to Auto, and the AEGC algorithm has
> > +            converged to stable value.
> > +
> > +            The AEGC algorithm might spontaneously re-initiate an AE scan, in
> > +            which case the state is moved to AeStateSearching.
> >
> >    # AeMeteringMode needs further attention:
> >    # - Auto-generate max enum value.
> > --
> > 2.36.1
> >


More information about the libcamera-devel mailing list