1 #ifdef ZIMG_X86
2 
3 #include <cmath>
4 #include "common/cpuinfo.h"
5 #include "common/pixel.h"
6 #include "common/x86/cpuinfo_x86.h"
7 #include "graph/image_filter.h"
8 #include "colorspace/colorspace.h"
9 
10 #include "gtest/gtest.h"
11 #include "graph/filter_validator.h"
12 
13 namespace {
14 
test_case(const zimg::colorspace::ColorspaceDefinition & csp_in,const zimg::colorspace::ColorspaceDefinition & csp_out,const char * const expected_sha1[3],double expected_snr)15 void test_case(const zimg::colorspace::ColorspaceDefinition &csp_in, const zimg::colorspace::ColorspaceDefinition &csp_out,
16                const char * const expected_sha1[3], double expected_snr)
17 {
18 	const unsigned w = 640;
19 	const unsigned h = 480;
20 
21 	if (!zimg::query_x86_capabilities().sse) {
22 		SUCCEED() << "sse not available, skipping";
23 		return;
24 	}
25 
26 	zimg::PixelFormat format = zimg::PixelType::FLOAT;
27 	auto builder = zimg::colorspace::ColorspaceConversion{ w, h }
28 		.set_csp_in(csp_in)
29 		.set_csp_out(csp_out);
30 
31 	auto filter_c = builder.set_cpu(zimg::CPUClass::NONE).create();
32 	auto filter_sse = builder.set_cpu(zimg::CPUClass::X86_SSE).create();
33 
34 	FilterValidator validator{ filter_sse.get(), w, h, format };
35 	validator.set_sha1(expected_sha1)
36 	         .set_ref_filter(filter_c.get(), expected_snr)
37 	         .set_yuv(csp_in.matrix != zimg::colorspace::MatrixCoefficients::RGB)
38 	         .validate();
39 }
40 
41 } // namespace
42 
43 
TEST(ColorspaceConversionSSETest,test_matrix)44 TEST(ColorspaceConversionSSETest, test_matrix)
45 {
46 	using namespace zimg::colorspace;
47 
48 	const char *expected_sha1[3] = {
49 		"0495adab9c82d98e73841e229a9b2041838fc0f2",
50 		"ece7edb1118d4b3063ad80f5d8febb6db7e9633a",
51 		"73a9ee951c7bde9ae0ada9b90afd1f7ce8b604df"
52 	};
53 	const double expected_snr = INFINITY;
54 
55 	test_case({ MatrixCoefficients::RGB, TransferCharacteristics::UNSPECIFIED, ColorPrimaries::UNSPECIFIED },
56 	          { MatrixCoefficients::REC_709, TransferCharacteristics::UNSPECIFIED, ColorPrimaries::UNSPECIFIED },
57 	          expected_sha1, expected_snr);
58 }
59 
60 #endif // ZIMG_X86
61