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:
committed by
Laurent Pinchart
parent
c440c828bc
commit
d121f6c83f
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user