tests: stream: Add a colorspace adjustment test
ColorSpace can be adjusted based on the stream's pixelFormat being requested. Add a test to check the adjustment logic defined in ColorSpace::adjust(). Signed-off-by: Umang Jain <umang.jain@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
This commit is contained in:
parent
4aa71c2cd2
commit
bb67630b1c
2 changed files with 97 additions and 0 deletions
|
@ -1,6 +1,7 @@
|
|||
# SPDX-License-Identifier: CC0-1.0
|
||||
|
||||
stream_tests = [
|
||||
['stream_colorspace', 'stream_colorspace.cpp'],
|
||||
['stream_formats', 'stream_formats.cpp'],
|
||||
]
|
||||
|
||||
|
|
96
test/stream/stream_colorspace.cpp
Normal file
96
test/stream/stream_colorspace.cpp
Normal file
|
@ -0,0 +1,96 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/*
|
||||
* Copyright (C) 2022, Ideas on Board Oy.
|
||||
*
|
||||
* stream_colorspace.cpp - Stream colorspace adjustment test
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
|
||||
#include <libcamera/camera.h>
|
||||
#include <libcamera/formats.h>
|
||||
#include <libcamera/stream.h>
|
||||
|
||||
#include "test.h"
|
||||
|
||||
using namespace libcamera;
|
||||
using namespace std;
|
||||
|
||||
class TestCameraConfiguration : public CameraConfiguration
|
||||
{
|
||||
public:
|
||||
TestCameraConfiguration()
|
||||
: CameraConfiguration()
|
||||
{
|
||||
}
|
||||
|
||||
Status validate() override
|
||||
{
|
||||
return validateColorSpaces();
|
||||
}
|
||||
};
|
||||
|
||||
class StreamColorSpaceTest : public Test
|
||||
{
|
||||
protected:
|
||||
int run()
|
||||
{
|
||||
TestCameraConfiguration config;
|
||||
|
||||
StreamConfiguration cfg;
|
||||
cfg.size = { 640, 320 };
|
||||
cfg.pixelFormat = formats::YUV422;
|
||||
cfg.colorSpace = ColorSpace::Srgb;
|
||||
config.addConfiguration(cfg);
|
||||
|
||||
StreamConfiguration &streamCfg = config.at(0);
|
||||
|
||||
/*
|
||||
* YUV pixelformat with sRGB colorspace should have Y'CbCr encoding
|
||||
* adjusted.
|
||||
*/
|
||||
config.validate();
|
||||
if (streamCfg.colorSpace->ycbcrEncoding == ColorSpace::YcbcrEncoding::None) {
|
||||
cerr << "YUV format must have YCbCr encoding" << endl;
|
||||
return TestFail;
|
||||
}
|
||||
|
||||
/*
|
||||
* For YUV pixelFormat, encoding should be picked up according
|
||||
* to primaries and transfer function, if 'None' is specified.
|
||||
*/
|
||||
streamCfg.pixelFormat = formats::YUV422;
|
||||
streamCfg.colorSpace = ColorSpace(ColorSpace::Primaries::Rec2020,
|
||||
ColorSpace::TransferFunction::Rec709,
|
||||
ColorSpace::YcbcrEncoding::None,
|
||||
ColorSpace::Range::Limited);
|
||||
config.validate();
|
||||
if (streamCfg.colorSpace->ycbcrEncoding != ColorSpace::YcbcrEncoding::Rec2020) {
|
||||
cerr << "Failed to adjust colorspace Y'CbCr encoding according"
|
||||
<< " to primaries and transfer function" << endl;
|
||||
return TestFail;
|
||||
}
|
||||
|
||||
/* For RGB pixelFormat, Sycc colorspace should get adjusted to sRGB. */
|
||||
streamCfg.pixelFormat = formats::RGB888;
|
||||
streamCfg.colorSpace = ColorSpace::Sycc;
|
||||
config.validate();
|
||||
if (streamCfg.colorSpace != ColorSpace::Srgb) {
|
||||
cerr << "RGB format's colorspace should be set to Srgb" << endl;
|
||||
return TestFail;
|
||||
}
|
||||
|
||||
/* Raw formats should always set colorspace to ColorSpace::Raw. */
|
||||
streamCfg.pixelFormat = formats::SBGGR8;
|
||||
streamCfg.colorSpace = ColorSpace::Rec709;
|
||||
config.validate();
|
||||
if (streamCfg.colorSpace != ColorSpace::Raw) {
|
||||
cerr << "Raw format must always have Raw colorspace" << endl;
|
||||
return TestFail;
|
||||
}
|
||||
|
||||
return TestPass;
|
||||
}
|
||||
};
|
||||
|
||||
TEST_REGISTER(StreamColorSpaceTest)
|
Loading…
Add table
Add a link
Reference in a new issue