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>
This commit is contained in:
parent
a502896429
commit
5ed3a89480
3 changed files with 113 additions and 0 deletions
|
@ -4,6 +4,7 @@ subdir('camera')
|
||||||
subdir('ipa')
|
subdir('ipa')
|
||||||
subdir('media_device')
|
subdir('media_device')
|
||||||
subdir('pipeline')
|
subdir('pipeline')
|
||||||
|
subdir('stream')
|
||||||
subdir('v4l2_device')
|
subdir('v4l2_device')
|
||||||
subdir('v4l2_subdevice')
|
subdir('v4l2_subdevice')
|
||||||
|
|
||||||
|
|
11
test/stream/meson.build
Normal file
11
test/stream/meson.build
Normal file
|
@ -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
|
101
test/stream/stream_formats.cpp
Normal file
101
test/stream/stream_formats.cpp
Normal file
|
@ -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)
|
Loading…
Add table
Add a link
Reference in a new issue