1*89a0ef05SAndroid Build Coastguard Worker /*
2*89a0ef05SAndroid Build Coastguard Worker * Copyright 2024 The Android Open Source Project
3*89a0ef05SAndroid Build Coastguard Worker *
4*89a0ef05SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*89a0ef05SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*89a0ef05SAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*89a0ef05SAndroid Build Coastguard Worker *
8*89a0ef05SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*89a0ef05SAndroid Build Coastguard Worker *
10*89a0ef05SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*89a0ef05SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*89a0ef05SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*89a0ef05SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*89a0ef05SAndroid Build Coastguard Worker * limitations under the License.
15*89a0ef05SAndroid Build Coastguard Worker */
16*89a0ef05SAndroid Build Coastguard Worker
17*89a0ef05SAndroid Build Coastguard Worker #include <gtest/gtest.h>
18*89a0ef05SAndroid Build Coastguard Worker #include <vector>
19*89a0ef05SAndroid Build Coastguard Worker
20*89a0ef05SAndroid Build Coastguard Worker #include "ultrahdr/gainmapmetadata.h"
21*89a0ef05SAndroid Build Coastguard Worker
22*89a0ef05SAndroid Build Coastguard Worker namespace ultrahdr {
23*89a0ef05SAndroid Build Coastguard Worker
24*89a0ef05SAndroid Build Coastguard Worker class GainMapMetadataTest : public testing::Test {
25*89a0ef05SAndroid Build Coastguard Worker public:
26*89a0ef05SAndroid Build Coastguard Worker GainMapMetadataTest();
27*89a0ef05SAndroid Build Coastguard Worker ~GainMapMetadataTest();
28*89a0ef05SAndroid Build Coastguard Worker
29*89a0ef05SAndroid Build Coastguard Worker protected:
30*89a0ef05SAndroid Build Coastguard Worker virtual void SetUp();
31*89a0ef05SAndroid Build Coastguard Worker virtual void TearDown();
32*89a0ef05SAndroid Build Coastguard Worker };
33*89a0ef05SAndroid Build Coastguard Worker
GainMapMetadataTest()34*89a0ef05SAndroid Build Coastguard Worker GainMapMetadataTest::GainMapMetadataTest() {}
35*89a0ef05SAndroid Build Coastguard Worker
~GainMapMetadataTest()36*89a0ef05SAndroid Build Coastguard Worker GainMapMetadataTest::~GainMapMetadataTest() {}
37*89a0ef05SAndroid Build Coastguard Worker
SetUp()38*89a0ef05SAndroid Build Coastguard Worker void GainMapMetadataTest::SetUp() {}
39*89a0ef05SAndroid Build Coastguard Worker
TearDown()40*89a0ef05SAndroid Build Coastguard Worker void GainMapMetadataTest::TearDown() {}
41*89a0ef05SAndroid Build Coastguard Worker
42*89a0ef05SAndroid Build Coastguard Worker const std::string kIso = "urn:iso:std:iso:ts:21496:-1";
43*89a0ef05SAndroid Build Coastguard Worker
TEST_F(GainMapMetadataTest,encodeMetadataThenDecode)44*89a0ef05SAndroid Build Coastguard Worker TEST_F(GainMapMetadataTest, encodeMetadataThenDecode) {
45*89a0ef05SAndroid Build Coastguard Worker uhdr_gainmap_metadata_ext_t expected("1.0");
46*89a0ef05SAndroid Build Coastguard Worker expected.max_content_boost = 100.5f;
47*89a0ef05SAndroid Build Coastguard Worker expected.min_content_boost = 1.5f;
48*89a0ef05SAndroid Build Coastguard Worker expected.gamma = 1.0f;
49*89a0ef05SAndroid Build Coastguard Worker expected.offset_sdr = 0.0625f;
50*89a0ef05SAndroid Build Coastguard Worker expected.offset_hdr = 0.0625f;
51*89a0ef05SAndroid Build Coastguard Worker expected.hdr_capacity_min = 1.0f;
52*89a0ef05SAndroid Build Coastguard Worker expected.hdr_capacity_max = 10000.0f / 203.0f;
53*89a0ef05SAndroid Build Coastguard Worker
54*89a0ef05SAndroid Build Coastguard Worker uhdr_gainmap_metadata_frac metadata;
55*89a0ef05SAndroid Build Coastguard Worker EXPECT_EQ(
56*89a0ef05SAndroid Build Coastguard Worker uhdr_gainmap_metadata_frac::gainmapMetadataFloatToFraction(&expected, &metadata).error_code,
57*89a0ef05SAndroid Build Coastguard Worker UHDR_CODEC_OK);
58*89a0ef05SAndroid Build Coastguard Worker // metadata.dump();
59*89a0ef05SAndroid Build Coastguard Worker
60*89a0ef05SAndroid Build Coastguard Worker std::vector<uint8_t> data;
61*89a0ef05SAndroid Build Coastguard Worker EXPECT_EQ(uhdr_gainmap_metadata_frac::encodeGainmapMetadata(&metadata, data).error_code,
62*89a0ef05SAndroid Build Coastguard Worker UHDR_CODEC_OK);
63*89a0ef05SAndroid Build Coastguard Worker
64*89a0ef05SAndroid Build Coastguard Worker uhdr_gainmap_metadata_frac decodedMetadata;
65*89a0ef05SAndroid Build Coastguard Worker EXPECT_EQ(uhdr_gainmap_metadata_frac::decodeGainmapMetadata(data, &decodedMetadata).error_code,
66*89a0ef05SAndroid Build Coastguard Worker UHDR_CODEC_OK);
67*89a0ef05SAndroid Build Coastguard Worker
68*89a0ef05SAndroid Build Coastguard Worker uhdr_gainmap_metadata_ext_t decodedUHdrMetadata;
69*89a0ef05SAndroid Build Coastguard Worker EXPECT_EQ(uhdr_gainmap_metadata_frac::gainmapMetadataFractionToFloat(&decodedMetadata,
70*89a0ef05SAndroid Build Coastguard Worker &decodedUHdrMetadata)
71*89a0ef05SAndroid Build Coastguard Worker .error_code,
72*89a0ef05SAndroid Build Coastguard Worker UHDR_CODEC_OK);
73*89a0ef05SAndroid Build Coastguard Worker
74*89a0ef05SAndroid Build Coastguard Worker EXPECT_FLOAT_EQ(expected.max_content_boost, decodedUHdrMetadata.max_content_boost);
75*89a0ef05SAndroid Build Coastguard Worker EXPECT_FLOAT_EQ(expected.min_content_boost, decodedUHdrMetadata.min_content_boost);
76*89a0ef05SAndroid Build Coastguard Worker EXPECT_FLOAT_EQ(expected.gamma, decodedUHdrMetadata.gamma);
77*89a0ef05SAndroid Build Coastguard Worker EXPECT_FLOAT_EQ(expected.offset_sdr, decodedUHdrMetadata.offset_sdr);
78*89a0ef05SAndroid Build Coastguard Worker EXPECT_FLOAT_EQ(expected.offset_hdr, decodedUHdrMetadata.offset_hdr);
79*89a0ef05SAndroid Build Coastguard Worker EXPECT_FLOAT_EQ(expected.hdr_capacity_min, decodedUHdrMetadata.hdr_capacity_min);
80*89a0ef05SAndroid Build Coastguard Worker EXPECT_FLOAT_EQ(expected.hdr_capacity_max, decodedUHdrMetadata.hdr_capacity_max);
81*89a0ef05SAndroid Build Coastguard Worker
82*89a0ef05SAndroid Build Coastguard Worker data.clear();
83*89a0ef05SAndroid Build Coastguard Worker expected.min_content_boost = 0.000578369f;
84*89a0ef05SAndroid Build Coastguard Worker expected.offset_sdr = -0.0625f;
85*89a0ef05SAndroid Build Coastguard Worker expected.offset_hdr = -0.0625f;
86*89a0ef05SAndroid Build Coastguard Worker expected.hdr_capacity_max = 1000.0f / 203.0f;
87*89a0ef05SAndroid Build Coastguard Worker
88*89a0ef05SAndroid Build Coastguard Worker EXPECT_EQ(
89*89a0ef05SAndroid Build Coastguard Worker uhdr_gainmap_metadata_frac::gainmapMetadataFloatToFraction(&expected, &metadata).error_code,
90*89a0ef05SAndroid Build Coastguard Worker UHDR_CODEC_OK);
91*89a0ef05SAndroid Build Coastguard Worker EXPECT_EQ(uhdr_gainmap_metadata_frac::encodeGainmapMetadata(&metadata, data).error_code,
92*89a0ef05SAndroid Build Coastguard Worker UHDR_CODEC_OK);
93*89a0ef05SAndroid Build Coastguard Worker EXPECT_EQ(uhdr_gainmap_metadata_frac::decodeGainmapMetadata(data, &decodedMetadata).error_code,
94*89a0ef05SAndroid Build Coastguard Worker UHDR_CODEC_OK);
95*89a0ef05SAndroid Build Coastguard Worker EXPECT_EQ(uhdr_gainmap_metadata_frac::gainmapMetadataFractionToFloat(&decodedMetadata,
96*89a0ef05SAndroid Build Coastguard Worker &decodedUHdrMetadata)
97*89a0ef05SAndroid Build Coastguard Worker .error_code,
98*89a0ef05SAndroid Build Coastguard Worker UHDR_CODEC_OK);
99*89a0ef05SAndroid Build Coastguard Worker
100*89a0ef05SAndroid Build Coastguard Worker EXPECT_FLOAT_EQ(expected.max_content_boost, decodedUHdrMetadata.max_content_boost);
101*89a0ef05SAndroid Build Coastguard Worker EXPECT_FLOAT_EQ(expected.min_content_boost, decodedUHdrMetadata.min_content_boost);
102*89a0ef05SAndroid Build Coastguard Worker EXPECT_FLOAT_EQ(expected.gamma, decodedUHdrMetadata.gamma);
103*89a0ef05SAndroid Build Coastguard Worker EXPECT_FLOAT_EQ(expected.offset_sdr, decodedUHdrMetadata.offset_sdr);
104*89a0ef05SAndroid Build Coastguard Worker EXPECT_FLOAT_EQ(expected.offset_hdr, decodedUHdrMetadata.offset_hdr);
105*89a0ef05SAndroid Build Coastguard Worker EXPECT_FLOAT_EQ(expected.hdr_capacity_min, decodedUHdrMetadata.hdr_capacity_min);
106*89a0ef05SAndroid Build Coastguard Worker EXPECT_FLOAT_EQ(expected.hdr_capacity_max, decodedUHdrMetadata.hdr_capacity_max);
107*89a0ef05SAndroid Build Coastguard Worker }
108*89a0ef05SAndroid Build Coastguard Worker
109*89a0ef05SAndroid Build Coastguard Worker } // namespace ultrahdr
110