Message ID | 20190301115139.11060-3-jacopo@jmondi.org |
---|---|
State | Superseded |
Headers | show |
Series |
|
Related | show |
Hi Jacopo, Thank you for the patch. On Fri, Mar 01, 2019 at 12:51:36PM +0100, Jacopo Mondi wrote: > Add test to list formats on a v4l2 subdevice. > > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > Signed-off-by: Jacopo Mondi <jacopo@jmondi.org> > --- > test/v4l2_subdevice/list_formats.cpp | 81 ++++++++++++++++++++++++++++ > test/v4l2_subdevice/meson.build | 1 + > 2 files changed, 82 insertions(+) > create mode 100644 test/v4l2_subdevice/list_formats.cpp > > diff --git a/test/v4l2_subdevice/list_formats.cpp b/test/v4l2_subdevice/list_formats.cpp > new file mode 100644 > index 000000000000..b4eab68f9f7e > --- /dev/null > +++ b/test/v4l2_subdevice/list_formats.cpp > @@ -0,0 +1,81 @@ > +/* SPDX-License-Identifier: GPL-2.0-or-later */ > +/* > + * Copyright (C) 2019, Google Inc. > + * > + * libcamera V4L2 Subdevice format handling test > + */ > + > +#include <iomanip> > +#include <iostream> > +#include <vector> > + > +#include "geometry.h" > +#include "v4l2_subdevice.h" > +#include "v4l2_subdevice_test.h" > + > +using namespace std; > +using namespace libcamera; > + > +/* List image formats on the "Scaler" subdevice of vimc media device. */ > + > +class ListFormatsTest : public V4L2SubdeviceTest > +{ > +protected: > + int run() override; > + > +private: > + void printFormats(unsigned int pad, unsigned code, > + std::vector<SizeRange> &formats); > +}; > + > +void ListFormatsTest::printFormats(unsigned int pad, > + unsigned int code, > + std::vector<SizeRange> &sizes) > +{ > + cout << "Enumerate formats on pad " << pad << endl; > + for (SizeRange &size : sizes) { > + cout << " mbus code: 0x" << setfill('0') << setw(4) > + << hex << code << endl; > + cout << " min width: " << dec << size.minWidth << endl; > + cout << " min height: " << dec << size.minHeight << endl; > + cout << " max width: " << dec << size.maxWidth << endl; > + cout << " max height: " << dec << size.maxHeight << endl; > + } > +} > + > +int ListFormatsTest::run() > +{ > + /* List all formats available on existing "Scaler" pads. */ > + std::map<unsigned int, std::vector<SizeRange>> formats; > + > + formats = scaler_->formats(0); > + if (formats.size() == 0) { When you check if a container is empty, I find .empty() to be more readable than .size() == 0. Apart from that (here and in two locations below) the patch looks good to me. > + cerr << "Failed to list formats on pad 0 of subdevice " > + << scaler_->deviceName() << endl; > + return TestFail; > + } > + for (auto it = formats.begin(); it != formats.end(); ++it) > + printFormats(0, it->first, it->second); > + > + formats = scaler_->formats(1); > + if (formats.size() == 0) { > + cerr << "Failed to list formats on pad 1 of subdevice " > + << scaler_->deviceName() << endl; > + return TestFail; > + } > + for (auto it = formats.begin(); it != formats.end(); ++it) > + printFormats(1, it->first, it->second); > + > + /* List format on a non-existing pad, format vector shall be empty. */ > + formats = scaler_->formats(2); > + if (formats.size() != 0) { > + cerr << "Listing formats on non-existing pad 2 of subdevice " > + << scaler_->deviceName() > + << " should return an empty format list" << endl; > + return TestFail; > + } > + > + return TestPass; > +} > + > +TEST_REGISTER(ListFormatsTest); > diff --git a/test/v4l2_subdevice/meson.build b/test/v4l2_subdevice/meson.build > index f45dca0d23d7..80cfbbbf9413 100644 > --- a/test/v4l2_subdevice/meson.build > +++ b/test/v4l2_subdevice/meson.build > @@ -1,4 +1,5 @@ > v4l2_subdevice_tests = [ > + [ 'list_formats', 'list_formats.cpp'], > [ 'test_formats', 'test_formats.cpp'], > ] >
diff --git a/test/v4l2_subdevice/list_formats.cpp b/test/v4l2_subdevice/list_formats.cpp new file mode 100644 index 000000000000..b4eab68f9f7e --- /dev/null +++ b/test/v4l2_subdevice/list_formats.cpp @@ -0,0 +1,81 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Copyright (C) 2019, Google Inc. + * + * libcamera V4L2 Subdevice format handling test + */ + +#include <iomanip> +#include <iostream> +#include <vector> + +#include "geometry.h" +#include "v4l2_subdevice.h" +#include "v4l2_subdevice_test.h" + +using namespace std; +using namespace libcamera; + +/* List image formats on the "Scaler" subdevice of vimc media device. */ + +class ListFormatsTest : public V4L2SubdeviceTest +{ +protected: + int run() override; + +private: + void printFormats(unsigned int pad, unsigned code, + std::vector<SizeRange> &formats); +}; + +void ListFormatsTest::printFormats(unsigned int pad, + unsigned int code, + std::vector<SizeRange> &sizes) +{ + cout << "Enumerate formats on pad " << pad << endl; + for (SizeRange &size : sizes) { + cout << " mbus code: 0x" << setfill('0') << setw(4) + << hex << code << endl; + cout << " min width: " << dec << size.minWidth << endl; + cout << " min height: " << dec << size.minHeight << endl; + cout << " max width: " << dec << size.maxWidth << endl; + cout << " max height: " << dec << size.maxHeight << endl; + } +} + +int ListFormatsTest::run() +{ + /* List all formats available on existing "Scaler" pads. */ + std::map<unsigned int, std::vector<SizeRange>> formats; + + formats = scaler_->formats(0); + if (formats.size() == 0) { + cerr << "Failed to list formats on pad 0 of subdevice " + << scaler_->deviceName() << endl; + return TestFail; + } + for (auto it = formats.begin(); it != formats.end(); ++it) + printFormats(0, it->first, it->second); + + formats = scaler_->formats(1); + if (formats.size() == 0) { + cerr << "Failed to list formats on pad 1 of subdevice " + << scaler_->deviceName() << endl; + return TestFail; + } + for (auto it = formats.begin(); it != formats.end(); ++it) + printFormats(1, it->first, it->second); + + /* List format on a non-existing pad, format vector shall be empty. */ + formats = scaler_->formats(2); + if (formats.size() != 0) { + cerr << "Listing formats on non-existing pad 2 of subdevice " + << scaler_->deviceName() + << " should return an empty format list" << endl; + return TestFail; + } + + return TestPass; +} + +TEST_REGISTER(ListFormatsTest); diff --git a/test/v4l2_subdevice/meson.build b/test/v4l2_subdevice/meson.build index f45dca0d23d7..80cfbbbf9413 100644 --- a/test/v4l2_subdevice/meson.build +++ b/test/v4l2_subdevice/meson.build @@ -1,4 +1,5 @@ v4l2_subdevice_tests = [ + [ 'list_formats', 'list_formats.cpp'], [ 'test_formats', 'test_formats.cpp'], ]