utils: gen-controls: Improve YAML notation for variable-size array controls
Array controls specify the array size through the YAML 'size' element, which stores a list of values, one per dimension. Variable-size arrays currently use an empty 'size' list, which prevents describing the number of dimensions of the array. Improve this by using the same notation for fixed-size and variable-size array controls. Dimensions that are not fixed are described as a string instead of an integer, such as [n], [n,3] or [w,h]. The strings have currently no special meaning, this may change in the future. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
This commit is contained in:
parent
24f866f6a3
commit
22ab0b4193
3 changed files with 28 additions and 9 deletions
|
@ -525,7 +525,7 @@ controls:
|
||||||
the window where the focal distance for the objects shown in that part
|
the window where the focal distance for the objects shown in that part
|
||||||
of the image are closest to the camera.
|
of the image are closest to the camera.
|
||||||
|
|
||||||
size: []
|
size: [n]
|
||||||
|
|
||||||
- AfTrigger:
|
- AfTrigger:
|
||||||
type: int32_t
|
type: int32_t
|
||||||
|
|
|
@ -497,7 +497,7 @@ controls:
|
||||||
|
|
||||||
- PixelArrayOpticalBlackRectangles:
|
- PixelArrayOpticalBlackRectangles:
|
||||||
type: Rectangle
|
type: Rectangle
|
||||||
size: []
|
size: [n]
|
||||||
description: |
|
description: |
|
||||||
The pixel array region(s) which contain optical black pixels
|
The pixel array region(s) which contain optical black pixels
|
||||||
considered valid for calibration purposes.
|
considered valid for calibration purposes.
|
||||||
|
@ -592,7 +592,7 @@ controls:
|
||||||
|
|
||||||
- PixelArrayActiveAreas:
|
- PixelArrayActiveAreas:
|
||||||
type: Rectangle
|
type: Rectangle
|
||||||
size: []
|
size: [n]
|
||||||
description: |
|
description: |
|
||||||
The PixelArrayActiveAreas property defines the (possibly multiple and
|
The PixelArrayActiveAreas property defines the (possibly multiple and
|
||||||
overlapping) portions of the camera sensor readable pixel matrix
|
overlapping) portions of the camera sensor readable pixel matrix
|
||||||
|
|
|
@ -39,11 +39,33 @@ class Control(object):
|
||||||
self.__name = name
|
self.__name = name
|
||||||
self.__data = data
|
self.__data = data
|
||||||
self.__enum_values = None
|
self.__enum_values = None
|
||||||
|
self.__size = None
|
||||||
|
|
||||||
enum_values = data.get('enum')
|
enum_values = data.get('enum')
|
||||||
if enum_values is not None:
|
if enum_values is not None:
|
||||||
self.__enum_values = [ControlEnum(enum) for enum in enum_values]
|
self.__enum_values = [ControlEnum(enum) for enum in enum_values]
|
||||||
|
|
||||||
|
size = self.__data.get('size')
|
||||||
|
if size is not None:
|
||||||
|
if len(size) == 0:
|
||||||
|
raise RuntimeError(f'Control `{self.__name}` size must have at least one dimension')
|
||||||
|
|
||||||
|
# Compute the total number of elements in the array. If any of the
|
||||||
|
# array dimension is a string, the array is variable-sized.
|
||||||
|
num_elems = 1
|
||||||
|
for dim in size:
|
||||||
|
if type(dim) is str:
|
||||||
|
num_elems = 0
|
||||||
|
break
|
||||||
|
|
||||||
|
dim = int(dim)
|
||||||
|
if dim <= 0:
|
||||||
|
raise RuntimeError(f'Control `{self.__name}` size must have positive values only')
|
||||||
|
|
||||||
|
num_elems *= dim
|
||||||
|
|
||||||
|
self.__size = num_elems
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def description(self):
|
def description(self):
|
||||||
"""The control description"""
|
"""The control description"""
|
||||||
|
@ -86,15 +108,12 @@ class Control(object):
|
||||||
if typ == 'string':
|
if typ == 'string':
|
||||||
return 'std::string'
|
return 'std::string'
|
||||||
|
|
||||||
if size is None:
|
if self.__size is None:
|
||||||
return typ
|
return typ
|
||||||
|
|
||||||
if len(size) > 0:
|
if self.__size:
|
||||||
# fixed-sized Span
|
return f"Span<const {typ}, {self.__size}>"
|
||||||
span_size = reduce(operator.mul, size)
|
|
||||||
return f"Span<const {typ}, {span_size}>"
|
|
||||||
else:
|
else:
|
||||||
# variable-sized Span
|
|
||||||
return f"Span<const {typ}>"
|
return f"Span<const {typ}>"
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue