[libcamera-devel] [PATCH 1/1] libcamera: controls: Change LensPosition units to dioptres

David Plowman david.plowman at raspberrypi.com
Thu Nov 17 17:11:38 CET 2022


Hi Kieran

On Thu, 17 Nov 2022 at 16:04, Kieran Bingham
<kieran.bingham at ideasonboard.com> wrote:
>
> Hi David,
>
> Quoting David Plowman via libcamera-devel (2022-11-17 15:45:00)
> > The units for the LensPosition control, previously defined as being in
> > units of 1 / hyperfocal_distance, are changed to 1 / distance (in
> > metres).
> >
> > Signed-off-by: David Plowman <david.plowman at raspberrypi.com>
> > ---
> >  src/libcamera/control_ids.yaml | 26 ++++++++++++++------------
> >  1 file changed, 14 insertions(+), 12 deletions(-)
> >
> > diff --git a/src/libcamera/control_ids.yaml b/src/libcamera/control_ids.yaml
> > index a456e6c0..adea5f90 100644
> > --- a/src/libcamera/control_ids.yaml
> > +++ b/src/libcamera/control_ids.yaml
> > @@ -591,25 +591,27 @@ controls:
> >          AfModeManual, though the value is reported back unconditionally in all
> >          modes.
> >
> > -        The units are a reciprocal distance scale like dioptres but normalised
> > -        for the hyperfocal distance. That is, for a lens with hyperfocal
> > -        distance H, and setting it to a focal distance D, the lens position LP,
> > -        which is generally a non-integer, is given by
> > +        This value, which is generally a non-integer, is the reciprocal of the
> > +        focal distance in metres, also known as dioptres. That is, to set a
> > +        focal distance D, the lens position LP is given by
> >
> > -        \f$LP = \frac{H}{D}\f$
> > +        \f$LP = \frac{1\mathrm{m}}{D}\f$
> >
> >          For example:
> >
> >          0 moves the lens to infinity.
> > -        0.5 moves the lens to twice the hyperfocal distance.
> > -        1 moves the lens to the hyperfocal position.
> > -        And larger values will focus the lens ever closer.
> > +        0.5 moves the lens to focus on objects 2m away.
> > +        2 moves the lens to focus on objects 50cm away.
> > +        And larger values will focus the lens closer.
> >
> > -        \todo Define a property to report the Hyperforcal distance of calibrated
> > -        lenses.
> > +        The default value of the control should indicate a good general position
> > +        for the lens, often corresponding to the hyperfocal distance (the
> > +        closest position for which objects at infinity are still acceptably
> > +        sharp). The minimum will often be zero (meaning infinity), and the
> > +        maximum value defines the closest focus position.
> >
> > -        \todo Define a property to report the maximum and minimum positions of
> > -        this lens. The minimum value will often be zero (meaning infinity).
> > +        \todo Define a property to report the Hyperfocal distance of calibrated
> > +        lenses.
>
> Is this going to be a separate property, or the 'default' value of the
> control?

We're thinking we're going to use the default value of the control.

Actually I think there is still a point to a "hyperfocal" property,
because it's not guaranteed that the "default" position is the
hyperfocal one. But in our applications, I think we're taking the view
that we will always use this "default" position. Nearly always it will
be hyperfocal, and if not, it will be because we want to put the lens
somewhere else.

>
> In the cover letter you mentioned "we've resolved that we will be
> able to read a good default position from the control info."
>
> Presumably, that means that when lacking other information, '1' is a
> good default value?

Lacking other information, numbers around 1 are probably not a bad
guess for many of our small modules.

David

>
>
> >
> >    - AfState:
> >        type: int32_t
> > --
> > 2.30.2
> >


More information about the libcamera-devel mailing list