summaryrefslogtreecommitdiff
path: root/test/stream
diff options
context:
space:
mode:
authorNiklas Söderlund <niklas.soderlund@ragnatech.se>2019-04-30 20:28:31 +0200
committerNiklas Söderlund <niklas.soderlund@ragnatech.se>2019-06-19 12:25:12 +0200
commit5ed3a89480b5330e0032c13ba6edb2adcf5c3e7a (patch)
treef91f2531d412d0bf579043db8608a29cc7dbd06f /test/stream
parenta50289642948239722b0f45b2df097df20d43ae9 (diff)
test: stream: Add test for StreamFormat
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 updated this test might need to be updated. Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'test/stream')
-rw-r--r--test/stream/meson.build11
-rw-r--r--test/stream/stream_formats.cpp101
2 files changed, 112 insertions, 0 deletions
diff --git a/test/stream/meson.build b/test/stream/meson.build
new file mode 100644
index 00000000..2f2493de
--- /dev/null
+++ b/test/stream/meson.build
@@ -0,0 +1,11 @@
+stream_tests = [
+ [ 'stream_formats', 'stream_formats.cpp' ],
+]
+
+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 00000000..a391f5cd
--- /dev/null
+++ b/test/stream/stream_formats.cpp
@@ -0,0 +1,101 @@
+/* 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;
+
+ 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)