[libcamera-devel] [RFC 4/7] libcamera: properties: Define pixel array properties
Jacopo Mondi
jacopo at jmondi.org
Mon Jan 20 17:04:02 CET 2020
Hi Niklas,
On Wed, Jan 15, 2020 at 09:14:55PM +0100, Niklas Söderlund wrote:
> Hi Jacopo,
>
> Thanks for your effort writing this up, great work!
>
> On 2019-12-18 15:49:58 +0100, Jacopo Mondi wrote:
> > Add definition of pixel array related properties.
> >
> > Signed-off-by: Jacopo Mondi <jacopo at jmondi.org>
> > ---
> > src/libcamera/property_ids.yaml | 177 ++++++++++++++++++++++++++++++++
> > 1 file changed, 177 insertions(+)
> >
> > diff --git a/src/libcamera/property_ids.yaml b/src/libcamera/property_ids.yaml
> > index 811c300c6b0a..9e2333cb7206 100644
> > --- a/src/libcamera/property_ids.yaml
> > +++ b/src/libcamera/property_ids.yaml
> > @@ -31,4 +31,181 @@ controls:
> > Camera mounting rotation expressed as counterclockwise rotation degrees
> > towards the axis perpendicular to the sensor surface and directed away
> > from it
> > +
> > + - PixelArraySize:
> > + type: float
> > + compound: true
> > + description: |
> > + The physical sizes of the pixel array (width and height), in
> > + millimeters.
> > +
> > + - PixelArrayBounds:
> > + type: int32_t
> > + compound: true
> > + description: |
> > + The camera sensor pixel array bounding rectangle vertical and
> > + horizontal sizes.
> > +
> > + For image sensors with a rectangular pixel array the sizes described by
> > + this property are the same as the PixelAreaSize property size.
> > +
> > + For image sensors with more complex pixel array displacements (such as
> > + cross-shaped pixel arrays, non symmetrical pixel arrays etc) this
> > + property represents the bounding rectangle in which all pixel array
> > + dimensions are inscribed into.
> > +
> > + In example, the bounding rectangle sizes for image sensor with a
> > + cross-shaped pixel array is described as
> > +
> > +
> > + PixelArrayBound(0) = width
> > + /-----------------/
> > +
> > + (0,0)-> +----+------+----+ /
> > + | |//////| | |
> > + +----+//////+----+ |
> > + |////////////////| | PixelArrayBound(1) = height
> > + +----+//////+----+ |
> > + | |//////| | |
> > + +----+------+----+ /
> > + |
> > + -> Cross-shaped pixel area
> > +
> > + - PixelArrays:
> > + type: int32_t
> > + compound: true
> > + description: |
> > + The sensor pixel array rectangles, relative to the rectangle described
> > + by the PixelArrayBounds property.
> > +
> > + This property describes an arbitrary number of (likely overlapping)
> > + rectangles, representing the pixel array areas the sensor is composed
> > + of.
> > +
> > + Each rectangle is defined by its displacement from pixel (0, 0) of
> > + the bounding rectangle described by the PixelArrayBound property.
> > +
> > + For image sensors with a rectangular pixel array, a single rectangle
> > + is required. For sensors with more complex pixel array displacements
> > + multiple rectangles shall be specified, ordered from the tallest to the
> > + shorter one.
> > +
> > + For each rectangle, this property reports the full pixel array size,
> > + including non-active pixels, black level calibration pixels etc.
> > +
> > + In example, a simple sensor with a rectangular pixel array is described
> > + as
> > +
> > + PixelArrayBound(0) = width
> > + /-----------------/
> > + x1 x2
> > + (0,0)-> +-o------------o-+ /
> > + y1 o +------------+ | |
> > + | |////////////| | |
> > + | |////////////| | | PixelArrayBound(1) = height
> > + | |////////////| | |
> > + y2 o +------------+ | |
> > + +----------------+ /
> > +
> > + PixelArray = (x1, y1, (x2 - x1), (y2 - y1))
> > +
> > + A more complex sensor, with a cross shaped pixel array displacement
> > + is described with 2 rectangles, with the vertical rectangle
> > + described first
> > +
> > + PixelArrayBound(0) = width
> > + /-----------------/
> > + x1 x2 x3 x4 W
> > + (0,0)-> +o---o------o---o+ /
> > + | |//////| | |
> > + y1 o+---+------+---+| |
> > + ||///|//////|///|| | PixelArrayBound(1) = height
> > + y2 o+---+------+---+| |
> > + | |//////| | |
> > + H +----+------+----+ /
> > +
> > +
> > + PixelArray = ( (x2, 0, (x3 - x2), H),
> > + (x1, y1, (x4 - x1), (y2 - y1))
> > +
> > + - ActiveAreaSize:
> > + type: int32_t
> > + compound: true
> > + description: |
> > + The sensor active pixel area sizes, represented as rectangles
> > + inscribed in the ones described by the PixelArrays property.
> > +
> > + One ActiveAreaSize rectangle per each rectangle described in the
> > + PixelArrays property is required. As a consequence, the two properties
> > + shall transport the same number of elements.
> > +
> > + The ActiveAreaSize rectangles represent the maximum image sizes the
> > + sensor can produce.
>
> This paragraph is the only thing preventing me from attaching my tag to
> this series. It's not clear to me what the difference between
> PixelArrays and ActiveAreaSize is.
>
PixelArrays:
For each rectangle, this property reports the full pixel array size,
including non-active pixels, black level calibration pixels etc.
ActiveAreaSize:
The ActiveAreaSize rectangles represent the maximum image sizes the
sensor can produce.
Do you think it needs to be clarified further ?
> > +
> > + - BayerFilterArrangement:
> > + type: int32_t
> > + description: |
> > + The pixel array color filter displacement.
> > +
> > + This property describes the arrangement and readout sequence of the
> > + three RGB color components of the sensor's Bayer Color Filter Array
> > + (CFA).
> > +
> > + Color filters are usually displaced in line-alternating fashion on the
> > + sensor pixel array. In example, one line might be composed of Red-Green
> > + while the successive is composed of Blue-Green color information.
> > +
> > + The value of this property represent the arrangement of color filters
> > + in the top-left 2x2 pixel square.
> > +
> > + In example, for a sensor with the following color filter displacement
> > +
> > + (0, 0) (max-col)
> > + +---+ +--------------...---+
> > + |B|G|<---|B|G|B|G|B|G|B|...B|G|
> > + |G|R|<---|G|R|G|R|G|R|G|...G|R|
> > + +---+ |B|G|B|G|B|G|B|...B|G|
> > + ... ..
> > + ... ..
> > + |G|R|G|R|G|R|G|...G|R|
> > + |B|G|B|G|B|G|B|...B|G| (max-lines)
> > + +--------------...---+
> > +
> > + The filer arrangement is represented by the BGGR value, which correspond
> > + to the pixel readout sequence in line interleaved mode.
> > +
> > + enum:
> > + - BayerFilterRGGB:
> > + value: 0
> > + description: |
> > + Color filter array displacement is Red-Green/Green-Blue
> > +
> > + - BayerFilterGRBG:
> > + value: 1
> > + description: |
> > + Color filter array displacement is Green-Red/Blue-Green
> > +
> > + - BayerFilterGBRG:
> > + value: 2
> > + description: |
> > + Color filter array displacement is Green-Blue/Red-Green
> > +
> > + - BayerFilterBGGR:
> > + value: 3
> > + description: |
> > + Color filter array displacement is Blue-Green/Green-Red
> > +
> > + - BayerFilterNonStandard:
> > + value: 4
> > + description: |
> > + The pixel array color filter does not use the standard Bayer RGB
> > + color model
> > +
> > + - ISOSensitivityRange:
> > + type: int32_t
> > + compound: true
> > + description: |
> > + The range of supported ISO sensitivities, as documented by the
> > + ISO 12232:2006 standard
> > +
> > ...
> > --
> > 2.24.0
> >
> > _______________________________________________
> > libcamera-devel mailing list
> > libcamera-devel at lists.libcamera.org
> > https://lists.libcamera.org/listinfo/libcamera-devel
>
> --
> Regards,
> Niklas Söderlund
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20200120/4e61c771/attachment-0001.sig>
More information about the libcamera-devel
mailing list