Message ID | 20210126184854.46156-6-sebastian.fricke@posteo.net |
---|---|
State | Accepted |
Headers | show |
Series |
|
Related | show |
Hi Sebastian, Thank you for the patch. On Tue, Jan 26, 2021 at 07:48:54PM +0100, Sebastian Fricke wrote: > Test all of the present methods including the newly implemented > `fromV4L2PixelFormat`, as well as the new operators `==/!=`. > > Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > Reviewed-by: David Plowman <david.plowman@raspberrypi.com> > Signed-off-by: Sebastian Fricke <sebastian.fricke@posteo.net> > --- > test/bayer_format.cpp | 210 ++++++++++++++++++++++++++++++++++++++++++ > test/meson.build | 1 + > 2 files changed, 211 insertions(+) > create mode 100644 test/bayer_format.cpp > > diff --git a/test/bayer_format.cpp b/test/bayer_format.cpp > new file mode 100644 > index 00000000..f763500f > --- /dev/null > +++ b/test/bayer_format.cpp > @@ -0,0 +1,210 @@ > +/* SPDX-License-Identifier: GPL-2.0-or-later */ > +/* > + * Copyright (C) 2020, Sebastian Fricke > + * > + * bayer_format.cpp - BayerFormat class tests > + */ > + > +#include <iostream> > + > +#include <libcamera/internal/bayer_format.h> > +#include <libcamera/transform.h> > + > +#include "test.h" > + > +using namespace std; > +using namespace libcamera; > + > +class BayerFormatTest : public Test > +{ > +protected: > + int run() > + { > + /* An empty Bayer format has to be invalid. */ > + BayerFormat bayerFmt; > + if (bayerFmt.isValid()) { > + cerr << "An empty BayerFormat has to be invalid." > + << endl; > + return TestFail; > + } > + > + /* A correct Bayer format has to be valid. */ > + bayerFmt = BayerFormat(BayerFormat::BGGR, 8, BayerFormat::None); > + if (!bayerFmt.isValid()) { > + cerr << "A correct BayerFormat has to be valid." > + << endl; > + return TestFail; > + } > + > + /* > + * Two bayer formats created with the same order and bit depth > + * have to be equal. > + */ > + bayerFmt = BayerFormat(BayerFormat::BGGR, 8, BayerFormat::None); > + BayerFormat bayerFmtExpect = BayerFormat(BayerFormat::BGGR, 8, > + BayerFormat::None); > + if (bayerFmt != bayerFmtExpect) { > + cerr << "Comparison of identical formats failed." > + << endl; > + return TestFail; > + } > + > + /* > + * Two Bayer formats created with the same order but with a > + * different bitDepth are not equal. > + */ > + bayerFmt = BayerFormat(BayerFormat::BGGR, 8, BayerFormat::None); > + bayerFmtExpect = BayerFormat(BayerFormat::BGGR, 12, > + BayerFormat::None); > + if (bayerFmt == bayerFmtExpect) { > + cerr << "Comparison of divergent formats failed." s/divergent/different/ > + << endl; > + return TestFail; > + } > + > + /* > + * Create a Bayer format with a V4L2PixelFormat and check if we > + * get the same format after converting back to the V4L2 Format. > + */ > + V4L2PixelFormat v4l2FmtExpect = V4L2PixelFormat( > + V4L2_PIX_FMT_SBGGR8); > + bayerFmt = BayerFormat::fromV4L2PixelFormat(v4l2FmtExpect); > + V4L2PixelFormat v4l2Fmt = bayerFmt.toV4L2PixelFormat(); > + if (v4l2Fmt != v4l2FmtExpect) { > + cerr << "Expected: '" << v4l2FmtExpect.toString() > + << "' got: '" << v4l2Fmt.toString() << "'" << endl; > + return TestFail; > + } > + > + /* > + * Use an empty Bayer format and verify that no matching > + * V4L2PixelFormat is found. > + */ > + v4l2FmtExpect = V4L2PixelFormat(); > + bayerFmt = BayerFormat(); > + v4l2Fmt = bayerFmt.toV4L2PixelFormat(); > + if (v4l2Fmt != v4l2FmtExpect) { > + cerr << "Expected: empty V4L2PixelFormat got: '" > + << v4l2Fmt.toString() << "'" << endl; > + return TestFail; > + } > + > + /* > + * Check if we get the expected Bayer format BGGR8 > + * when we convert the V4L2PixelFormat (V4L2_PIX_FMT_SBGGR8) > + * to a Bayer format. > + */ > + bayerFmtExpect = BayerFormat(BayerFormat::BGGR, 8, > + BayerFormat::None); > + v4l2Fmt = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR8); > + bayerFmt = BayerFormat::fromV4L2PixelFormat(v4l2Fmt); > + if (bayerFmt != bayerFmtExpect) { > + cerr << "Expected BayerFormat '" > + << bayerFmtExpect.toString() << "', got: '" > + << bayerFmt.toString() << "'" << endl; > + return TestFail; > + } > + > + /* > + * Confirm that a V4L2PixelFormat that is not found in > + * the conversion table, doesn't yield a Bayer format. > + */ > + V4L2PixelFormat v4l2FmtUnknown = V4L2PixelFormat( > + V4L2_PIX_FMT_BGRA444); > + bayerFmt = BayerFormat::fromV4L2PixelFormat(v4l2FmtUnknown); > + if (bayerFmt.isValid()) { > + cerr << "Expected empty BayerFormat got: '" > + << bayerFmt.toString() << "'" << endl; > + return TestFail; > + } > + > + /* > + * Test if a valid Bayer format can be converted to a > + * string representation. > + */ > + bayerFmt = BayerFormat(BayerFormat::BGGR, 8, BayerFormat::None); > + if (bayerFmt.toString() != "BGGR-8") { > + cerr << "String representation != 'BGGR-8' (got: '" > + << bayerFmt.toString() << "' ) " << endl; > + return TestFail; > + } > + > + /* > + * Determine if an empty Bayer format results in no > + * string representation. > + */ > + bayerFmt = BayerFormat(); > + if (bayerFmt.toString() != "INVALID") { > + cerr << "String representation != 'INVALID' (got: '" > + << bayerFmt.toString() << "' ) " << endl; > + return TestFail; > + } > + > + /* > + * Perform a horizontal Flip and make sure that the > + * order is adjusted accordingly. > + */ > + bayerFmt = BayerFormat(BayerFormat::BGGR, 8, BayerFormat::None); > + bayerFmtExpect = BayerFormat(BayerFormat::GBRG, 8, > + BayerFormat::None); > + BayerFormat hFlipFmt = bayerFmt.transform(Transform::HFlip); > + if (hFlipFmt != bayerFmtExpect) { > + cerr << "Horizontal flip of 'BGGR-8' should result in '" > + << bayerFmtExpect.toString() << "', got: '" > + << hFlipFmt.toString() << "'" << endl; > + return TestFail; > + } > + > + /* > + * Perform a vertical Flip and make sure that > + * the order is adjusted accordingly. > + */ > + bayerFmt = BayerFormat(BayerFormat::BGGR, 8, BayerFormat::None); > + bayerFmtExpect = BayerFormat(BayerFormat::GRBG, 8, > + BayerFormat::None); > + BayerFormat vFlipFmt = bayerFmt.transform(Transform::VFlip); > + if (vFlipFmt != bayerFmtExpect) { > + cerr << "Vertical flip of 'BGGR-8' should result in '" > + << bayerFmtExpect.toString() << "', got: '" > + << vFlipFmt.toString() << "'" << endl; > + return TestFail; > + } > + > + /* > + * Perform a transposition on a pixel order with both green > + * pixels on the bottom left to top right diagonal and make > + * sure, that it doesn't change. > + */ > + bayerFmt = BayerFormat(BayerFormat::BGGR, 8, BayerFormat::None); > + BayerFormat transposeFmt = bayerFmt.transform( > + Transform::Transpose); > + if (transposeFmt != bayerFmt) { > + cerr << "Transpose with both green pixels on the " > + << "antidiagonal, should not change the order " s/antidiagonal,/antidiagonal/ > + << " result: '" << transposeFmt.toString() << "'" > + << endl; > + return TestFail; > + } > + > + /* > + * Perform a transposition on an pixel order with red and blue > + * on the bottom left to top right diagonal and make sure > + * that their positions are switched. > + */ > + bayerFmt = BayerFormat(BayerFormat::GBRG, 8, BayerFormat::None); > + bayerFmtExpect = BayerFormat(BayerFormat::GRBG, 8, > + BayerFormat::None); > + transposeFmt = bayerFmt.transform(Transform::Transpose); > + if (transposeFmt != bayerFmtExpect) { > + cerr << "Transpose with the red & blue pixels on the " > + << "antidiagonal, should switch their position " Same here. > + << " result: '" << transposeFmt.toString() << "'" > + << endl; > + return TestFail; > + } > + > + return TestPass; > + } > +}; > + > +TEST_REGISTER(BayerFormatTest); s/;// > diff --git a/test/meson.build b/test/meson.build > index 7f0682ad..709b47aa 100644 > --- a/test/meson.build > +++ b/test/meson.build > @@ -27,6 +27,7 @@ public_tests = [ > ] > > internal_tests = [ > + ['bayer-format', 'bayer_format.cpp'], > ['byte-stream-buffer', 'byte-stream-buffer.cpp'], > ['camera-sensor', 'camera-sensor.cpp'], > ['event', 'event.cpp'],
Hi Sebastian, A few other comments. On Wed, Jan 27, 2021 at 01:12:56AM +0200, Laurent Pinchart wrote: > On Tue, Jan 26, 2021 at 07:48:54PM +0100, Sebastian Fricke wrote: > > Test all of the present methods including the newly implemented > > `fromV4L2PixelFormat`, as well as the new operators `==/!=`. > > > > Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> > > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > > Reviewed-by: David Plowman <david.plowman@raspberrypi.com> > > Signed-off-by: Sebastian Fricke <sebastian.fricke@posteo.net> > > --- > > test/bayer_format.cpp | 210 ++++++++++++++++++++++++++++++++++++++++++ > > test/meson.build | 1 + > > 2 files changed, 211 insertions(+) > > create mode 100644 test/bayer_format.cpp > > > > diff --git a/test/bayer_format.cpp b/test/bayer_format.cpp > > new file mode 100644 > > index 00000000..f763500f > > --- /dev/null > > +++ b/test/bayer_format.cpp > > @@ -0,0 +1,210 @@ > > +/* SPDX-License-Identifier: GPL-2.0-or-later */ > > +/* > > + * Copyright (C) 2020, Sebastian Fricke > > + * > > + * bayer_format.cpp - BayerFormat class tests > > + */ > > + > > +#include <iostream> > > + > > +#include <libcamera/internal/bayer_format.h> > > +#include <libcamera/transform.h> > > + > > +#include "test.h" > > + > > +using namespace std; > > +using namespace libcamera; > > + > > +class BayerFormatTest : public Test > > +{ > > +protected: > > + int run() > > + { > > + /* An empty Bayer format has to be invalid. */ > > + BayerFormat bayerFmt; > > + if (bayerFmt.isValid()) { > > + cerr << "An empty BayerFormat has to be invalid." > > + << endl; > > + return TestFail; > > + } > > + > > + /* A correct Bayer format has to be valid. */ > > + bayerFmt = BayerFormat(BayerFormat::BGGR, 8, BayerFormat::None); > > + if (!bayerFmt.isValid()) { > > + cerr << "A correct BayerFormat has to be valid." > > + << endl; > > + return TestFail; > > + } > > + > > + /* > > + * Two bayer formats created with the same order and bit depth > > + * have to be equal. > > + */ > > + bayerFmt = BayerFormat(BayerFormat::BGGR, 8, BayerFormat::None); > > + BayerFormat bayerFmtExpect = BayerFormat(BayerFormat::BGGR, 8, > > + BayerFormat::None); > > + if (bayerFmt != bayerFmtExpect) { > > + cerr << "Comparison of identical formats failed." > > + << endl; > > + return TestFail; > > + } > > + > > + /* > > + * Two Bayer formats created with the same order but with a > > + * different bitDepth are not equal. > > + */ > > + bayerFmt = BayerFormat(BayerFormat::BGGR, 8, BayerFormat::None); > > + bayerFmtExpect = BayerFormat(BayerFormat::BGGR, 12, > > + BayerFormat::None); > > + if (bayerFmt == bayerFmtExpect) { > > + cerr << "Comparison of divergent formats failed." > > s/divergent/different/ > > > + << endl; > > + return TestFail; > > + } > > + > > + /* > > + * Create a Bayer format with a V4L2PixelFormat and check if we > > + * get the same format after converting back to the V4L2 Format. > > + */ > > + V4L2PixelFormat v4l2FmtExpect = V4L2PixelFormat( > > + V4L2_PIX_FMT_SBGGR8); > > + bayerFmt = BayerFormat::fromV4L2PixelFormat(v4l2FmtExpect); > > + V4L2PixelFormat v4l2Fmt = bayerFmt.toV4L2PixelFormat(); > > + if (v4l2Fmt != v4l2FmtExpect) { > > + cerr << "Expected: '" << v4l2FmtExpect.toString() > > + << "' got: '" << v4l2Fmt.toString() << "'" << endl; > > + return TestFail; > > + } > > + > > + /* > > + * Use an empty Bayer format and verify that no matching > > + * V4L2PixelFormat is found. > > + */ > > + v4l2FmtExpect = V4L2PixelFormat(); > > + bayerFmt = BayerFormat(); > > + v4l2Fmt = bayerFmt.toV4L2PixelFormat(); > > + if (v4l2Fmt != v4l2FmtExpect) { > > + cerr << "Expected: empty V4L2PixelFormat got: '" > > + << v4l2Fmt.toString() << "'" << endl; > > + return TestFail; > > + } > > + > > + /* > > + * Check if we get the expected Bayer format BGGR8 > > + * when we convert the V4L2PixelFormat (V4L2_PIX_FMT_SBGGR8) > > + * to a Bayer format. > > + */ > > + bayerFmtExpect = BayerFormat(BayerFormat::BGGR, 8, > > + BayerFormat::None); > > + v4l2Fmt = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR8); > > + bayerFmt = BayerFormat::fromV4L2PixelFormat(v4l2Fmt); > > + if (bayerFmt != bayerFmtExpect) { > > + cerr << "Expected BayerFormat '" > > + << bayerFmtExpect.toString() << "', got: '" > > + << bayerFmt.toString() << "'" << endl; > > + return TestFail; > > + } > > + > > + /* > > + * Confirm that a V4L2PixelFormat that is not found in > > + * the conversion table, doesn't yield a Bayer format. > > + */ > > + V4L2PixelFormat v4l2FmtUnknown = V4L2PixelFormat( > > + V4L2_PIX_FMT_BGRA444); > > + bayerFmt = BayerFormat::fromV4L2PixelFormat(v4l2FmtUnknown); > > + if (bayerFmt.isValid()) { > > + cerr << "Expected empty BayerFormat got: '" > > + << bayerFmt.toString() << "'" << endl; > > + return TestFail; > > + } > > + > > + /* > > + * Test if a valid Bayer format can be converted to a > > + * string representation. > > + */ > > + bayerFmt = BayerFormat(BayerFormat::BGGR, 8, BayerFormat::None); > > + if (bayerFmt.toString() != "BGGR-8") { > > + cerr << "String representation != 'BGGR-8' (got: '" > > + << bayerFmt.toString() << "' ) " << endl; > > + return TestFail; > > + } > > + > > + /* > > + * Determine if an empty Bayer format results in no > > + * string representation. > > + */ > > + bayerFmt = BayerFormat(); > > + if (bayerFmt.toString() != "INVALID") { > > + cerr << "String representation != 'INVALID' (got: '" > > + << bayerFmt.toString() << "' ) " << endl; > > + return TestFail; > > + } > > + > > + /* > > + * Perform a horizontal Flip and make sure that the > > + * order is adjusted accordingly. > > + */ > > + bayerFmt = BayerFormat(BayerFormat::BGGR, 8, BayerFormat::None); > > + bayerFmtExpect = BayerFormat(BayerFormat::GBRG, 8, > > + BayerFormat::None); > > + BayerFormat hFlipFmt = bayerFmt.transform(Transform::HFlip); > > + if (hFlipFmt != bayerFmtExpect) { > > + cerr << "Horizontal flip of 'BGGR-8' should result in '" > > + << bayerFmtExpect.toString() << "', got: '" > > + << hFlipFmt.toString() << "'" << endl; > > + return TestFail; > > + } > > + > > + /* > > + * Perform a vertical Flip and make sure that > > + * the order is adjusted accordingly. > > + */ > > + bayerFmt = BayerFormat(BayerFormat::BGGR, 8, BayerFormat::None); > > + bayerFmtExpect = BayerFormat(BayerFormat::GRBG, 8, > > + BayerFormat::None); > > + BayerFormat vFlipFmt = bayerFmt.transform(Transform::VFlip); > > + if (vFlipFmt != bayerFmtExpect) { > > + cerr << "Vertical flip of 'BGGR-8' should result in '" > > + << bayerFmtExpect.toString() << "', got: '" > > + << vFlipFmt.toString() << "'" << endl; > > + return TestFail; > > + } > > + > > + /* > > + * Perform a transposition on a pixel order with both green > > + * pixels on the bottom left to top right diagonal and make > > + * sure, that it doesn't change. > > + */ > > + bayerFmt = BayerFormat(BayerFormat::BGGR, 8, BayerFormat::None); > > + BayerFormat transposeFmt = bayerFmt.transform( > > + Transform::Transpose); > > + if (transposeFmt != bayerFmt) { > > + cerr << "Transpose with both green pixels on the " > > + << "antidiagonal, should not change the order " > > s/antidiagonal,/antidiagonal/ > > > + << " result: '" << transposeFmt.toString() << "'" There's no line break before this line, so the message on the console would look weird. I'd write << "(got '" << transposeFmt.toString() << "')" > > + << endl; > > + return TestFail; > > + } > > + > > + /* > > + * Perform a transposition on an pixel order with red and blue > > + * on the bottom left to top right diagonal and make sure > > + * that their positions are switched. > > + */ > > + bayerFmt = BayerFormat(BayerFormat::GBRG, 8, BayerFormat::None); > > + bayerFmtExpect = BayerFormat(BayerFormat::GRBG, 8, > > + BayerFormat::None); > > + transposeFmt = bayerFmt.transform(Transform::Transpose); > > + if (transposeFmt != bayerFmtExpect) { > > + cerr << "Transpose with the red & blue pixels on the " > > + << "antidiagonal, should switch their position " > > Same here. > > > + << " result: '" << transposeFmt.toString() << "'" Same here. > > + << endl; > > + return TestFail; > > + } > > + > > + return TestPass; > > + } > > +}; > > + > > +TEST_REGISTER(BayerFormatTest); > > s/;// > > > diff --git a/test/meson.build b/test/meson.build > > index 7f0682ad..709b47aa 100644 > > --- a/test/meson.build > > +++ b/test/meson.build > > @@ -27,6 +27,7 @@ public_tests = [ > > ] > > > > internal_tests = [ > > + ['bayer-format', 'bayer_format.cpp'], I'd rename the file to bayer-format.cpp to match the other files in this directory. > > ['byte-stream-buffer', 'byte-stream-buffer.cpp'], > > ['camera-sensor', 'camera-sensor.cpp'], > > ['event', 'event.cpp'],
diff --git a/test/bayer_format.cpp b/test/bayer_format.cpp new file mode 100644 index 00000000..f763500f --- /dev/null +++ b/test/bayer_format.cpp @@ -0,0 +1,210 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Copyright (C) 2020, Sebastian Fricke + * + * bayer_format.cpp - BayerFormat class tests + */ + +#include <iostream> + +#include <libcamera/internal/bayer_format.h> +#include <libcamera/transform.h> + +#include "test.h" + +using namespace std; +using namespace libcamera; + +class BayerFormatTest : public Test +{ +protected: + int run() + { + /* An empty Bayer format has to be invalid. */ + BayerFormat bayerFmt; + if (bayerFmt.isValid()) { + cerr << "An empty BayerFormat has to be invalid." + << endl; + return TestFail; + } + + /* A correct Bayer format has to be valid. */ + bayerFmt = BayerFormat(BayerFormat::BGGR, 8, BayerFormat::None); + if (!bayerFmt.isValid()) { + cerr << "A correct BayerFormat has to be valid." + << endl; + return TestFail; + } + + /* + * Two bayer formats created with the same order and bit depth + * have to be equal. + */ + bayerFmt = BayerFormat(BayerFormat::BGGR, 8, BayerFormat::None); + BayerFormat bayerFmtExpect = BayerFormat(BayerFormat::BGGR, 8, + BayerFormat::None); + if (bayerFmt != bayerFmtExpect) { + cerr << "Comparison of identical formats failed." + << endl; + return TestFail; + } + + /* + * Two Bayer formats created with the same order but with a + * different bitDepth are not equal. + */ + bayerFmt = BayerFormat(BayerFormat::BGGR, 8, BayerFormat::None); + bayerFmtExpect = BayerFormat(BayerFormat::BGGR, 12, + BayerFormat::None); + if (bayerFmt == bayerFmtExpect) { + cerr << "Comparison of divergent formats failed." + << endl; + return TestFail; + } + + /* + * Create a Bayer format with a V4L2PixelFormat and check if we + * get the same format after converting back to the V4L2 Format. + */ + V4L2PixelFormat v4l2FmtExpect = V4L2PixelFormat( + V4L2_PIX_FMT_SBGGR8); + bayerFmt = BayerFormat::fromV4L2PixelFormat(v4l2FmtExpect); + V4L2PixelFormat v4l2Fmt = bayerFmt.toV4L2PixelFormat(); + if (v4l2Fmt != v4l2FmtExpect) { + cerr << "Expected: '" << v4l2FmtExpect.toString() + << "' got: '" << v4l2Fmt.toString() << "'" << endl; + return TestFail; + } + + /* + * Use an empty Bayer format and verify that no matching + * V4L2PixelFormat is found. + */ + v4l2FmtExpect = V4L2PixelFormat(); + bayerFmt = BayerFormat(); + v4l2Fmt = bayerFmt.toV4L2PixelFormat(); + if (v4l2Fmt != v4l2FmtExpect) { + cerr << "Expected: empty V4L2PixelFormat got: '" + << v4l2Fmt.toString() << "'" << endl; + return TestFail; + } + + /* + * Check if we get the expected Bayer format BGGR8 + * when we convert the V4L2PixelFormat (V4L2_PIX_FMT_SBGGR8) + * to a Bayer format. + */ + bayerFmtExpect = BayerFormat(BayerFormat::BGGR, 8, + BayerFormat::None); + v4l2Fmt = V4L2PixelFormat(V4L2_PIX_FMT_SBGGR8); + bayerFmt = BayerFormat::fromV4L2PixelFormat(v4l2Fmt); + if (bayerFmt != bayerFmtExpect) { + cerr << "Expected BayerFormat '" + << bayerFmtExpect.toString() << "', got: '" + << bayerFmt.toString() << "'" << endl; + return TestFail; + } + + /* + * Confirm that a V4L2PixelFormat that is not found in + * the conversion table, doesn't yield a Bayer format. + */ + V4L2PixelFormat v4l2FmtUnknown = V4L2PixelFormat( + V4L2_PIX_FMT_BGRA444); + bayerFmt = BayerFormat::fromV4L2PixelFormat(v4l2FmtUnknown); + if (bayerFmt.isValid()) { + cerr << "Expected empty BayerFormat got: '" + << bayerFmt.toString() << "'" << endl; + return TestFail; + } + + /* + * Test if a valid Bayer format can be converted to a + * string representation. + */ + bayerFmt = BayerFormat(BayerFormat::BGGR, 8, BayerFormat::None); + if (bayerFmt.toString() != "BGGR-8") { + cerr << "String representation != 'BGGR-8' (got: '" + << bayerFmt.toString() << "' ) " << endl; + return TestFail; + } + + /* + * Determine if an empty Bayer format results in no + * string representation. + */ + bayerFmt = BayerFormat(); + if (bayerFmt.toString() != "INVALID") { + cerr << "String representation != 'INVALID' (got: '" + << bayerFmt.toString() << "' ) " << endl; + return TestFail; + } + + /* + * Perform a horizontal Flip and make sure that the + * order is adjusted accordingly. + */ + bayerFmt = BayerFormat(BayerFormat::BGGR, 8, BayerFormat::None); + bayerFmtExpect = BayerFormat(BayerFormat::GBRG, 8, + BayerFormat::None); + BayerFormat hFlipFmt = bayerFmt.transform(Transform::HFlip); + if (hFlipFmt != bayerFmtExpect) { + cerr << "Horizontal flip of 'BGGR-8' should result in '" + << bayerFmtExpect.toString() << "', got: '" + << hFlipFmt.toString() << "'" << endl; + return TestFail; + } + + /* + * Perform a vertical Flip and make sure that + * the order is adjusted accordingly. + */ + bayerFmt = BayerFormat(BayerFormat::BGGR, 8, BayerFormat::None); + bayerFmtExpect = BayerFormat(BayerFormat::GRBG, 8, + BayerFormat::None); + BayerFormat vFlipFmt = bayerFmt.transform(Transform::VFlip); + if (vFlipFmt != bayerFmtExpect) { + cerr << "Vertical flip of 'BGGR-8' should result in '" + << bayerFmtExpect.toString() << "', got: '" + << vFlipFmt.toString() << "'" << endl; + return TestFail; + } + + /* + * Perform a transposition on a pixel order with both green + * pixels on the bottom left to top right diagonal and make + * sure, that it doesn't change. + */ + bayerFmt = BayerFormat(BayerFormat::BGGR, 8, BayerFormat::None); + BayerFormat transposeFmt = bayerFmt.transform( + Transform::Transpose); + if (transposeFmt != bayerFmt) { + cerr << "Transpose with both green pixels on the " + << "antidiagonal, should not change the order " + << " result: '" << transposeFmt.toString() << "'" + << endl; + return TestFail; + } + + /* + * Perform a transposition on an pixel order with red and blue + * on the bottom left to top right diagonal and make sure + * that their positions are switched. + */ + bayerFmt = BayerFormat(BayerFormat::GBRG, 8, BayerFormat::None); + bayerFmtExpect = BayerFormat(BayerFormat::GRBG, 8, + BayerFormat::None); + transposeFmt = bayerFmt.transform(Transform::Transpose); + if (transposeFmt != bayerFmtExpect) { + cerr << "Transpose with the red & blue pixels on the " + << "antidiagonal, should switch their position " + << " result: '" << transposeFmt.toString() << "'" + << endl; + return TestFail; + } + + return TestPass; + } +}; + +TEST_REGISTER(BayerFormatTest); diff --git a/test/meson.build b/test/meson.build index 7f0682ad..709b47aa 100644 --- a/test/meson.build +++ b/test/meson.build @@ -27,6 +27,7 @@ public_tests = [ ] internal_tests = [ + ['bayer-format', 'bayer_format.cpp'], ['byte-stream-buffer', 'byte-stream-buffer.cpp'], ['camera-sensor', 'camera-sensor.cpp'], ['event', 'event.cpp'],