1*38e8c45fSAndroid Build Coastguard Worker /*
2*38e8c45fSAndroid Build Coastguard Worker * Copyright 2017 The Android Open Source Project
3*38e8c45fSAndroid Build Coastguard Worker *
4*38e8c45fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*38e8c45fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*38e8c45fSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*38e8c45fSAndroid Build Coastguard Worker *
8*38e8c45fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*38e8c45fSAndroid Build Coastguard Worker *
10*38e8c45fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*38e8c45fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*38e8c45fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*38e8c45fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*38e8c45fSAndroid Build Coastguard Worker * limitations under the License.
15*38e8c45fSAndroid Build Coastguard Worker */
16*38e8c45fSAndroid Build Coastguard Worker
17*38e8c45fSAndroid Build Coastguard Worker #include <ui/DebugUtils.h>
18*38e8c45fSAndroid Build Coastguard Worker #include <ui/DeviceProductInfo.h>
19*38e8c45fSAndroid Build Coastguard Worker #include <ui/PixelFormat.h>
20*38e8c45fSAndroid Build Coastguard Worker #include <ui/Rect.h>
21*38e8c45fSAndroid Build Coastguard Worker
22*38e8c45fSAndroid Build Coastguard Worker #include <android-base/stringprintf.h>
23*38e8c45fSAndroid Build Coastguard Worker #include <string>
24*38e8c45fSAndroid Build Coastguard Worker
25*38e8c45fSAndroid Build Coastguard Worker using android::base::StringPrintf;
26*38e8c45fSAndroid Build Coastguard Worker using android::ui::ColorMode;
27*38e8c45fSAndroid Build Coastguard Worker using android::ui::RenderIntent;
28*38e8c45fSAndroid Build Coastguard Worker
decodeStandardOnly(uint32_t dataspaceStandard)29*38e8c45fSAndroid Build Coastguard Worker std::string decodeStandardOnly(uint32_t dataspaceStandard) {
30*38e8c45fSAndroid Build Coastguard Worker switch (dataspaceStandard) {
31*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_STANDARD_BT709:
32*38e8c45fSAndroid Build Coastguard Worker return std::string("BT709");
33*38e8c45fSAndroid Build Coastguard Worker
34*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_STANDARD_BT601_625:
35*38e8c45fSAndroid Build Coastguard Worker return std::string("BT601_625");
36*38e8c45fSAndroid Build Coastguard Worker
37*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_STANDARD_BT601_625_UNADJUSTED:
38*38e8c45fSAndroid Build Coastguard Worker return std::string("BT601_625_UNADJUSTED");
39*38e8c45fSAndroid Build Coastguard Worker
40*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_STANDARD_BT601_525:
41*38e8c45fSAndroid Build Coastguard Worker return std::string("BT601_525");
42*38e8c45fSAndroid Build Coastguard Worker
43*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_STANDARD_BT601_525_UNADJUSTED:
44*38e8c45fSAndroid Build Coastguard Worker return std::string("BT601_525_UNADJUSTED");
45*38e8c45fSAndroid Build Coastguard Worker
46*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_STANDARD_BT2020:
47*38e8c45fSAndroid Build Coastguard Worker return std::string("BT2020");
48*38e8c45fSAndroid Build Coastguard Worker
49*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_STANDARD_BT2020_CONSTANT_LUMINANCE:
50*38e8c45fSAndroid Build Coastguard Worker return std::string("BT2020 (constant luminance)");
51*38e8c45fSAndroid Build Coastguard Worker
52*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_STANDARD_BT470M:
53*38e8c45fSAndroid Build Coastguard Worker return std::string("BT470M");
54*38e8c45fSAndroid Build Coastguard Worker
55*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_STANDARD_FILM:
56*38e8c45fSAndroid Build Coastguard Worker return std::string("FILM");
57*38e8c45fSAndroid Build Coastguard Worker
58*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_STANDARD_DCI_P3:
59*38e8c45fSAndroid Build Coastguard Worker return std::string("DCI-P3");
60*38e8c45fSAndroid Build Coastguard Worker
61*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_STANDARD_ADOBE_RGB:
62*38e8c45fSAndroid Build Coastguard Worker return std::string("AdobeRGB");
63*38e8c45fSAndroid Build Coastguard Worker }
64*38e8c45fSAndroid Build Coastguard Worker
65*38e8c45fSAndroid Build Coastguard Worker return StringPrintf("Unknown dataspace code %d", dataspaceStandard);
66*38e8c45fSAndroid Build Coastguard Worker }
67*38e8c45fSAndroid Build Coastguard Worker
decodeStandard(android_dataspace dataspace)68*38e8c45fSAndroid Build Coastguard Worker std::string decodeStandard(android_dataspace dataspace) {
69*38e8c45fSAndroid Build Coastguard Worker const uint32_t dataspaceStandard = (dataspace & HAL_DATASPACE_STANDARD_MASK);
70*38e8c45fSAndroid Build Coastguard Worker if (dataspaceStandard == 0) {
71*38e8c45fSAndroid Build Coastguard Worker switch (dataspace & 0xffff) {
72*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_JFIF:
73*38e8c45fSAndroid Build Coastguard Worker return std::string("(deprecated) JFIF (BT601_625)");
74*38e8c45fSAndroid Build Coastguard Worker
75*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_BT601_625:
76*38e8c45fSAndroid Build Coastguard Worker return std::string("(deprecated) BT601_625");
77*38e8c45fSAndroid Build Coastguard Worker
78*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_BT601_525:
79*38e8c45fSAndroid Build Coastguard Worker return std::string("(deprecated) BT601_525");
80*38e8c45fSAndroid Build Coastguard Worker
81*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_SRGB_LINEAR:
82*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_SRGB:
83*38e8c45fSAndroid Build Coastguard Worker return std::string("(deprecated) sRGB");
84*38e8c45fSAndroid Build Coastguard Worker
85*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_BT709:
86*38e8c45fSAndroid Build Coastguard Worker return std::string("(deprecated) BT709");
87*38e8c45fSAndroid Build Coastguard Worker
88*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_ARBITRARY:
89*38e8c45fSAndroid Build Coastguard Worker return std::string("ARBITRARY");
90*38e8c45fSAndroid Build Coastguard Worker
91*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_UNKNOWN:
92*38e8c45fSAndroid Build Coastguard Worker // Fallthrough
93*38e8c45fSAndroid Build Coastguard Worker default:
94*38e8c45fSAndroid Build Coastguard Worker return StringPrintf("Unknown deprecated dataspace code %d", dataspace);
95*38e8c45fSAndroid Build Coastguard Worker }
96*38e8c45fSAndroid Build Coastguard Worker }
97*38e8c45fSAndroid Build Coastguard Worker return decodeStandardOnly(dataspaceStandard);
98*38e8c45fSAndroid Build Coastguard Worker }
99*38e8c45fSAndroid Build Coastguard Worker
decodeTransferOnly(uint32_t dataspaceTransfer)100*38e8c45fSAndroid Build Coastguard Worker std::string decodeTransferOnly(uint32_t dataspaceTransfer) {
101*38e8c45fSAndroid Build Coastguard Worker switch (dataspaceTransfer) {
102*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_TRANSFER_UNSPECIFIED:
103*38e8c45fSAndroid Build Coastguard Worker return std::string("Unspecified");
104*38e8c45fSAndroid Build Coastguard Worker
105*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_TRANSFER_LINEAR:
106*38e8c45fSAndroid Build Coastguard Worker return std::string("Linear");
107*38e8c45fSAndroid Build Coastguard Worker
108*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_TRANSFER_SRGB:
109*38e8c45fSAndroid Build Coastguard Worker return std::string("sRGB");
110*38e8c45fSAndroid Build Coastguard Worker
111*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_TRANSFER_SMPTE_170M:
112*38e8c45fSAndroid Build Coastguard Worker return std::string("SMPTE_170M");
113*38e8c45fSAndroid Build Coastguard Worker
114*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_TRANSFER_GAMMA2_2:
115*38e8c45fSAndroid Build Coastguard Worker return std::string("gamma 2.2");
116*38e8c45fSAndroid Build Coastguard Worker
117*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_TRANSFER_GAMMA2_6:
118*38e8c45fSAndroid Build Coastguard Worker return std::string("gamma 2.6");
119*38e8c45fSAndroid Build Coastguard Worker
120*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_TRANSFER_GAMMA2_8:
121*38e8c45fSAndroid Build Coastguard Worker return std::string("gamma 2.8");
122*38e8c45fSAndroid Build Coastguard Worker
123*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_TRANSFER_ST2084:
124*38e8c45fSAndroid Build Coastguard Worker return std::string("SMPTE 2084");
125*38e8c45fSAndroid Build Coastguard Worker
126*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_TRANSFER_HLG:
127*38e8c45fSAndroid Build Coastguard Worker return std::string("STD-B67");
128*38e8c45fSAndroid Build Coastguard Worker }
129*38e8c45fSAndroid Build Coastguard Worker
130*38e8c45fSAndroid Build Coastguard Worker return StringPrintf("Unknown dataspace transfer %d", dataspaceTransfer);
131*38e8c45fSAndroid Build Coastguard Worker }
132*38e8c45fSAndroid Build Coastguard Worker
decodeTransfer(android_dataspace dataspace)133*38e8c45fSAndroid Build Coastguard Worker std::string decodeTransfer(android_dataspace dataspace) {
134*38e8c45fSAndroid Build Coastguard Worker const uint32_t dataspaceSelect = (dataspace & HAL_DATASPACE_STANDARD_MASK);
135*38e8c45fSAndroid Build Coastguard Worker if (dataspaceSelect == 0) {
136*38e8c45fSAndroid Build Coastguard Worker switch (dataspace & 0xffff) {
137*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_JFIF:
138*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_BT601_625:
139*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_BT601_525:
140*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_BT709:
141*38e8c45fSAndroid Build Coastguard Worker return std::string("SMPTE_170M");
142*38e8c45fSAndroid Build Coastguard Worker
143*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_SRGB_LINEAR:
144*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_ARBITRARY:
145*38e8c45fSAndroid Build Coastguard Worker return std::string("Linear");
146*38e8c45fSAndroid Build Coastguard Worker
147*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_SRGB:
148*38e8c45fSAndroid Build Coastguard Worker return std::string("sRGB");
149*38e8c45fSAndroid Build Coastguard Worker
150*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_UNKNOWN:
151*38e8c45fSAndroid Build Coastguard Worker // Fallthrough
152*38e8c45fSAndroid Build Coastguard Worker default:
153*38e8c45fSAndroid Build Coastguard Worker return std::string("");
154*38e8c45fSAndroid Build Coastguard Worker }
155*38e8c45fSAndroid Build Coastguard Worker }
156*38e8c45fSAndroid Build Coastguard Worker
157*38e8c45fSAndroid Build Coastguard Worker const uint32_t dataspaceTransfer = (dataspace & HAL_DATASPACE_TRANSFER_MASK);
158*38e8c45fSAndroid Build Coastguard Worker return decodeTransferOnly(dataspaceTransfer);
159*38e8c45fSAndroid Build Coastguard Worker }
160*38e8c45fSAndroid Build Coastguard Worker
decodeRangeOnly(uint32_t dataspaceRange)161*38e8c45fSAndroid Build Coastguard Worker std::string decodeRangeOnly(uint32_t dataspaceRange) {
162*38e8c45fSAndroid Build Coastguard Worker switch (dataspaceRange) {
163*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_RANGE_UNSPECIFIED:
164*38e8c45fSAndroid Build Coastguard Worker return std::string("Range Unspecified");
165*38e8c45fSAndroid Build Coastguard Worker
166*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_RANGE_FULL:
167*38e8c45fSAndroid Build Coastguard Worker return std::string("Full range");
168*38e8c45fSAndroid Build Coastguard Worker
169*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_RANGE_LIMITED:
170*38e8c45fSAndroid Build Coastguard Worker return std::string("Limited range");
171*38e8c45fSAndroid Build Coastguard Worker
172*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_RANGE_EXTENDED:
173*38e8c45fSAndroid Build Coastguard Worker return std::string("Extended range");
174*38e8c45fSAndroid Build Coastguard Worker }
175*38e8c45fSAndroid Build Coastguard Worker
176*38e8c45fSAndroid Build Coastguard Worker return StringPrintf("Unknown dataspace range %d", dataspaceRange);
177*38e8c45fSAndroid Build Coastguard Worker }
178*38e8c45fSAndroid Build Coastguard Worker
decodeRange(android_dataspace dataspace)179*38e8c45fSAndroid Build Coastguard Worker std::string decodeRange(android_dataspace dataspace) {
180*38e8c45fSAndroid Build Coastguard Worker const uint32_t dataspaceSelect = (dataspace & HAL_DATASPACE_STANDARD_MASK);
181*38e8c45fSAndroid Build Coastguard Worker if (dataspaceSelect == 0) {
182*38e8c45fSAndroid Build Coastguard Worker switch (dataspace & 0xffff) {
183*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_JFIF:
184*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_SRGB_LINEAR:
185*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_SRGB:
186*38e8c45fSAndroid Build Coastguard Worker return std::string("Full range");
187*38e8c45fSAndroid Build Coastguard Worker
188*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_BT601_625:
189*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_BT601_525:
190*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_BT709:
191*38e8c45fSAndroid Build Coastguard Worker return std::string("Limited range");
192*38e8c45fSAndroid Build Coastguard Worker
193*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_ARBITRARY:
194*38e8c45fSAndroid Build Coastguard Worker case HAL_DATASPACE_UNKNOWN:
195*38e8c45fSAndroid Build Coastguard Worker // Fallthrough
196*38e8c45fSAndroid Build Coastguard Worker default:
197*38e8c45fSAndroid Build Coastguard Worker return std::string("unspecified range");
198*38e8c45fSAndroid Build Coastguard Worker }
199*38e8c45fSAndroid Build Coastguard Worker }
200*38e8c45fSAndroid Build Coastguard Worker
201*38e8c45fSAndroid Build Coastguard Worker const uint32_t dataspaceRange = (dataspace & HAL_DATASPACE_RANGE_MASK);
202*38e8c45fSAndroid Build Coastguard Worker return decodeRangeOnly(dataspaceRange);
203*38e8c45fSAndroid Build Coastguard Worker }
204*38e8c45fSAndroid Build Coastguard Worker
dataspaceDetails(android_dataspace dataspace)205*38e8c45fSAndroid Build Coastguard Worker std::string dataspaceDetails(android_dataspace dataspace) {
206*38e8c45fSAndroid Build Coastguard Worker if (dataspace == 0) {
207*38e8c45fSAndroid Build Coastguard Worker return "Default";
208*38e8c45fSAndroid Build Coastguard Worker }
209*38e8c45fSAndroid Build Coastguard Worker return StringPrintf("%s %s %s", decodeStandard(dataspace).c_str(),
210*38e8c45fSAndroid Build Coastguard Worker decodeTransfer(dataspace).c_str(), decodeRange(dataspace).c_str());
211*38e8c45fSAndroid Build Coastguard Worker }
212*38e8c45fSAndroid Build Coastguard Worker
decodeColorMode(ColorMode colorMode)213*38e8c45fSAndroid Build Coastguard Worker std::string decodeColorMode(ColorMode colorMode) {
214*38e8c45fSAndroid Build Coastguard Worker switch (colorMode) {
215*38e8c45fSAndroid Build Coastguard Worker case ColorMode::NATIVE:
216*38e8c45fSAndroid Build Coastguard Worker return std::string("ColorMode::NATIVE");
217*38e8c45fSAndroid Build Coastguard Worker
218*38e8c45fSAndroid Build Coastguard Worker case ColorMode::STANDARD_BT601_625:
219*38e8c45fSAndroid Build Coastguard Worker return std::string("ColorMode::BT601_625");
220*38e8c45fSAndroid Build Coastguard Worker
221*38e8c45fSAndroid Build Coastguard Worker case ColorMode::STANDARD_BT601_625_UNADJUSTED:
222*38e8c45fSAndroid Build Coastguard Worker return std::string("ColorMode::BT601_625_UNADJUSTED");
223*38e8c45fSAndroid Build Coastguard Worker
224*38e8c45fSAndroid Build Coastguard Worker case ColorMode::STANDARD_BT601_525:
225*38e8c45fSAndroid Build Coastguard Worker return std::string("ColorMode::BT601_525");
226*38e8c45fSAndroid Build Coastguard Worker
227*38e8c45fSAndroid Build Coastguard Worker case ColorMode::STANDARD_BT601_525_UNADJUSTED:
228*38e8c45fSAndroid Build Coastguard Worker return std::string("ColorMode::BT601_525_UNADJUSTED");
229*38e8c45fSAndroid Build Coastguard Worker
230*38e8c45fSAndroid Build Coastguard Worker case ColorMode::STANDARD_BT709:
231*38e8c45fSAndroid Build Coastguard Worker return std::string("ColorMode::BT709");
232*38e8c45fSAndroid Build Coastguard Worker
233*38e8c45fSAndroid Build Coastguard Worker case ColorMode::DCI_P3:
234*38e8c45fSAndroid Build Coastguard Worker return std::string("ColorMode::DCI_P3");
235*38e8c45fSAndroid Build Coastguard Worker
236*38e8c45fSAndroid Build Coastguard Worker case ColorMode::SRGB:
237*38e8c45fSAndroid Build Coastguard Worker return std::string("ColorMode::SRGB");
238*38e8c45fSAndroid Build Coastguard Worker
239*38e8c45fSAndroid Build Coastguard Worker case ColorMode::ADOBE_RGB:
240*38e8c45fSAndroid Build Coastguard Worker return std::string("ColorMode::ADOBE_RGB");
241*38e8c45fSAndroid Build Coastguard Worker
242*38e8c45fSAndroid Build Coastguard Worker case ColorMode::DISPLAY_P3:
243*38e8c45fSAndroid Build Coastguard Worker return std::string("ColorMode::DISPLAY_P3");
244*38e8c45fSAndroid Build Coastguard Worker
245*38e8c45fSAndroid Build Coastguard Worker case ColorMode::BT2020:
246*38e8c45fSAndroid Build Coastguard Worker return std::string("ColorMode::BT2020");
247*38e8c45fSAndroid Build Coastguard Worker
248*38e8c45fSAndroid Build Coastguard Worker case ColorMode::DISPLAY_BT2020:
249*38e8c45fSAndroid Build Coastguard Worker return std::string("ColorMode::DISPLAY_BT2020");
250*38e8c45fSAndroid Build Coastguard Worker
251*38e8c45fSAndroid Build Coastguard Worker case ColorMode::BT2100_PQ:
252*38e8c45fSAndroid Build Coastguard Worker return std::string("ColorMode::BT2100_PQ");
253*38e8c45fSAndroid Build Coastguard Worker
254*38e8c45fSAndroid Build Coastguard Worker case ColorMode::BT2100_HLG:
255*38e8c45fSAndroid Build Coastguard Worker return std::string("ColorMode::BT2100_HLG");
256*38e8c45fSAndroid Build Coastguard Worker }
257*38e8c45fSAndroid Build Coastguard Worker
258*38e8c45fSAndroid Build Coastguard Worker return StringPrintf("Unknown color mode %d", colorMode);
259*38e8c45fSAndroid Build Coastguard Worker }
260*38e8c45fSAndroid Build Coastguard Worker
decodeColorTransform(android_color_transform colorTransform)261*38e8c45fSAndroid Build Coastguard Worker std::string decodeColorTransform(android_color_transform colorTransform) {
262*38e8c45fSAndroid Build Coastguard Worker switch (colorTransform) {
263*38e8c45fSAndroid Build Coastguard Worker case HAL_COLOR_TRANSFORM_IDENTITY:
264*38e8c45fSAndroid Build Coastguard Worker return std::string("Identity");
265*38e8c45fSAndroid Build Coastguard Worker
266*38e8c45fSAndroid Build Coastguard Worker case HAL_COLOR_TRANSFORM_ARBITRARY_MATRIX:
267*38e8c45fSAndroid Build Coastguard Worker return std::string("Arbitrary matrix");
268*38e8c45fSAndroid Build Coastguard Worker
269*38e8c45fSAndroid Build Coastguard Worker case HAL_COLOR_TRANSFORM_VALUE_INVERSE:
270*38e8c45fSAndroid Build Coastguard Worker return std::string("Inverse value");
271*38e8c45fSAndroid Build Coastguard Worker
272*38e8c45fSAndroid Build Coastguard Worker case HAL_COLOR_TRANSFORM_GRAYSCALE:
273*38e8c45fSAndroid Build Coastguard Worker return std::string("Grayscale");
274*38e8c45fSAndroid Build Coastguard Worker
275*38e8c45fSAndroid Build Coastguard Worker case HAL_COLOR_TRANSFORM_CORRECT_PROTANOPIA:
276*38e8c45fSAndroid Build Coastguard Worker return std::string("Correct protanopia");
277*38e8c45fSAndroid Build Coastguard Worker
278*38e8c45fSAndroid Build Coastguard Worker case HAL_COLOR_TRANSFORM_CORRECT_DEUTERANOPIA:
279*38e8c45fSAndroid Build Coastguard Worker return std::string("Correct deuteranopia");
280*38e8c45fSAndroid Build Coastguard Worker
281*38e8c45fSAndroid Build Coastguard Worker case HAL_COLOR_TRANSFORM_CORRECT_TRITANOPIA:
282*38e8c45fSAndroid Build Coastguard Worker return std::string("Correct tritanopia");
283*38e8c45fSAndroid Build Coastguard Worker }
284*38e8c45fSAndroid Build Coastguard Worker
285*38e8c45fSAndroid Build Coastguard Worker return StringPrintf("Unknown color transform %d", colorTransform);
286*38e8c45fSAndroid Build Coastguard Worker }
287*38e8c45fSAndroid Build Coastguard Worker
288*38e8c45fSAndroid Build Coastguard Worker // Converts a PixelFormat to a human-readable string. Max 11 chars.
289*38e8c45fSAndroid Build Coastguard Worker // (Could use a table of prefab String8 objects.)
decodePixelFormat(android::PixelFormat format)290*38e8c45fSAndroid Build Coastguard Worker std::string decodePixelFormat(android::PixelFormat format) {
291*38e8c45fSAndroid Build Coastguard Worker switch (format) {
292*38e8c45fSAndroid Build Coastguard Worker case android::PIXEL_FORMAT_UNKNOWN:
293*38e8c45fSAndroid Build Coastguard Worker return std::string("Unknown/None");
294*38e8c45fSAndroid Build Coastguard Worker case android::PIXEL_FORMAT_CUSTOM:
295*38e8c45fSAndroid Build Coastguard Worker return std::string("Custom");
296*38e8c45fSAndroid Build Coastguard Worker case android::PIXEL_FORMAT_TRANSLUCENT:
297*38e8c45fSAndroid Build Coastguard Worker return std::string("Translucent");
298*38e8c45fSAndroid Build Coastguard Worker case android::PIXEL_FORMAT_TRANSPARENT:
299*38e8c45fSAndroid Build Coastguard Worker return std::string("Transparent");
300*38e8c45fSAndroid Build Coastguard Worker case android::PIXEL_FORMAT_OPAQUE:
301*38e8c45fSAndroid Build Coastguard Worker return std::string("Opaque");
302*38e8c45fSAndroid Build Coastguard Worker case android::PIXEL_FORMAT_RGBA_8888:
303*38e8c45fSAndroid Build Coastguard Worker return std::string("RGBA_8888");
304*38e8c45fSAndroid Build Coastguard Worker case android::PIXEL_FORMAT_RGBX_8888:
305*38e8c45fSAndroid Build Coastguard Worker return std::string("RGBx_8888");
306*38e8c45fSAndroid Build Coastguard Worker case android::PIXEL_FORMAT_RGBA_FP16:
307*38e8c45fSAndroid Build Coastguard Worker return std::string("RGBA_FP16");
308*38e8c45fSAndroid Build Coastguard Worker case android::PIXEL_FORMAT_RGBA_1010102:
309*38e8c45fSAndroid Build Coastguard Worker return std::string("RGBA_1010102");
310*38e8c45fSAndroid Build Coastguard Worker case android::PIXEL_FORMAT_RGB_888:
311*38e8c45fSAndroid Build Coastguard Worker return std::string("RGB_888");
312*38e8c45fSAndroid Build Coastguard Worker case android::PIXEL_FORMAT_RGB_565:
313*38e8c45fSAndroid Build Coastguard Worker return std::string("RGB_565");
314*38e8c45fSAndroid Build Coastguard Worker case android::PIXEL_FORMAT_BGRA_8888:
315*38e8c45fSAndroid Build Coastguard Worker return std::string("BGRA_8888");
316*38e8c45fSAndroid Build Coastguard Worker case android::PIXEL_FORMAT_R_8:
317*38e8c45fSAndroid Build Coastguard Worker return std::string("R_8");
318*38e8c45fSAndroid Build Coastguard Worker case android::PIXEL_FORMAT_R_16_UINT:
319*38e8c45fSAndroid Build Coastguard Worker return std::string("R_16_UINT");
320*38e8c45fSAndroid Build Coastguard Worker case android::PIXEL_FORMAT_RG_1616_UINT:
321*38e8c45fSAndroid Build Coastguard Worker return std::string("RG_1616_UINT");
322*38e8c45fSAndroid Build Coastguard Worker case android::PIXEL_FORMAT_RGBA_10101010:
323*38e8c45fSAndroid Build Coastguard Worker return std::string("RGBA_10101010");
324*38e8c45fSAndroid Build Coastguard Worker default:
325*38e8c45fSAndroid Build Coastguard Worker return StringPrintf("Unknown %#08x", format);
326*38e8c45fSAndroid Build Coastguard Worker }
327*38e8c45fSAndroid Build Coastguard Worker }
328*38e8c45fSAndroid Build Coastguard Worker
decodeRenderIntent(RenderIntent renderIntent)329*38e8c45fSAndroid Build Coastguard Worker std::string decodeRenderIntent(RenderIntent renderIntent) {
330*38e8c45fSAndroid Build Coastguard Worker switch(renderIntent) {
331*38e8c45fSAndroid Build Coastguard Worker case RenderIntent::COLORIMETRIC:
332*38e8c45fSAndroid Build Coastguard Worker return std::string("RenderIntent::COLORIMETRIC");
333*38e8c45fSAndroid Build Coastguard Worker case RenderIntent::ENHANCE:
334*38e8c45fSAndroid Build Coastguard Worker return std::string("RenderIntent::ENHANCE");
335*38e8c45fSAndroid Build Coastguard Worker case RenderIntent::TONE_MAP_COLORIMETRIC:
336*38e8c45fSAndroid Build Coastguard Worker return std::string("RenderIntent::TONE_MAP_COLORIMETRIC");
337*38e8c45fSAndroid Build Coastguard Worker case RenderIntent::TONE_MAP_ENHANCE:
338*38e8c45fSAndroid Build Coastguard Worker return std::string("RenderIntent::TONE_MAP_ENHANCE");
339*38e8c45fSAndroid Build Coastguard Worker }
340*38e8c45fSAndroid Build Coastguard Worker return std::string("Unknown RenderIntent");
341*38e8c45fSAndroid Build Coastguard Worker }
342*38e8c45fSAndroid Build Coastguard Worker
toString(const android::DeviceProductInfo::ManufactureOrModelDate & date)343*38e8c45fSAndroid Build Coastguard Worker std::string toString(const android::DeviceProductInfo::ManufactureOrModelDate& date) {
344*38e8c45fSAndroid Build Coastguard Worker using ModelYear = android::DeviceProductInfo::ModelYear;
345*38e8c45fSAndroid Build Coastguard Worker using ManufactureYear = android::DeviceProductInfo::ManufactureYear;
346*38e8c45fSAndroid Build Coastguard Worker using ManufactureWeekAndYear = android::DeviceProductInfo::ManufactureWeekAndYear;
347*38e8c45fSAndroid Build Coastguard Worker
348*38e8c45fSAndroid Build Coastguard Worker if (const auto* model = std::get_if<ModelYear>(&date)) {
349*38e8c45fSAndroid Build Coastguard Worker return StringPrintf("ModelYear{%d}", model->year);
350*38e8c45fSAndroid Build Coastguard Worker } else if (const auto* manufacture = std::get_if<ManufactureYear>(&date)) {
351*38e8c45fSAndroid Build Coastguard Worker return StringPrintf("ManufactureDate{year=%d}", manufacture->year);
352*38e8c45fSAndroid Build Coastguard Worker } else if (const auto* manufacture = std::get_if<ManufactureWeekAndYear>(&date)) {
353*38e8c45fSAndroid Build Coastguard Worker return StringPrintf("ManufactureDate{week=%d, year=%d}", manufacture->week,
354*38e8c45fSAndroid Build Coastguard Worker manufacture->year);
355*38e8c45fSAndroid Build Coastguard Worker } else {
356*38e8c45fSAndroid Build Coastguard Worker LOG_FATAL("Unknown alternative for variant DeviceProductInfo::ManufactureOrModelDate");
357*38e8c45fSAndroid Build Coastguard Worker return {};
358*38e8c45fSAndroid Build Coastguard Worker }
359*38e8c45fSAndroid Build Coastguard Worker }
360*38e8c45fSAndroid Build Coastguard Worker
toString(const android::DeviceProductInfo & info)361*38e8c45fSAndroid Build Coastguard Worker std::string toString(const android::DeviceProductInfo& info) {
362*38e8c45fSAndroid Build Coastguard Worker return StringPrintf("DeviceProductInfo{name=%s, productId=%s, manufacturerPnpId=%s, "
363*38e8c45fSAndroid Build Coastguard Worker "manufactureOrModelDate=%s}",
364*38e8c45fSAndroid Build Coastguard Worker info.name.data(), info.productId.data(), info.manufacturerPnpId.data(),
365*38e8c45fSAndroid Build Coastguard Worker toString(info.manufactureOrModelDate).c_str());
366*38e8c45fSAndroid Build Coastguard Worker }
367