summaryrefslogtreecommitdiff
path: root/test/stream/stream_formats.cpp
blob: 9353d0085e196a6c258b0e2eb95bb1d94453a9ef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-trash"><polyline points="3 6 5 6 21 6"></polyline><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path></svg>
' href='#n86'>86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 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({
			{ PixelFormat(1), { SizeRange({ 100, 100 }), SizeRange({ 200, 200 }) } },
			{ PixelFormat(2), { SizeRange({ 300, 300 }), SizeRange({ 400, 400 }) } },
		});

		if (testSizes("discrete 1", discrete.sizes(PixelFormat(1)),
			      { Size(100, 100), Size(200, 200) }))
			return TestFail;
		if (testSizes("discrete 2", discrete.sizes(PixelFormat(2)),
			      { Size(300, 300), Size(400, 400) }))
			return TestFail;

		/* Test range sizes */
		StreamFormats range({
			{ PixelFormat(1), { SizeRange({ 640, 480 }, { 640, 480 }) } },
			{ PixelFormat(2), { SizeRange({ 640, 480 }, { 800, 600 }, 8, 8) } },
			{ PixelFormat(3), { SizeRange({ 640, 480 }, { 800, 600 }, 16, 16) } },
			{ PixelFormat(4), { SizeRange({ 128, 128 }, { 4096, 4096 }, 128, 128) } },
		});

		if (testSizes("range 1", range.sizes(PixelFormat(1)), { Size(640, 480) }))
			return TestFail;

		if (testSizes("range 2", range.sizes(PixelFormat(2)), {
			      Size(640, 480), Size(720, 480),
			      Size(720, 576), Size(768, 480),
			      Size(800, 600) }))
			return TestFail;

		if (testSizes("range 3", range.sizes(PixelFormat(3)), {
			      Size(640, 480), Size(720, 480),
			      Size(720, 576), Size(768, 480) }))
			return TestFail;

		if (testSizes("range 4", range.sizes(PixelFormat(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)