• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2024 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef ULTRAHDR_GAINMAPMETADATA_H
18 #define ULTRAHDR_GAINMAPMETADATA_H
19 
20 #include "ultrahdr/ultrahdrcommon.h"
21 #include "ultrahdr/ultrahdr.h"
22 
23 #include <memory>
24 #include <vector>
25 
26 namespace ultrahdr {
27 
28 #define JPEGR_CHECK(x)                \
29   {                                   \
30     status_t status = (x);            \
31     if ((status) != JPEGR_NO_ERROR) { \
32       return status;                  \
33     }                                 \
34   }
35 
36 // Gain map metadata, for tone mapping between SDR and HDR.
37 // This is the fraction version of {@code ultrahdr_metadata_struct}.
38 struct gain_map_metadata {
39   uint32_t gainMapMinN[3];
40   uint32_t gainMapMinD[3];
41   uint32_t gainMapMaxN[3];
42   uint32_t gainMapMaxD[3];
43   uint32_t gainMapGammaN[3];
44   uint32_t gainMapGammaD[3];
45 
46   uint32_t baseOffsetN[3];
47   uint32_t baseOffsetD[3];
48   uint32_t alternateOffsetN[3];
49   uint32_t alternateOffsetD[3];
50 
51   uint32_t baseHdrHeadroomN;
52   uint32_t baseHdrHeadroomD;
53   uint32_t alternateHdrHeadroomN;
54   uint32_t alternateHdrHeadroomD;
55 
56   bool backwardDirection;
57   bool useBaseColorSpace;
58 
59   static status_t encodeGainmapMetadata(const gain_map_metadata* gain_map_metadata,
60                                         std::vector<uint8_t>& out_data);
61 
62   static status_t decodeGainmapMetadata(const std::vector<uint8_t>& data,
63                                         gain_map_metadata* out_gain_map_metadata);
64 
65   static status_t gainmapMetadataFractionToFloat(const gain_map_metadata* from,
66                                                  ultrahdr_metadata_ptr to);
67 
68   static status_t gainmapMetadataFloatToFraction(const ultrahdr_metadata_ptr from,
69                                                  gain_map_metadata* to);
70 
dumpgain_map_metadata71   void dump() const {
72     ALOGD("GAIN MAP METADATA: \n");
73     ALOGD("min numerator:                       %d, %d, %d\n", gainMapMinN[0], gainMapMinN[1],
74           gainMapMinN[2]);
75     ALOGD("min denominator:                     %d, %d, %d\n", gainMapMinD[0], gainMapMinD[1],
76           gainMapMinD[2]);
77     ALOGD("max numerator:                       %d, %d, %d\n", gainMapMaxN[0], gainMapMaxN[1],
78           gainMapMaxN[2]);
79     ALOGD("max denominator:                     %d, %d, %d\n", gainMapMaxD[0], gainMapMaxD[1],
80           gainMapMaxD[2]);
81     ALOGD("gamma numerator:                     %d, %d, %d\n", gainMapGammaN[0], gainMapGammaN[1],
82           gainMapGammaN[2]);
83     ALOGD("gamma denominator:                   %d, %d, %d\n", gainMapGammaD[0], gainMapGammaD[1],
84           gainMapGammaD[2]);
85     ALOGD("SDR offset numerator:                %d, %d, %d\n", baseOffsetN[0], baseOffsetN[1],
86           baseOffsetN[2]);
87     ALOGD("SDR offset denominator:              %d, %d, %d\n", baseOffsetD[0], baseOffsetD[1],
88           baseOffsetD[2]);
89     ALOGD("HDR offset numerator:                %d, %d, %d\n", alternateOffsetN[0],
90           alternateOffsetN[1], alternateOffsetN[2]);
91     ALOGD("HDR offset denominator:              %d, %d, %d\n", alternateOffsetD[0],
92           alternateOffsetD[1], alternateOffsetD[2]);
93     ALOGD("base HDR head room numerator:        %d\n", baseHdrHeadroomN);
94     ALOGD("base HDR head room denominator:      %d\n", baseHdrHeadroomD);
95     ALOGD("alternate HDR head room numerator:   %d\n", alternateHdrHeadroomN);
96     ALOGD("alternate HDR head room denominator: %d\n", alternateHdrHeadroomD);
97     ALOGD("backwardDirection:                   %s\n", backwardDirection ? "true" : "false");
98     ALOGD("use base color space:                %s\n", useBaseColorSpace ? "true" : "false");
99   }
100 };
101 }  // namespace ultrahdr
102 
103 #endif  // ULTRAHDR_GAINMAPMETADATA_H
104