aboutsummaryrefslogtreecommitdiff
path: root/tests/gainmapmath_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/gainmapmath_test.cpp')
-rw-r--r--tests/gainmapmath_test.cpp611
1 files changed, 313 insertions, 298 deletions
diff --git a/tests/gainmapmath_test.cpp b/tests/gainmapmath_test.cpp
index d0b838b..2158eb7 100644
--- a/tests/gainmapmath_test.cpp
+++ b/tests/gainmapmath_test.cpp
@@ -22,7 +22,7 @@
namespace ultrahdr {
class GainMapMathTest : public testing::Test {
-public:
+ public:
GainMapMathTest();
~GainMapMathTest();
@@ -31,50 +31,47 @@ public:
float YuvConversionEpsilon() { return 1.0f / (255.0f * 2.0f); }
Color Yuv420(uint8_t y, uint8_t u, uint8_t v) {
- return {{{ static_cast<float>(y) / 255.0f,
- (static_cast<float>(u) - 128.0f) / 255.0f,
- (static_cast<float>(v) - 128.0f) / 255.0f }}};
+ return {{{static_cast<float>(y) / 255.0f, (static_cast<float>(u) - 128.0f) / 255.0f,
+ (static_cast<float>(v) - 128.0f) / 255.0f}}};
}
Color P010(uint16_t y, uint16_t u, uint16_t v) {
- return {{{ (static_cast<float>(y) - 64.0f) / 876.0f,
- (static_cast<float>(u) - 64.0f) / 896.0f - 0.5f,
- (static_cast<float>(v) - 64.0f) / 896.0f - 0.5f }}};
+ return {
+ {{(static_cast<float>(y) - 64.0f) / 876.0f, (static_cast<float>(u) - 64.0f) / 896.0f - 0.5f,
+ (static_cast<float>(v) - 64.0f) / 896.0f - 0.5f}}};
}
- float Map(uint8_t e) {
- return static_cast<float>(e) / 255.0f;
- }
+ float Map(uint8_t e) { return static_cast<float>(e) / 255.0f; }
Color ColorMin(Color e1, Color e2) {
- return {{{ fminf(e1.r, e2.r), fminf(e1.g, e2.g), fminf(e1.b, e2.b) }}};
+ return {{{fminf(e1.r, e2.r), fminf(e1.g, e2.g), fminf(e1.b, e2.b)}}};
}
Color ColorMax(Color e1, Color e2) {
- return {{{ fmaxf(e1.r, e2.r), fmaxf(e1.g, e2.g), fmaxf(e1.b, e2.b) }}};
+ return {{{fmaxf(e1.r, e2.r), fmaxf(e1.g, e2.g), fmaxf(e1.b, e2.b)}}};
}
- Color RgbBlack() { return {{{ 0.0f, 0.0f, 0.0f }}}; }
- Color RgbWhite() { return {{{ 1.0f, 1.0f, 1.0f }}}; }
+ Color RgbBlack() { return {{{0.0f, 0.0f, 0.0f}}}; }
+ Color RgbWhite() { return {{{1.0f, 1.0f, 1.0f}}}; }
- Color RgbRed() { return {{{ 1.0f, 0.0f, 0.0f }}}; }
- Color RgbGreen() { return {{{ 0.0f, 1.0f, 0.0f }}}; }
- Color RgbBlue() { return {{{ 0.0f, 0.0f, 1.0f }}}; }
+ Color RgbRed() { return {{{1.0f, 0.0f, 0.0f}}}; }
+ Color RgbGreen() { return {{{0.0f, 1.0f, 0.0f}}}; }
+ Color RgbBlue() { return {{{0.0f, 0.0f, 1.0f}}}; }
- Color YuvBlack() { return {{{ 0.0f, 0.0f, 0.0f }}}; }
- Color YuvWhite() { return {{{ 1.0f, 0.0f, 0.0f }}}; }
+ Color YuvBlack() { return {{{0.0f, 0.0f, 0.0f}}}; }
+ Color YuvWhite() { return {{{1.0f, 0.0f, 0.0f}}}; }
- Color SrgbYuvRed() { return {{{ 0.2126f, -0.11457f, 0.5f }}}; }
- Color SrgbYuvGreen() { return {{{ 0.7152f, -0.38543f, -0.45415f }}}; }
- Color SrgbYuvBlue() { return {{{ 0.0722f, 0.5f, -0.04585f }}}; }
+ Color SrgbYuvRed() { return {{{0.2126f, -0.11457f, 0.5f}}}; }
+ Color SrgbYuvGreen() { return {{{0.7152f, -0.38543f, -0.45415f}}}; }
+ Color SrgbYuvBlue() { return {{{0.0722f, 0.5f, -0.04585f}}}; }
- Color P3YuvRed() { return {{{ 0.299f, -0.16874f, 0.5f }}}; }
- Color P3YuvGreen() { return {{{ 0.587f, -0.33126f, -0.41869f }}}; }
- Color P3YuvBlue() { return {{{ 0.114f, 0.5f, -0.08131f }}}; }
+ Color P3YuvRed() { return {{{0.299f, -0.16874f, 0.5f}}}; }
+ Color P3YuvGreen() { return {{{0.587f, -0.33126f, -0.41869f}}}; }
+ Color P3YuvBlue() { return {{{0.114f, 0.5f, -0.08131f}}}; }
- Color Bt2100YuvRed() { return {{{ 0.2627f, -0.13963f, 0.5f }}}; }
- Color Bt2100YuvGreen() { return {{{ 0.6780f, -0.36037f, -0.45979f }}}; }
- Color Bt2100YuvBlue() { return {{{ 0.0593f, 0.5f, -0.04021f }}}; }
+ Color Bt2100YuvRed() { return {{{0.2627f, -0.13963f, 0.5f}}}; }
+ Color Bt2100YuvGreen() { return {{{0.6780f, -0.36037f, -0.45979f}}}; }
+ Color Bt2100YuvBlue() { return {{{0.0593f, 0.5f, -0.04021f}}}; }
float SrgbYuvToLuminance(Color yuv_gamma, ColorCalculationFn luminanceFn) {
Color rgb_gamma = srgbYuvToRgb(yuv_gamma);
@@ -108,99 +105,168 @@ public:
jpegr_uncompressed_struct Yuv420Image() {
static uint8_t pixels[] = {
- // Y
- 0x00, 0x10, 0x20, 0x30,
- 0x01, 0x11, 0x21, 0x31,
- 0x02, 0x12, 0x22, 0x32,
- 0x03, 0x13, 0x23, 0x33,
- // U
- 0xA0, 0xA1,
- 0xA2, 0xA3,
- // V
- 0xB0, 0xB1,
- 0xB2, 0xB3,
+ // Y
+ 0x00,
+ 0x10,
+ 0x20,
+ 0x30,
+ 0x01,
+ 0x11,
+ 0x21,
+ 0x31,
+ 0x02,
+ 0x12,
+ 0x22,
+ 0x32,
+ 0x03,
+ 0x13,
+ 0x23,
+ 0x33,
+ // U
+ 0xA0,
+ 0xA1,
+ 0xA2,
+ 0xA3,
+ // V
+ 0xB0,
+ 0xB1,
+ 0xB2,
+ 0xB3,
};
- return { pixels, 4, 4, ULTRAHDR_COLORGAMUT_BT709, pixels + 16, 4, 2 };
+ return {pixels, 4, 4, ULTRAHDR_COLORGAMUT_BT709, pixels + 16, 4, 2};
}
Color (*Yuv420Colors())[4] {
static Color colors[4][4] = {
- {
- Yuv420(0x00, 0xA0, 0xB0), Yuv420(0x10, 0xA0, 0xB0),
- Yuv420(0x20, 0xA1, 0xB1), Yuv420(0x30, 0xA1, 0xB1),
- }, {
- Yuv420(0x01, 0xA0, 0xB0), Yuv420(0x11, 0xA0, 0xB0),
- Yuv420(0x21, 0xA1, 0xB1), Yuv420(0x31, 0xA1, 0xB1),
- }, {
- Yuv420(0x02, 0xA2, 0xB2), Yuv420(0x12, 0xA2, 0xB2),
- Yuv420(0x22, 0xA3, 0xB3), Yuv420(0x32, 0xA3, 0xB3),
- }, {
- Yuv420(0x03, 0xA2, 0xB2), Yuv420(0x13, 0xA2, 0xB2),
- Yuv420(0x23, 0xA3, 0xB3), Yuv420(0x33, 0xA3, 0xB3),
- },
+ {
+ Yuv420(0x00, 0xA0, 0xB0),
+ Yuv420(0x10, 0xA0, 0xB0),
+ Yuv420(0x20, 0xA1, 0xB1),
+ Yuv420(0x30, 0xA1, 0xB1),
+ },
+ {
+ Yuv420(0x01, 0xA0, 0xB0),
+ Yuv420(0x11, 0xA0, 0xB0),
+ Yuv420(0x21, 0xA1, 0xB1),
+ Yuv420(0x31, 0xA1, 0xB1),
+ },
+ {
+ Yuv420(0x02, 0xA2, 0xB2),
+ Yuv420(0x12, 0xA2, 0xB2),
+ Yuv420(0x22, 0xA3, 0xB3),
+ Yuv420(0x32, 0xA3, 0xB3),
+ },
+ {
+ Yuv420(0x03, 0xA2, 0xB2),
+ Yuv420(0x13, 0xA2, 0xB2),
+ Yuv420(0x23, 0xA3, 0xB3),
+ Yuv420(0x33, 0xA3, 0xB3),
+ },
};
return colors;
}
jpegr_uncompressed_struct P010Image() {
static uint16_t pixels[] = {
- // Y
- 0x00 << 6, 0x10 << 6, 0x20 << 6, 0x30 << 6,
- 0x01 << 6, 0x11 << 6, 0x21 << 6, 0x31 << 6,
- 0x02 << 6, 0x12 << 6, 0x22 << 6, 0x32 << 6,
- 0x03 << 6, 0x13 << 6, 0x23 << 6, 0x33 << 6,
- // UV
- 0xA0 << 6, 0xB0 << 6, 0xA1 << 6, 0xB1 << 6,
- 0xA2 << 6, 0xB2 << 6, 0xA3 << 6, 0xB3 << 6,
+ // Y
+ 0x00 << 6,
+ 0x10 << 6,
+ 0x20 << 6,
+ 0x30 << 6,
+ 0x01 << 6,
+ 0x11 << 6,
+ 0x21 << 6,
+ 0x31 << 6,
+ 0x02 << 6,
+ 0x12 << 6,
+ 0x22 << 6,
+ 0x32 << 6,
+ 0x03 << 6,
+ 0x13 << 6,
+ 0x23 << 6,
+ 0x33 << 6,
+ // UV
+ 0xA0 << 6,
+ 0xB0 << 6,
+ 0xA1 << 6,
+ 0xB1 << 6,
+ 0xA2 << 6,
+ 0xB2 << 6,
+ 0xA3 << 6,
+ 0xB3 << 6,
};
- return { pixels, 4, 4, ULTRAHDR_COLORGAMUT_BT709, pixels + 16, 4, 4 };
+ return {pixels, 4, 4, ULTRAHDR_COLORGAMUT_BT709, pixels + 16, 4, 4};
}
Color (*P010Colors())[4] {
static Color colors[4][4] = {
- {
- P010(0x00, 0xA0, 0xB0), P010(0x10, 0xA0, 0xB0),
- P010(0x20, 0xA1, 0xB1), P010(0x30, 0xA1, 0xB1),
- }, {
- P010(0x01, 0xA0, 0xB0), P010(0x11, 0xA0, 0xB0),
- P010(0x21, 0xA1, 0xB1), P010(0x31, 0xA1, 0xB1),
- }, {
- P010(0x02, 0xA2, 0xB2), P010(0x12, 0xA2, 0xB2),
- P010(0x22, 0xA3, 0xB3), P010(0x32, 0xA3, 0xB3),
- }, {
- P010(0x03, 0xA2, 0xB2), P010(0x13, 0xA2, 0xB2),
- P010(0x23, 0xA3, 0xB3), P010(0x33, 0xA3, 0xB3),
- },
+ {
+ P010(0x00, 0xA0, 0xB0),
+ P010(0x10, 0xA0, 0xB0),
+ P010(0x20, 0xA1, 0xB1),
+ P010(0x30, 0xA1, 0xB1),
+ },
+ {
+ P010(0x01, 0xA0, 0xB0),
+ P010(0x11, 0xA0, 0xB0),
+ P010(0x21, 0xA1, 0xB1),
+ P010(0x31, 0xA1, 0xB1),
+ },
+ {
+ P010(0x02, 0xA2, 0xB2),
+ P010(0x12, 0xA2, 0xB2),
+ P010(0x22, 0xA3, 0xB3),
+ P010(0x32, 0xA3, 0xB3),
+ },
+ {
+ P010(0x03, 0xA2, 0xB2),
+ P010(0x13, 0xA2, 0xB2),
+ P010(0x23, 0xA3, 0xB3),
+ P010(0x33, 0xA3, 0xB3),
+ },
};
return colors;
}
jpegr_uncompressed_struct MapImage() {
static uint8_t pixels[] = {
- 0x00, 0x10, 0x20, 0x30,
- 0x01, 0x11, 0x21, 0x31,
- 0x02, 0x12, 0x22, 0x32,
- 0x03, 0x13, 0x23, 0x33,
+ 0x00, 0x10, 0x20, 0x30, 0x01, 0x11, 0x21, 0x31,
+ 0x02, 0x12, 0x22, 0x32, 0x03, 0x13, 0x23, 0x33,
};
- return { pixels, 4, 4, ULTRAHDR_COLORGAMUT_UNSPECIFIED };
+ return {pixels, 4, 4, ULTRAHDR_COLORGAMUT_UNSPECIFIED};
}
float (*MapValues())[4] {
static float values[4][4] = {
- {
- Map(0x00), Map(0x10), Map(0x20), Map(0x30),
- }, {
- Map(0x01), Map(0x11), Map(0x21), Map(0x31),
- }, {
- Map(0x02), Map(0x12), Map(0x22), Map(0x32),
- }, {
- Map(0x03), Map(0x13), Map(0x23), Map(0x33),
- },
+ {
+ Map(0x00),
+ Map(0x10),
+ Map(0x20),
+ Map(0x30),
+ },
+ {
+ Map(0x01),
+ Map(0x11),
+ Map(0x21),
+ Map(0x31),
+ },
+ {
+ Map(0x02),
+ Map(0x12),
+ Map(0x22),
+ Map(0x32),
+ },
+ {
+ Map(0x03),
+ Map(0x13),
+ Map(0x23),
+ Map(0x33),
+ },
};
return values;
}
-protected:
+ protected:
virtual void SetUp();
virtual void TearDown();
};
@@ -211,9 +277,9 @@ GainMapMathTest::~GainMapMathTest() {}
void GainMapMathTest::SetUp() {}
void GainMapMathTest::TearDown() {}
-#define EXPECT_RGB_EQ(e1, e2) \
- EXPECT_FLOAT_EQ((e1).r, (e2).r); \
- EXPECT_FLOAT_EQ((e1).g, (e2).g); \
+#define EXPECT_RGB_EQ(e1, e2) \
+ EXPECT_FLOAT_EQ((e1).r, (e2).r); \
+ EXPECT_FLOAT_EQ((e1).g, (e2).g); \
EXPECT_FLOAT_EQ((e1).b, (e2).b)
#define EXPECT_RGB_NEAR(e1, e2) \
@@ -226,9 +292,9 @@ void GainMapMathTest::TearDown() {}
EXPECT_NEAR((e1).g, (e2).g, ComparisonEpsilon() * 10.0f); \
EXPECT_NEAR((e1).b, (e2).b, ComparisonEpsilon() * 10.0f)
-#define EXPECT_YUV_EQ(e1, e2) \
- EXPECT_FLOAT_EQ((e1).y, (e2).y); \
- EXPECT_FLOAT_EQ((e1).u, (e2).u); \
+#define EXPECT_YUV_EQ(e1, e2) \
+ EXPECT_FLOAT_EQ((e1).y, (e2).y); \
+ EXPECT_FLOAT_EQ((e1).u, (e2).u); \
EXPECT_FLOAT_EQ((e1).v, (e2).v)
#define EXPECT_YUV_NEAR(e1, e2) \
@@ -244,7 +310,7 @@ void GainMapMathTest::TearDown() {}
// TODO: a bunch of these tests can be parameterized.
TEST_F(GainMapMathTest, ColorConstruct) {
- Color e1 = {{{ 0.1f, 0.2f, 0.3f }}};
+ Color e1 = {{{0.1f, 0.2f, 0.3f}}};
EXPECT_FLOAT_EQ(e1.r, 0.1f);
EXPECT_FLOAT_EQ(e1.g, 0.2f);
@@ -256,7 +322,7 @@ TEST_F(GainMapMathTest, ColorConstruct) {
}
TEST_F(GainMapMathTest, ColorAddColor) {
- Color e1 = {{{ 0.1f, 0.2f, 0.3f }}};
+ Color e1 = {{{0.1f, 0.2f, 0.3f}}};
Color e2 = e1 + e1;
EXPECT_FLOAT_EQ(e2.r, e1.r * 2.0f);
@@ -270,7 +336,7 @@ TEST_F(GainMapMathTest, ColorAddColor) {
}
TEST_F(GainMapMathTest, ColorAddFloat) {
- Color e1 = {{{ 0.1f, 0.2f, 0.3f }}};
+ Color e1 = {{{0.1f, 0.2f, 0.3f}}};
Color e2 = e1 + 0.1f;
EXPECT_FLOAT_EQ(e2.r, e1.r + 0.1f);
@@ -284,7 +350,7 @@ TEST_F(GainMapMathTest, ColorAddFloat) {
}
TEST_F(GainMapMathTest, ColorSubtractColor) {
- Color e1 = {{{ 0.1f, 0.2f, 0.3f }}};
+ Color e1 = {{{0.1f, 0.2f, 0.3f}}};
Color e2 = e1 - e1;
EXPECT_FLOAT_EQ(e2.r, 0.0f);
@@ -298,7 +364,7 @@ TEST_F(GainMapMathTest, ColorSubtractColor) {
}
TEST_F(GainMapMathTest, ColorSubtractFloat) {
- Color e1 = {{{ 0.1f, 0.2f, 0.3f }}};
+ Color e1 = {{{0.1f, 0.2f, 0.3f}}};
Color e2 = e1 - 0.1f;
EXPECT_FLOAT_EQ(e2.r, e1.r - 0.1f);
@@ -312,7 +378,7 @@ TEST_F(GainMapMathTest, ColorSubtractFloat) {
}
TEST_F(GainMapMathTest, ColorMultiplyFloat) {
- Color e1 = {{{ 0.1f, 0.2f, 0.3f }}};
+ Color e1 = {{{0.1f, 0.2f, 0.3f}}};
Color e2 = e1 * 2.0f;
EXPECT_FLOAT_EQ(e2.r, e1.r * 2.0f);
@@ -326,7 +392,7 @@ TEST_F(GainMapMathTest, ColorMultiplyFloat) {
}
TEST_F(GainMapMathTest, ColorDivideFloat) {
- Color e1 = {{{ 0.1f, 0.2f, 0.3f }}};
+ Color e1 = {{{0.1f, 0.2f, 0.3f}}};
Color e2 = e1 / 2.0f;
EXPECT_FLOAT_EQ(e2.r, e1.r / 2.0f);
@@ -626,8 +692,8 @@ TEST_F(GainMapMathTest, Bt2100ToBt601YuvConversion) {
}
TEST_F(GainMapMathTest, TransformYuv420) {
- ColorTransformFn transforms[] = { yuv709To601, yuv709To2100, yuv601To709, yuv601To2100,
- yuv2100To709, yuv2100To601 };
+ ColorTransformFn transforms[] = {yuv709To601, yuv709To2100, yuv601To709,
+ yuv601To2100, yuv2100To709, yuv2100To601};
for (const ColorTransformFn& transform : transforms) {
jpegr_uncompressed_struct input = Yuv420Image();
@@ -655,10 +721,10 @@ TEST_F(GainMapMathTest, TransformYuv420) {
}
// modified pixels should be updated as intended by the transformYuv420 algorithm
- Color in1 = getYuv420Pixel(&input, 2, 2);
- Color in2 = getYuv420Pixel(&input, 3, 2);
- Color in3 = getYuv420Pixel(&input, 2, 3);
- Color in4 = getYuv420Pixel(&input, 3, 3);
+ Color in1 = getYuv420Pixel(&input, 2, 2);
+ Color in2 = getYuv420Pixel(&input, 3, 2);
+ Color in3 = getYuv420Pixel(&input, 2, 3);
+ Color in4 = getYuv420Pixel(&input, 3, 3);
Color out1 = getYuv420Pixel(&output, 2, 2);
Color out2 = getYuv420Pixel(&output, 3, 2);
Color out3 = getYuv420Pixel(&output, 2, 3);
@@ -690,8 +756,8 @@ TEST_F(GainMapMathTest, HlgOetf) {
EXPECT_NEAR(hlgOetf(0.5f), 0.87164f, ComparisonEpsilon());
EXPECT_FLOAT_EQ(hlgOetf(1.0f), 1.0f);
- Color e = {{{ 0.04167f, 0.08333f, 0.5f }}};
- Color e_gamma = {{{ 0.35357f, 0.5f, 0.87164f }}};
+ Color e = {{{0.04167f, 0.08333f, 0.5f}}};
+ Color e_gamma = {{{0.35357f, 0.5f, 0.87164f}}};
EXPECT_RGB_NEAR(hlgOetf(e), e_gamma);
}
@@ -702,8 +768,8 @@ TEST_F(GainMapMathTest, HlgInvOetf) {
EXPECT_NEAR(hlgInvOetf(0.75f), 0.26496f, ComparisonEpsilon());
EXPECT_FLOAT_EQ(hlgInvOetf(1.0f), 1.0f);
- Color e_gamma = {{{ 0.25f, 0.5f, 0.75f }}};
- Color e = {{{ 0.02083f, 0.08333f, 0.26496f }}};
+ Color e_gamma = {{{0.25f, 0.5f, 0.75f}}};
+ Color e = {{{0.02083f, 0.08333f, 0.26496f}}};
EXPECT_RGB_NEAR(hlgInvOetf(e_gamma), e);
}
@@ -722,8 +788,8 @@ TEST_F(GainMapMathTest, PqOetf) {
EXPECT_NEAR(pqOetf(0.99f), 0.99895f, ComparisonEpsilon());
EXPECT_FLOAT_EQ(pqOetf(1.0f), 1.0f);
- Color e = {{{ 0.01f, 0.5f, 0.99f }}};
- Color e_gamma = {{{ 0.50808f, 0.92655f, 0.99895f }}};
+ Color e = {{{0.01f, 0.5f, 0.99f}}};
+ Color e_gamma = {{{0.50808f, 0.92655f, 0.99895f}}};
EXPECT_RGB_NEAR(pqOetf(e), e_gamma);
}
@@ -734,50 +800,50 @@ TEST_F(GainMapMathTest, PqInvOetf) {
EXPECT_NEAR(pqInvOetf(0.99f), 0.90903f, ComparisonEpsilon());
EXPECT_FLOAT_EQ(pqInvOetf(1.0f), 1.0f);
- Color e_gamma = {{{ 0.01f, 0.5f, 0.99f }}};
- Color e = {{{ 2.31017e-7f, 0.00922f, 0.90903f }}};
+ Color e_gamma = {{{0.01f, 0.5f, 0.99f}}};
+ Color e = {{{2.31017e-7f, 0.00922f, 0.90903f}}};
EXPECT_RGB_NEAR(pqInvOetf(e_gamma), e);
}
TEST_F(GainMapMathTest, PqInvOetfLUT) {
- for (size_t idx = 0; idx < kPqInvOETFNumEntries; idx++) {
- float value = static_cast<float>(idx) / static_cast<float>(kPqInvOETFNumEntries - 1);
- EXPECT_FLOAT_EQ(pqInvOetf(value), pqInvOetfLUT(value));
- }
+ for (size_t idx = 0; idx < kPqInvOETFNumEntries; idx++) {
+ float value = static_cast<float>(idx) / static_cast<float>(kPqInvOETFNumEntries - 1);
+ EXPECT_FLOAT_EQ(pqInvOetf(value), pqInvOetfLUT(value));
+ }
}
TEST_F(GainMapMathTest, HlgInvOetfLUT) {
- for (size_t idx = 0; idx < kHlgInvOETFNumEntries; idx++) {
- float value = static_cast<float>(idx) / static_cast<float>(kHlgInvOETFNumEntries - 1);
- EXPECT_FLOAT_EQ(hlgInvOetf(value), hlgInvOetfLUT(value));
- }
+ for (size_t idx = 0; idx < kHlgInvOETFNumEntries; idx++) {
+ float value = static_cast<float>(idx) / static_cast<float>(kHlgInvOETFNumEntries - 1);
+ EXPECT_FLOAT_EQ(hlgInvOetf(value), hlgInvOetfLUT(value));
+ }
}
TEST_F(GainMapMathTest, pqOetfLUT) {
- for (size_t idx = 0; idx < kPqOETFNumEntries; idx++) {
- float value = static_cast<float>(idx) / static_cast<float>(kPqOETFNumEntries - 1);
- EXPECT_FLOAT_EQ(pqOetf(value), pqOetfLUT(value));
- }
+ for (size_t idx = 0; idx < kPqOETFNumEntries; idx++) {
+ float value = static_cast<float>(idx) / static_cast<float>(kPqOETFNumEntries - 1);
+ EXPECT_FLOAT_EQ(pqOetf(value), pqOetfLUT(value));
+ }
}
TEST_F(GainMapMathTest, hlgOetfLUT) {
- for (size_t idx = 0; idx < kHlgOETFNumEntries; idx++) {
- float value = static_cast<float>(idx) / static_cast<float>(kHlgOETFNumEntries - 1);
- EXPECT_FLOAT_EQ(hlgOetf(value), hlgOetfLUT(value));
- }
+ for (size_t idx = 0; idx < kHlgOETFNumEntries; idx++) {
+ float value = static_cast<float>(idx) / static_cast<float>(kHlgOETFNumEntries - 1);
+ EXPECT_FLOAT_EQ(hlgOetf(value), hlgOetfLUT(value));
+ }
}
TEST_F(GainMapMathTest, srgbInvOetfLUT) {
- for (size_t idx = 0; idx < kSrgbInvOETFNumEntries; idx++) {
- float value = static_cast<float>(idx) / static_cast<float>(kSrgbInvOETFNumEntries - 1);
- EXPECT_FLOAT_EQ(srgbInvOetf(value), srgbInvOetfLUT(value));
- }
+ for (size_t idx = 0; idx < kSrgbInvOETFNumEntries; idx++) {
+ float value = static_cast<float>(idx) / static_cast<float>(kSrgbInvOETFNumEntries - 1);
+ EXPECT_FLOAT_EQ(srgbInvOetf(value), srgbInvOetfLUT(value));
+ }
}
TEST_F(GainMapMathTest, applyGainLUT) {
for (int boost = 1; boost <= 10; boost++) {
- ultrahdr_metadata_struct metadata = { .maxContentBoost = static_cast<float>(boost),
- .minContentBoost = 1.0f / static_cast<float>(boost) };
+ ultrahdr_metadata_struct metadata = {.maxContentBoost = static_cast<float>(boost),
+ .minContentBoost = 1.0f / static_cast<float>(boost)};
GainLUT gainLUT(&metadata);
GainLUT gainLUTWithBoost(&metadata, metadata.maxContentBoost);
for (size_t idx = 0; idx < kGainFactorNumEntries; idx++) {
@@ -806,8 +872,8 @@ TEST_F(GainMapMathTest, applyGainLUT) {
}
for (int boost = 1; boost <= 10; boost++) {
- ultrahdr_metadata_struct metadata = { .maxContentBoost = static_cast<float>(boost),
- .minContentBoost = 1.0f };
+ ultrahdr_metadata_struct metadata = {.maxContentBoost = static_cast<float>(boost),
+ .minContentBoost = 1.0f};
GainLUT gainLUT(&metadata);
GainLUT gainLUTWithBoost(&metadata, metadata.maxContentBoost);
for (size_t idx = 0; idx < kGainFactorNumEntries; idx++) {
@@ -836,9 +902,9 @@ TEST_F(GainMapMathTest, applyGainLUT) {
}
for (int boost = 1; boost <= 10; boost++) {
- ultrahdr_metadata_struct metadata = {.maxContentBoost = static_cast<float>(boost),
- .minContentBoost = 1.0f /
- powf(static_cast<float>(boost), 1.0f / 3.0f)};
+ ultrahdr_metadata_struct metadata = {
+ .maxContentBoost = static_cast<float>(boost),
+ .minContentBoost = 1.0f / powf(static_cast<float>(boost), 1.0f / 3.0f)};
GainLUT gainLUT(&metadata);
GainLUT gainLUTWithBoost(&metadata, metadata.maxContentBoost);
for (size_t idx = 0; idx < kGainFactorNumEntries; idx++) {
@@ -880,26 +946,20 @@ TEST_F(GainMapMathTest, ColorConversionLookup) {
nullptr);
EXPECT_EQ(getHdrConversionFn(ULTRAHDR_COLORGAMUT_BT709, ULTRAHDR_COLORGAMUT_BT709),
identityConversion);
- EXPECT_EQ(getHdrConversionFn(ULTRAHDR_COLORGAMUT_BT709, ULTRAHDR_COLORGAMUT_P3),
- p3ToBt709);
+ EXPECT_EQ(getHdrConversionFn(ULTRAHDR_COLORGAMUT_BT709, ULTRAHDR_COLORGAMUT_P3), p3ToBt709);
EXPECT_EQ(getHdrConversionFn(ULTRAHDR_COLORGAMUT_BT709, ULTRAHDR_COLORGAMUT_BT2100),
bt2100ToBt709);
- EXPECT_EQ(getHdrConversionFn(ULTRAHDR_COLORGAMUT_P3, ULTRAHDR_COLORGAMUT_UNSPECIFIED),
- nullptr);
- EXPECT_EQ(getHdrConversionFn(ULTRAHDR_COLORGAMUT_P3, ULTRAHDR_COLORGAMUT_BT709),
- bt709ToP3);
- EXPECT_EQ(getHdrConversionFn(ULTRAHDR_COLORGAMUT_P3, ULTRAHDR_COLORGAMUT_P3),
- identityConversion);
- EXPECT_EQ(getHdrConversionFn(ULTRAHDR_COLORGAMUT_P3, ULTRAHDR_COLORGAMUT_BT2100),
- bt2100ToP3);
+ EXPECT_EQ(getHdrConversionFn(ULTRAHDR_COLORGAMUT_P3, ULTRAHDR_COLORGAMUT_UNSPECIFIED), nullptr);
+ EXPECT_EQ(getHdrConversionFn(ULTRAHDR_COLORGAMUT_P3, ULTRAHDR_COLORGAMUT_BT709), bt709ToP3);
+ EXPECT_EQ(getHdrConversionFn(ULTRAHDR_COLORGAMUT_P3, ULTRAHDR_COLORGAMUT_P3), identityConversion);
+ EXPECT_EQ(getHdrConversionFn(ULTRAHDR_COLORGAMUT_P3, ULTRAHDR_COLORGAMUT_BT2100), bt2100ToP3);
EXPECT_EQ(getHdrConversionFn(ULTRAHDR_COLORGAMUT_BT2100, ULTRAHDR_COLORGAMUT_UNSPECIFIED),
nullptr);
EXPECT_EQ(getHdrConversionFn(ULTRAHDR_COLORGAMUT_BT2100, ULTRAHDR_COLORGAMUT_BT709),
bt709ToBt2100);
- EXPECT_EQ(getHdrConversionFn(ULTRAHDR_COLORGAMUT_BT2100, ULTRAHDR_COLORGAMUT_P3),
- p3ToBt2100);
+ EXPECT_EQ(getHdrConversionFn(ULTRAHDR_COLORGAMUT_BT2100, ULTRAHDR_COLORGAMUT_P3), p3ToBt2100);
EXPECT_EQ(getHdrConversionFn(ULTRAHDR_COLORGAMUT_BT2100, ULTRAHDR_COLORGAMUT_BT2100),
identityConversion);
@@ -907,15 +967,13 @@ TEST_F(GainMapMathTest, ColorConversionLookup) {
nullptr);
EXPECT_EQ(getHdrConversionFn(ULTRAHDR_COLORGAMUT_UNSPECIFIED, ULTRAHDR_COLORGAMUT_BT709),
nullptr);
- EXPECT_EQ(getHdrConversionFn(ULTRAHDR_COLORGAMUT_UNSPECIFIED, ULTRAHDR_COLORGAMUT_P3),
- nullptr);
+ EXPECT_EQ(getHdrConversionFn(ULTRAHDR_COLORGAMUT_UNSPECIFIED, ULTRAHDR_COLORGAMUT_P3), nullptr);
EXPECT_EQ(getHdrConversionFn(ULTRAHDR_COLORGAMUT_UNSPECIFIED, ULTRAHDR_COLORGAMUT_BT2100),
nullptr);
}
TEST_F(GainMapMathTest, EncodeGain) {
- ultrahdr_metadata_struct metadata = { .maxContentBoost = 4.0f,
- .minContentBoost = 1.0f / 4.0f };
+ ultrahdr_metadata_struct metadata = {.maxContentBoost = 4.0f, .minContentBoost = 1.0f / 4.0f};
EXPECT_EQ(encodeGain(0.0f, 0.0f, &metadata), 127);
EXPECT_EQ(encodeGain(0.0f, 1.0f, &metadata), 127);
@@ -972,8 +1030,7 @@ TEST_F(GainMapMathTest, EncodeGain) {
}
TEST_F(GainMapMathTest, ApplyGain) {
- ultrahdr_metadata_struct metadata = { .maxContentBoost = 4.0f,
- .minContentBoost = 1.0f / 4.0f };
+ ultrahdr_metadata_struct metadata = {.maxContentBoost = 4.0f, .minContentBoost = 1.0f / 4.0f};
float displayBoost = metadata.maxContentBoost;
EXPECT_RGB_NEAR(applyGain(RgbBlack(), 0.0f, &metadata), RgbBlack());
@@ -1021,7 +1078,7 @@ TEST_F(GainMapMathTest, ApplyGain) {
EXPECT_RGB_NEAR(applyGain(RgbWhite(), 0.75f, &metadata), RgbWhite() * 4.0f);
EXPECT_RGB_NEAR(applyGain(RgbWhite(), 1.0f, &metadata), RgbWhite() * 8.0f);
- Color e = {{{ 0.0f, 0.5f, 1.0f }}};
+ Color e = {{{0.0f, 0.5f, 1.0f}}};
metadata.maxContentBoost = 4.0f;
metadata.minContentBoost = 1.0f / 4.0f;
@@ -1041,13 +1098,12 @@ TEST_F(GainMapMathTest, ApplyGain) {
applyGain(RgbGreen(), 1.0f, &metadata, displayBoost));
EXPECT_RGB_EQ(applyGain(RgbBlue(), 1.0f, &metadata),
applyGain(RgbBlue(), 1.0f, &metadata, displayBoost));
- EXPECT_RGB_EQ(applyGain(e, 1.0f, &metadata),
- applyGain(e, 1.0f, &metadata, displayBoost));
+ EXPECT_RGB_EQ(applyGain(e, 1.0f, &metadata), applyGain(e, 1.0f, &metadata, displayBoost));
}
TEST_F(GainMapMathTest, GetYuv420Pixel) {
jpegr_uncompressed_struct image = Yuv420Image();
- Color (*colors)[4] = Yuv420Colors();
+ Color(*colors)[4] = Yuv420Colors();
for (size_t y = 0; y < 4; ++y) {
for (size_t x = 0; x < 4; ++x) {
@@ -1058,7 +1114,7 @@ TEST_F(GainMapMathTest, GetYuv420Pixel) {
TEST_F(GainMapMathTest, GetP010Pixel) {
jpegr_uncompressed_struct image = P010Image();
- Color (*colors)[4] = P010Colors();
+ Color(*colors)[4] = P010Colors();
for (size_t y = 0; y < 4; ++y) {
for (size_t x = 0; x < 4; ++x) {
@@ -1069,13 +1125,13 @@ TEST_F(GainMapMathTest, GetP010Pixel) {
TEST_F(GainMapMathTest, SampleYuv420) {
jpegr_uncompressed_struct image = Yuv420Image();
- Color (*colors)[4] = Yuv420Colors();
+ Color(*colors)[4] = Yuv420Colors();
static const size_t kMapScaleFactor = 2;
for (size_t y = 0; y < 4 / kMapScaleFactor; ++y) {
for (size_t x = 0; x < 4 / kMapScaleFactor; ++x) {
- Color min = {{{ 1.0f, 1.0f, 1.0f }}};
- Color max = {{{ -1.0f, -1.0f, -1.0f }}};
+ Color min = {{{1.0f, 1.0f, 1.0f}}};
+ Color max = {{{-1.0f, -1.0f, -1.0f}}};
for (size_t dy = 0; dy < kMapScaleFactor; ++dy) {
for (size_t dx = 0; dx < kMapScaleFactor; ++dx) {
@@ -1095,13 +1151,13 @@ TEST_F(GainMapMathTest, SampleYuv420) {
TEST_F(GainMapMathTest, SampleP010) {
jpegr_uncompressed_struct image = P010Image();
- Color (*colors)[4] = P010Colors();
+ Color(*colors)[4] = P010Colors();
static const size_t kMapScaleFactor = 2;
for (size_t y = 0; y < 4 / kMapScaleFactor; ++y) {
for (size_t x = 0; x < 4 / kMapScaleFactor; ++x) {
- Color min = {{{ 1.0f, 1.0f, 1.0f }}};
- Color max = {{{ -1.0f, -1.0f, -1.0f }}};
+ Color min = {{{1.0f, 1.0f, 1.0f}}};
+ Color max = {{{-1.0f, -1.0f, -1.0f}}};
for (size_t dy = 0; dy < kMapScaleFactor; ++dy) {
for (size_t dx = 0; dx < kMapScaleFactor; ++dx) {
@@ -1121,7 +1177,7 @@ TEST_F(GainMapMathTest, SampleP010) {
TEST_F(GainMapMathTest, SampleMap) {
jpegr_uncompressed_struct image = MapImage();
- float (*values)[4] = MapValues();
+ float(*values)[4] = MapValues();
static const size_t kMapScaleFactor = 2;
ShepardsIDW idwTable(kMapScaleFactor);
@@ -1166,22 +1222,21 @@ TEST_F(GainMapMathTest, ColorToRgba1010102) {
EXPECT_EQ(colorToRgba1010102(RgbGreen()), 0x3 << 30 | 0x3ff << 10);
EXPECT_EQ(colorToRgba1010102(RgbBlue()), 0x3 << 30 | 0x3ff << 20);
- Color e_gamma = {{{ 0.1f, 0.2f, 0.3f }}};
+ Color e_gamma = {{{0.1f, 0.2f, 0.3f}}};
EXPECT_EQ(colorToRgba1010102(e_gamma),
- 0x3 << 30
- | static_cast<uint32_t>(0.1f * static_cast<float>(0x3ff))
- | static_cast<uint32_t>(0.2f * static_cast<float>(0x3ff)) << 10
- | static_cast<uint32_t>(0.3f * static_cast<float>(0x3ff)) << 20);
+ 0x3 << 30 | static_cast<uint32_t>(0.1f * static_cast<float>(0x3ff)) |
+ static_cast<uint32_t>(0.2f * static_cast<float>(0x3ff)) << 10 |
+ static_cast<uint32_t>(0.3f * static_cast<float>(0x3ff)) << 20);
}
TEST_F(GainMapMathTest, ColorToRgbaF16) {
- EXPECT_EQ(colorToRgbaF16(RgbBlack()), ((uint64_t) 0x3C00) << 48);
+ EXPECT_EQ(colorToRgbaF16(RgbBlack()), ((uint64_t)0x3C00) << 48);
EXPECT_EQ(colorToRgbaF16(RgbWhite()), 0x3C003C003C003C00);
- EXPECT_EQ(colorToRgbaF16(RgbRed()), (((uint64_t) 0x3C00) << 48) | ((uint64_t) 0x3C00));
- EXPECT_EQ(colorToRgbaF16(RgbGreen()), (((uint64_t) 0x3C00) << 48) | (((uint64_t) 0x3C00) << 16));
- EXPECT_EQ(colorToRgbaF16(RgbBlue()), (((uint64_t) 0x3C00) << 48) | (((uint64_t) 0x3C00) << 32));
+ EXPECT_EQ(colorToRgbaF16(RgbRed()), (((uint64_t)0x3C00) << 48) | ((uint64_t)0x3C00));
+ EXPECT_EQ(colorToRgbaF16(RgbGreen()), (((uint64_t)0x3C00) << 48) | (((uint64_t)0x3C00) << 16));
+ EXPECT_EQ(colorToRgbaF16(RgbBlue()), (((uint64_t)0x3C00) << 48) | (((uint64_t)0x3C00) << 32));
- Color e_gamma = {{{ 0.1f, 0.2f, 0.3f }}};
+ Color e_gamma = {{{0.1f, 0.2f, 0.3f}}};
EXPECT_EQ(colorToRgbaF16(e_gamma), 0x3C0034CD32662E66);
}
@@ -1190,16 +1245,14 @@ TEST_F(GainMapMathTest, Float32ToFloat16) {
EXPECT_EQ(floatToHalf(0.0f), 0x0);
EXPECT_EQ(floatToHalf(1.0f), 0x3C00);
EXPECT_EQ(floatToHalf(-1.0f), 0xBC00);
- EXPECT_EQ(floatToHalf(0x1.fffffep127f), 0x7FFF); // float max
+ EXPECT_EQ(floatToHalf(0x1.fffffep127f), 0x7FFF); // float max
EXPECT_EQ(floatToHalf(-0x1.fffffep127f), 0xFFFF); // float min
- EXPECT_EQ(floatToHalf(0x1.0p-126f), 0x0); // float zero
+ EXPECT_EQ(floatToHalf(0x1.0p-126f), 0x0); // float zero
}
TEST_F(GainMapMathTest, GenerateMapLuminanceSrgb) {
- EXPECT_FLOAT_EQ(SrgbYuvToLuminance(YuvBlack(), srgbLuminance),
- 0.0f);
- EXPECT_FLOAT_EQ(SrgbYuvToLuminance(YuvWhite(), srgbLuminance),
- kSdrWhiteNits);
+ EXPECT_FLOAT_EQ(SrgbYuvToLuminance(YuvBlack(), srgbLuminance), 0.0f);
+ EXPECT_FLOAT_EQ(SrgbYuvToLuminance(YuvWhite(), srgbLuminance), kSdrWhiteNits);
EXPECT_NEAR(SrgbYuvToLuminance(SrgbYuvRed(), srgbLuminance),
srgbLuminance(RgbRed()) * kSdrWhiteNits, LuminanceEpsilon());
EXPECT_NEAR(SrgbYuvToLuminance(SrgbYuvGreen(), srgbLuminance),
@@ -1209,12 +1262,10 @@ TEST_F(GainMapMathTest, GenerateMapLuminanceSrgb) {
}
TEST_F(GainMapMathTest, GenerateMapLuminanceSrgbP3) {
- EXPECT_FLOAT_EQ(SrgbYuvToLuminance(YuvBlack(), p3Luminance),
- 0.0f);
- EXPECT_FLOAT_EQ(SrgbYuvToLuminance(YuvWhite(), p3Luminance),
- kSdrWhiteNits);
- EXPECT_NEAR(SrgbYuvToLuminance(SrgbYuvRed(), p3Luminance),
- p3Luminance(RgbRed()) * kSdrWhiteNits, LuminanceEpsilon());
+ EXPECT_FLOAT_EQ(SrgbYuvToLuminance(YuvBlack(), p3Luminance), 0.0f);
+ EXPECT_FLOAT_EQ(SrgbYuvToLuminance(YuvWhite(), p3Luminance), kSdrWhiteNits);
+ EXPECT_NEAR(SrgbYuvToLuminance(SrgbYuvRed(), p3Luminance), p3Luminance(RgbRed()) * kSdrWhiteNits,
+ LuminanceEpsilon());
EXPECT_NEAR(SrgbYuvToLuminance(SrgbYuvGreen(), p3Luminance),
p3Luminance(RgbGreen()) * kSdrWhiteNits, LuminanceEpsilon());
EXPECT_NEAR(SrgbYuvToLuminance(SrgbYuvBlue(), p3Luminance),
@@ -1222,10 +1273,8 @@ TEST_F(GainMapMathTest, GenerateMapLuminanceSrgbP3) {
}
TEST_F(GainMapMathTest, GenerateMapLuminanceSrgbBt2100) {
- EXPECT_FLOAT_EQ(SrgbYuvToLuminance(YuvBlack(), bt2100Luminance),
- 0.0f);
- EXPECT_FLOAT_EQ(SrgbYuvToLuminance(YuvWhite(), bt2100Luminance),
- kSdrWhiteNits);
+ EXPECT_FLOAT_EQ(SrgbYuvToLuminance(YuvBlack(), bt2100Luminance), 0.0f);
+ EXPECT_FLOAT_EQ(SrgbYuvToLuminance(YuvWhite(), bt2100Luminance), kSdrWhiteNits);
EXPECT_NEAR(SrgbYuvToLuminance(SrgbYuvRed(), bt2100Luminance),
bt2100Luminance(RgbRed()) * kSdrWhiteNits, LuminanceEpsilon());
EXPECT_NEAR(SrgbYuvToLuminance(SrgbYuvGreen(), bt2100Luminance),
@@ -1235,125 +1284,91 @@ TEST_F(GainMapMathTest, GenerateMapLuminanceSrgbBt2100) {
}
TEST_F(GainMapMathTest, GenerateMapLuminanceHlg) {
- EXPECT_FLOAT_EQ(Bt2100YuvToLuminance(YuvBlack(), hlgInvOetf, identityConversion,
- bt2100Luminance, kHlgMaxNits),
+ EXPECT_FLOAT_EQ(Bt2100YuvToLuminance(YuvBlack(), hlgInvOetf, identityConversion, bt2100Luminance,
+ kHlgMaxNits),
0.0f);
- EXPECT_FLOAT_EQ(Bt2100YuvToLuminance(YuvWhite(), hlgInvOetf, identityConversion,
- bt2100Luminance, kHlgMaxNits),
+ EXPECT_FLOAT_EQ(Bt2100YuvToLuminance(YuvWhite(), hlgInvOetf, identityConversion, bt2100Luminance,
+ kHlgMaxNits),
kHlgMaxNits);
- EXPECT_NEAR(Bt2100YuvToLuminance(Bt2100YuvRed(), hlgInvOetf, identityConversion,
- bt2100Luminance, kHlgMaxNits),
+ EXPECT_NEAR(Bt2100YuvToLuminance(Bt2100YuvRed(), hlgInvOetf, identityConversion, bt2100Luminance,
+ kHlgMaxNits),
bt2100Luminance(RgbRed()) * kHlgMaxNits, LuminanceEpsilon());
EXPECT_NEAR(Bt2100YuvToLuminance(Bt2100YuvGreen(), hlgInvOetf, identityConversion,
bt2100Luminance, kHlgMaxNits),
bt2100Luminance(RgbGreen()) * kHlgMaxNits, LuminanceEpsilon());
- EXPECT_NEAR(Bt2100YuvToLuminance(Bt2100YuvBlue(), hlgInvOetf, identityConversion,
- bt2100Luminance, kHlgMaxNits),
+ EXPECT_NEAR(Bt2100YuvToLuminance(Bt2100YuvBlue(), hlgInvOetf, identityConversion, bt2100Luminance,
+ kHlgMaxNits),
bt2100Luminance(RgbBlue()) * kHlgMaxNits, LuminanceEpsilon());
}
TEST_F(GainMapMathTest, GenerateMapLuminancePq) {
- EXPECT_FLOAT_EQ(Bt2100YuvToLuminance(YuvBlack(), pqInvOetf, identityConversion,
- bt2100Luminance, kPqMaxNits),
- 0.0f);
- EXPECT_FLOAT_EQ(Bt2100YuvToLuminance(YuvWhite(), pqInvOetf, identityConversion,
- bt2100Luminance, kPqMaxNits),
- kPqMaxNits);
- EXPECT_NEAR(Bt2100YuvToLuminance(Bt2100YuvRed(), pqInvOetf, identityConversion,
- bt2100Luminance, kPqMaxNits),
+ EXPECT_FLOAT_EQ(
+ Bt2100YuvToLuminance(YuvBlack(), pqInvOetf, identityConversion, bt2100Luminance, kPqMaxNits),
+ 0.0f);
+ EXPECT_FLOAT_EQ(
+ Bt2100YuvToLuminance(YuvWhite(), pqInvOetf, identityConversion, bt2100Luminance, kPqMaxNits),
+ kPqMaxNits);
+ EXPECT_NEAR(Bt2100YuvToLuminance(Bt2100YuvRed(), pqInvOetf, identityConversion, bt2100Luminance,
+ kPqMaxNits),
bt2100Luminance(RgbRed()) * kPqMaxNits, LuminanceEpsilon());
- EXPECT_NEAR(Bt2100YuvToLuminance(Bt2100YuvGreen(), pqInvOetf, identityConversion,
- bt2100Luminance, kPqMaxNits),
+ EXPECT_NEAR(Bt2100YuvToLuminance(Bt2100YuvGreen(), pqInvOetf, identityConversion, bt2100Luminance,
+ kPqMaxNits),
bt2100Luminance(RgbGreen()) * kPqMaxNits, LuminanceEpsilon());
- EXPECT_NEAR(Bt2100YuvToLuminance(Bt2100YuvBlue(), pqInvOetf, identityConversion,
- bt2100Luminance, kPqMaxNits),
+ EXPECT_NEAR(Bt2100YuvToLuminance(Bt2100YuvBlue(), pqInvOetf, identityConversion, bt2100Luminance,
+ kPqMaxNits),
bt2100Luminance(RgbBlue()) * kPqMaxNits, LuminanceEpsilon());
}
TEST_F(GainMapMathTest, ApplyMap) {
- ultrahdr_metadata_struct metadata = { .maxContentBoost = 8.0f,
- .minContentBoost = 1.0f / 8.0f };
-
- EXPECT_RGB_EQ(Recover(YuvWhite(), 1.0f, &metadata),
- RgbWhite() * 8.0f);
- EXPECT_RGB_EQ(Recover(YuvBlack(), 1.0f, &metadata),
- RgbBlack());
- EXPECT_RGB_CLOSE(Recover(SrgbYuvRed(), 1.0f, &metadata),
- RgbRed() * 8.0f);
- EXPECT_RGB_CLOSE(Recover(SrgbYuvGreen(), 1.0f, &metadata),
- RgbGreen() * 8.0f);
- EXPECT_RGB_CLOSE(Recover(SrgbYuvBlue(), 1.0f, &metadata),
- RgbBlue() * 8.0f);
-
- EXPECT_RGB_EQ(Recover(YuvWhite(), 0.75f, &metadata),
- RgbWhite() * sqrt(8.0f));
- EXPECT_RGB_EQ(Recover(YuvBlack(), 0.75f, &metadata),
- RgbBlack());
- EXPECT_RGB_CLOSE(Recover(SrgbYuvRed(), 0.75f, &metadata),
- RgbRed() * sqrt(8.0f));
- EXPECT_RGB_CLOSE(Recover(SrgbYuvGreen(), 0.75f, &metadata),
- RgbGreen() * sqrt(8.0f));
- EXPECT_RGB_CLOSE(Recover(SrgbYuvBlue(), 0.75f, &metadata),
- RgbBlue() * sqrt(8.0f));
-
- EXPECT_RGB_EQ(Recover(YuvWhite(), 0.5f, &metadata),
- RgbWhite());
- EXPECT_RGB_EQ(Recover(YuvBlack(), 0.5f, &metadata),
- RgbBlack());
- EXPECT_RGB_CLOSE(Recover(SrgbYuvRed(), 0.5f, &metadata),
- RgbRed());
- EXPECT_RGB_CLOSE(Recover(SrgbYuvGreen(), 0.5f, &metadata),
- RgbGreen());
- EXPECT_RGB_CLOSE(Recover(SrgbYuvBlue(), 0.5f, &metadata),
- RgbBlue());
-
- EXPECT_RGB_EQ(Recover(YuvWhite(), 0.25f, &metadata),
- RgbWhite() / sqrt(8.0f));
- EXPECT_RGB_EQ(Recover(YuvBlack(), 0.25f, &metadata),
- RgbBlack());
- EXPECT_RGB_CLOSE(Recover(SrgbYuvRed(), 0.25f, &metadata),
- RgbRed() / sqrt(8.0f));
- EXPECT_RGB_CLOSE(Recover(SrgbYuvGreen(), 0.25f, &metadata),
- RgbGreen() / sqrt(8.0f));
- EXPECT_RGB_CLOSE(Recover(SrgbYuvBlue(), 0.25f, &metadata),
- RgbBlue() / sqrt(8.0f));
-
- EXPECT_RGB_EQ(Recover(YuvWhite(), 0.0f, &metadata),
- RgbWhite() / 8.0f);
- EXPECT_RGB_EQ(Recover(YuvBlack(), 0.0f, &metadata),
- RgbBlack());
- EXPECT_RGB_CLOSE(Recover(SrgbYuvRed(), 0.0f, &metadata),
- RgbRed() / 8.0f);
- EXPECT_RGB_CLOSE(Recover(SrgbYuvGreen(), 0.0f, &metadata),
- RgbGreen() / 8.0f);
- EXPECT_RGB_CLOSE(Recover(SrgbYuvBlue(), 0.0f, &metadata),
- RgbBlue() / 8.0f);
+ ultrahdr_metadata_struct metadata = {.maxContentBoost = 8.0f, .minContentBoost = 1.0f / 8.0f};
+
+ EXPECT_RGB_EQ(Recover(YuvWhite(), 1.0f, &metadata), RgbWhite() * 8.0f);
+ EXPECT_RGB_EQ(Recover(YuvBlack(), 1.0f, &metadata), RgbBlack());
+ EXPECT_RGB_CLOSE(Recover(SrgbYuvRed(), 1.0f, &metadata), RgbRed() * 8.0f);
+ EXPECT_RGB_CLOSE(Recover(SrgbYuvGreen(), 1.0f, &metadata), RgbGreen() * 8.0f);
+ EXPECT_RGB_CLOSE(Recover(SrgbYuvBlue(), 1.0f, &metadata), RgbBlue() * 8.0f);
+
+ EXPECT_RGB_EQ(Recover(YuvWhite(), 0.75f, &metadata), RgbWhite() * sqrt(8.0f));
+ EXPECT_RGB_EQ(Recover(YuvBlack(), 0.75f, &metadata), RgbBlack());
+ EXPECT_RGB_CLOSE(Recover(SrgbYuvRed(), 0.75f, &metadata), RgbRed() * sqrt(8.0f));
+ EXPECT_RGB_CLOSE(Recover(SrgbYuvGreen(), 0.75f, &metadata), RgbGreen() * sqrt(8.0f));
+ EXPECT_RGB_CLOSE(Recover(SrgbYuvBlue(), 0.75f, &metadata), RgbBlue() * sqrt(8.0f));
+
+ EXPECT_RGB_EQ(Recover(YuvWhite(), 0.5f, &metadata), RgbWhite());
+ EXPECT_RGB_EQ(Recover(YuvBlack(), 0.5f, &metadata), RgbBlack());
+ EXPECT_RGB_CLOSE(Recover(SrgbYuvRed(), 0.5f, &metadata), RgbRed());
+ EXPECT_RGB_CLOSE(Recover(SrgbYuvGreen(), 0.5f, &metadata), RgbGreen());
+ EXPECT_RGB_CLOSE(Recover(SrgbYuvBlue(), 0.5f, &metadata), RgbBlue());
+
+ EXPECT_RGB_EQ(Recover(YuvWhite(), 0.25f, &metadata), RgbWhite() / sqrt(8.0f));
+ EXPECT_RGB_EQ(Recover(YuvBlack(), 0.25f, &metadata), RgbBlack());
+ EXPECT_RGB_CLOSE(Recover(SrgbYuvRed(), 0.25f, &metadata), RgbRed() / sqrt(8.0f));
+ EXPECT_RGB_CLOSE(Recover(SrgbYuvGreen(), 0.25f, &metadata), RgbGreen() / sqrt(8.0f));
+ EXPECT_RGB_CLOSE(Recover(SrgbYuvBlue(), 0.25f, &metadata), RgbBlue() / sqrt(8.0f));
+
+ EXPECT_RGB_EQ(Recover(YuvWhite(), 0.0f, &metadata), RgbWhite() / 8.0f);
+ EXPECT_RGB_EQ(Recover(YuvBlack(), 0.0f, &metadata), RgbBlack());
+ EXPECT_RGB_CLOSE(Recover(SrgbYuvRed(), 0.0f, &metadata), RgbRed() / 8.0f);
+ EXPECT_RGB_CLOSE(Recover(SrgbYuvGreen(), 0.0f, &metadata), RgbGreen() / 8.0f);
+ EXPECT_RGB_CLOSE(Recover(SrgbYuvBlue(), 0.0f, &metadata), RgbBlue() / 8.0f);
metadata.maxContentBoost = 8.0f;
metadata.minContentBoost = 1.0f;
- EXPECT_RGB_EQ(Recover(YuvWhite(), 1.0f, &metadata),
- RgbWhite() * 8.0f);
- EXPECT_RGB_EQ(Recover(YuvWhite(), 2.0f / 3.0f, &metadata),
- RgbWhite() * 4.0f);
- EXPECT_RGB_EQ(Recover(YuvWhite(), 1.0f / 3.0f, &metadata),
- RgbWhite() * 2.0f);
- EXPECT_RGB_EQ(Recover(YuvWhite(), 0.0f, &metadata),
- RgbWhite());
+ EXPECT_RGB_EQ(Recover(YuvWhite(), 1.0f, &metadata), RgbWhite() * 8.0f);
+ EXPECT_RGB_EQ(Recover(YuvWhite(), 2.0f / 3.0f, &metadata), RgbWhite() * 4.0f);
+ EXPECT_RGB_EQ(Recover(YuvWhite(), 1.0f / 3.0f, &metadata), RgbWhite() * 2.0f);
+ EXPECT_RGB_EQ(Recover(YuvWhite(), 0.0f, &metadata), RgbWhite());
metadata.maxContentBoost = 8.0f;
- metadata.minContentBoost = 0.5f;;
-
- EXPECT_RGB_EQ(Recover(YuvWhite(), 1.0f, &metadata),
- RgbWhite() * 8.0f);
- EXPECT_RGB_EQ(Recover(YuvWhite(), 0.75, &metadata),
- RgbWhite() * 4.0f);
- EXPECT_RGB_EQ(Recover(YuvWhite(), 0.5f, &metadata),
- RgbWhite() * 2.0f);
- EXPECT_RGB_EQ(Recover(YuvWhite(), 0.25f, &metadata),
- RgbWhite());
- EXPECT_RGB_EQ(Recover(YuvWhite(), 0.0f, &metadata),
- RgbWhite() / 2.0f);
+ metadata.minContentBoost = 0.5f;
+ ;
+
+ EXPECT_RGB_EQ(Recover(YuvWhite(), 1.0f, &metadata), RgbWhite() * 8.0f);
+ EXPECT_RGB_EQ(Recover(YuvWhite(), 0.75, &metadata), RgbWhite() * 4.0f);
+ EXPECT_RGB_EQ(Recover(YuvWhite(), 0.5f, &metadata), RgbWhite() * 2.0f);
+ EXPECT_RGB_EQ(Recover(YuvWhite(), 0.25f, &metadata), RgbWhite());
+ EXPECT_RGB_EQ(Recover(YuvWhite(), 0.0f, &metadata), RgbWhite() / 2.0f);
}
-} // namespace ultrahdr
+} // namespace ultrahdr