xref: /aosp_15_r20/external/libultrahdr/tests/gainmapmetadata_test.cpp (revision 89a0ef05262152531a00a15832a2d3b1e3990773)
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