[libcamera-devel] [PATCH 13/17] test: stream: Add test for StreamFormat
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Mon Jun 10 08:56:33 CEST 2019
Hi Niklas,
Thank you for the patch.
On Mon, May 27, 2019 at 02:15:39AM +0200, Niklas Söderlund wrote:
> Test that both discrete and range based stream format descriptions
> result in good discrete frame sizes. The range based stream formats
> needs to be fitted with a table of resolutions inside libcamera so if
> that table is update this test might need to be updated.
s/is update/is updated/
>
> Signed-off-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> ---
> test/meson.build | 1 +
> test/stream/meson.build | 11 ++++
> test/stream/stream_formats.cpp | 102 +++++++++++++++++++++++++++++++++
> 3 files changed, 114 insertions(+)
> create mode 100644 test/stream/meson.build
> create mode 100644 test/stream/stream_formats.cpp
>
> diff --git a/test/meson.build b/test/meson.build
> index 609aeab80e7d0f4f..5370f3028a4fe39d 100644
> --- a/test/meson.build
> +++ b/test/meson.build
> @@ -4,6 +4,7 @@ subdir('camera')
> subdir('ipa')
> subdir('media_device')
> subdir('pipeline')
> +subdir('stream')
> subdir('v4l2_device')
> subdir('v4l2_subdevice')
>
> diff --git a/test/stream/meson.build b/test/stream/meson.build
> new file mode 100644
> index 0000000000000000..5b42fe32b341970f
> --- /dev/null
> +++ b/test/stream/meson.build
> @@ -0,0 +1,11 @@
> +stream_tests = [
> + [ 'stream_formats', 'stream_formats.cpp' ],
Four spaces for indentation please.
> +]
> +
> +foreach t : stream_tests
> + exe = executable(t[0], t[1],
> + dependencies : libcamera_dep,
> + link_with : test_libraries,
> + include_directories : test_includes_internal)
> + test(t[0], exe, suite: 'stream', is_parallel: false)
> +endforeach
> diff --git a/test/stream/stream_formats.cpp b/test/stream/stream_formats.cpp
> new file mode 100644
> index 0000000000000000..42a596cc69893b20
> --- /dev/null
> +++ b/test/stream/stream_formats.cpp
> @@ -0,0 +1,102 @@
> +/* SPDX-License-Identifier: GPL-2.0-or-later */
> +/*
> + * Copyright (C) 2019, Google Inc.
> + *
> + * stream_formats.cpp - StreamFormats test
> + */
> +
> +#include <iostream>
> +
> +#include <libcamera/geometry.h>
> +#include <libcamera/stream.h>
> +
> +#include "test.h"
> +
> +using namespace std;
> +using namespace libcamera;
> +
> +class StreamFormatsTest : public Test
> +{
> +protected:
> + int testSizes(std::string name, std::vector<Size> test, std::vector<Size> valid)
> + {
> + bool pass = false;
> +
> + for (Size &size : test) {
> + pass = false;
> +
> + for (Size &validSize : valid) {
> + if (size == validSize) {
> + pass = true;
> + break;
> + }
> + }
> +
> + if (!pass)
> + break;
> + }
> +
> + if (!pass) {
> + cout << "Failed " << name << endl;
> + cout << "Sizes to test:" << endl;
> + for (Size &size : test)
> + cout << size.toString() << endl;
> + cout << "Valid sizes:" << endl;
> + for (Size &size : valid)
> + cout << size.toString() << endl;
> +
> + return TestFail;
> + }
> +
> + return TestPass;
> + }
> +
> + int run()
> + {
> + /* Test discrete sizes */
> + StreamFormats discrete({
> + { 1, { SizeRange(100, 100), SizeRange(200, 200) } },
> + { 2, { SizeRange(300, 300), SizeRange(400, 400) } },
> + });
> +
> + if (testSizes("discrete 1", discrete.sizes(1),
> + { Size(100, 100), Size(200, 200) }))
> + return TestFail;
> + if (testSizes("discrete 2", discrete.sizes(2),
> + { Size(300, 300), Size(400, 400) }))
> + return TestFail;
> +
> + /* Test range sizes */
> + StreamFormats range({
> + { 1, { SizeRange(640, 480, 640, 480) } },
> + { 2, { SizeRange(640, 480, 800, 600, 8, 8) } },
> + { 3, { SizeRange(640, 480, 800, 600, 16, 16) } },
> + { 4, { SizeRange(128, 128, 4096, 4096, 128, 128) } },
> + });
> +
> + if (testSizes("range 1", range.sizes(1), { Size(640, 480) }))
> + return TestFail;
> +
> + if (testSizes("range 2", range.sizes(2), {
> + Size(640, 480), Size(720, 480),
> + Size(720, 576), Size(768, 480),
> + Size(800, 600) }))
> + return TestFail;
> +
> +
Extra blank line.
Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> + if (testSizes("range 3", range.sizes(3), {
> + Size(640, 480), Size(720, 480),
> + Size(720, 576), Size(768, 480) }))
> + return TestFail;
> +
> + if (testSizes("range 4", range.sizes(4), {
> + Size(1024, 768), Size(1280, 1024),
> + Size(2048, 1152), Size(2048, 1536),
> + Size(2560, 2048), Size(3200, 2048), }))
> + return TestFail;
> +
> + return TestPass;
> + }
> +};
> +
> +TEST_REGISTER(StreamFormatsTest)
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list