libcamera: bayer_format: Add the transpose transformation
To transpose a BayerFormat means to flip it over its main diagonal. For example: G B G R -> R G B G The main diagonal goes from the top left to the bottom right. This means, that the only two orders affected by a transpose are GBRG & GRBG. When a transpose is used in combination with horizontal and/or vertical flips it is performed after the flips. Therefore add the functionality by switching GBRG (index 1) with GRBG (index 2), after the flips have been applied. Signed-off-by: Sebastian Fricke <sebastian.fricke@posteo.net> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: David Plowman <david.plowman@raspberrypi.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
c440c828bc
commit
d121f6c83f
1 changed files with 6 additions and 3 deletions
|
@ -272,9 +272,7 @@ BayerFormat BayerFormat::fromV4L2PixelFormat(V4L2PixelFormat v4l2Format)
|
|||
* The transformed image would have a GRBG order. The bit depth and modifiers
|
||||
* are not affected.
|
||||
*
|
||||
* Note that transpositions are ignored as the order of a transpose with
|
||||
* respect to the flips would have to be defined, and sensors are not expected
|
||||
* to support transposition.
|
||||
* Horizontal and vertical flips are applied before transpose.
|
||||
*
|
||||
* \return The transformed Bayer format
|
||||
*/
|
||||
|
@ -292,6 +290,11 @@ BayerFormat BayerFormat::transform(Transform t) const
|
|||
if (!!(t & Transform::VFlip))
|
||||
result.order = static_cast<Order>(result.order ^ 2);
|
||||
|
||||
if (!!(t & Transform::Transpose) && result.order == 1)
|
||||
result.order = static_cast<Order>(2);
|
||||
else if (!!(t & Transform::Transpose) && result.order == 2)
|
||||
result.order = static_cast<Order>(1);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue