[libcamera-devel] libcamera transform control

David Plowman david.plowman at raspberrypi.com
Mon Jul 6 15:32:27 CEST 2020


Hi everyone

This email takes the previous discussion of image transformations and
moves it into a thread of its own.

The problem at hand is how to specify the 2D planar transformation to
be applied to a camera image. These are well known to us as flips,
rotations and so on (the usual eight members of dihedral group D4).

Laurent's suggestion was to apply them as standard libcamera controls.
Some platforms may be able to apply them on a per-frame basis; others
will not (they will require the transform to be set before the camera
is started - once this mechanism exists). (Is there anyway to signal a
platform's capabilities in this regard?)

For the time being we are ignoring the possibility that some platforms
might be able to apply different transformations to different streams
(I believe there is in any case no mechanism for per-stream controls).

Note also that raw streams will always have the orientation with which
they come out of the camera, though again I don't believe we have a
convenient way for a platform to indicate whether this includes the
transform or not  (perhaps a stream could indicate its transform
relative to the requested transform?).

We propose to represent the transforms as "int" controls, in fact
being members of an enum with eight entries. Further, we suggest that
the first four entries are "identity", "hflip", "vflip", "h+vflip",
meaning the control's maximum value can indicate whether transforms
that involve a transposition are excluded.

Notes on the Raspberry Pi implementation:
Only transpose-less transforms will be allowed, and only before the
camera is started. We will support them by setting the corresponding
control bits in the camera driver (so raw streams will include the
transform). This means the ALSC (Auto Lens Shading) algorithm will
have to know whether camera images are oriented differently from the
calibration images.

Thoughts?

Best regards
David


More information about the libcamera-devel mailing list