[libcamera-devel] [PATCH 18/31] libcamera: controls: Add a 'size' yaml property

Laurent Pinchart laurent.pinchart at ideasonboard.com
Fri Mar 6 15:43:49 CET 2020


Hi Kieran,

On Thu, Mar 05, 2020 at 02:53:05PM +0000, Kieran Bingham wrote:
> On 29/02/2020 16:42, Laurent Pinchart wrote:
> > From: Jacopo Mondi <jacopo at jmondi.org>
> > 
> > Add a 'size' property to the control yaml description, to convey the
> > size constraints of array constrols. The semantics of the property
> 
> /constrols/controls/
> 
> > contents is currently unspecified, but its presence triggers the
> > generation of an array control (Control<Span<const T>>).
> > 
> > Example:
> > 
> >   - BayerGains:
> >       type: float
> >       description: Gains to apply to the four Bayer colour components for white balance
> >       size: [4]
> > 
> > Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> > Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> 
> Will we define dynamic sizes ? Or min/max options?

Both I believe :-) I can see use cases for [n], [3x3], [4x2xn] or [nxm].

> Presuming that this is 'just' for fixed size compound controls so far,
> and there will be more to come on this later:

The array control support implementation supports dynamic sizes. We'll
have to figure out how to express that properly in yaml, and what to do
with the information, but I don't expect it to affect the ControlValue
or ControlList classes. The information may be added to the Control
class to add dynamic validation (or just query) at some point.

> At some point we may want/need a schema and validator for this.

Yes :-)

> Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> 
> > ---
> >  src/libcamera/gen-controls.py | 14 ++++++++++++--
> >  1 file changed, 12 insertions(+), 2 deletions(-)
> > 
> > diff --git a/src/libcamera/gen-controls.py b/src/libcamera/gen-controls.py
> > index 6f020a327827..ff8bda6b16c1 100755
> > --- a/src/libcamera/gen-controls.py
> > +++ b/src/libcamera/gen-controls.py
> > @@ -42,9 +42,14 @@ ${description}
> >          name, ctrl = ctrl.popitem()
> >          id_name = snake_case(name).upper()
> >  
> > +        if ctrl.get('size'):
> > +            ctrl_type = 'Span<const %s>' % ctrl['type']
> > +        else:
> > +            ctrl_type = ctrl['type']
> > +
> >          info = {
> >              'name': name,
> > -            'type': ctrl['type'],
> > +            'type': ctrl_type,
> >              'description': format_description(ctrl['description']),
> >              'id_name': id_name,
> >          }
> > @@ -92,9 +97,14 @@ def generate_h(controls):
> >  
> >          ids.append('\t' + id_name + ' = ' + str(id_value) + ',')
> >  
> > +        if ctrl.get('size'):
> > +            ctrl_type = 'Span<const %s>' % ctrl['type']
> > +        else:
> > +            ctrl_type = ctrl['type']
> > +
> >          info = {
> >              'name': name,
> > -            'type': ctrl['type'],
> > +            'type': ctrl_type,
> >          }
> >  
> >          enum = ctrl.get('enum')

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list