blob: 94b68e729516a53bf1d0a9ff8e64996419bce6f2 [file] [log] [blame]
Courtney Goeltzenleuchtere06ad182017-03-22 13:09:12 -06001/*
2 * Copyright 2017 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#include <ui/DebugUtils.h>
Courtney Goeltzenleuchter4f8f3712017-04-14 09:18:26 -060018#include <ui/PixelFormat.h>
Courtney Goeltzenleuchtere06ad182017-03-22 13:09:12 -060019
20#include <android-base/stringprintf.h>
21#include <string>
22
23std::string decodeStandard(android_dataspace dataspace) {
24 const uint32_t dataspaceSelect = (dataspace & HAL_DATASPACE_STANDARD_MASK);
25 switch (dataspaceSelect) {
26 case HAL_DATASPACE_STANDARD_BT709:
27 return std::string("BT709");
28
29 case HAL_DATASPACE_STANDARD_BT601_625:
30 return std::string("BT601_625");
31
32 case HAL_DATASPACE_STANDARD_BT601_625_UNADJUSTED:
33 return std::string("BT601_625_UNADJUSTED");
34
35 case HAL_DATASPACE_STANDARD_BT601_525:
36 return std::string("BT601_525");
37
38 case HAL_DATASPACE_STANDARD_BT601_525_UNADJUSTED:
39 return std::string("BT601_525_UNADJUSTED");
40
41 case HAL_DATASPACE_STANDARD_BT2020:
42 return std::string("BT2020");
43
44 case HAL_DATASPACE_STANDARD_BT2020_CONSTANT_LUMINANCE:
45 return std::string("BT2020 (constant luminance)");
46
47 case HAL_DATASPACE_STANDARD_BT470M:
48 return std::string("BT470M");
49
50 case HAL_DATASPACE_STANDARD_FILM:
51 return std::string("FILM");
52
53 case HAL_DATASPACE_STANDARD_DCI_P3:
54 return std::string("DCI-P3");
55
56 case HAL_DATASPACE_STANDARD_ADOBE_RGB:
57 return std::string("AdobeRGB");
58
59 case 0:
60 switch (dataspace & 0xffff) {
61 case HAL_DATASPACE_JFIF:
62 return std::string("(deprecated) JFIF (BT601_625, SMPTE_170M Full range)");
63
64 case HAL_DATASPACE_BT601_625:
65 return std::string("(deprecated) BT601_625 (BT601_625, SMPTE_170M Limited "
66 "range)");
67
68 case HAL_DATASPACE_BT601_525:
69 return std::string("(deprecated) BT601_525 (BT601_525, SMPTE_170M Limited "
70 "range)");
71
72 case HAL_DATASPACE_SRGB_LINEAR:
73 return std::string("(deprecated) SRGB Linear Full range");
74
75 case HAL_DATASPACE_SRGB:
76 return std::string("(deprecated) sRGB");
77
78 case HAL_DATASPACE_V0_BT709:
79 return std::string("(deprecated) BT709 (BT709, SMPTE_170M Limited range)");
80
81 case HAL_DATASPACE_ARBITRARY:
82 return std::string("ARBITRARY");
83
84 case HAL_DATASPACE_UNKNOWN:
85 // Fallthrough
86 default:
87 return android::base::StringPrintf("Unknown deprecated dataspace code %d",
88 dataspaceSelect);
89 }
90 }
91
92 return android::base::StringPrintf("Unknown dataspace code %d", dataspaceSelect);
93}
94
95std::string decodeTransfer(android_dataspace dataspace) {
96 const uint32_t dataspaceTransfer = (dataspace & HAL_DATASPACE_TRANSFER_MASK);
97 switch (dataspaceTransfer) {
98 case HAL_DATASPACE_TRANSFER_UNSPECIFIED:
99 return std::string("Unspecified");
100
101 case HAL_DATASPACE_TRANSFER_LINEAR:
102 return std::string("Linear");
103
104 case HAL_DATASPACE_TRANSFER_SRGB:
105 return std::string("sRGB");
106
107 case HAL_DATASPACE_TRANSFER_SMPTE_170M:
108 return std::string("SMPTE_170M");
109
110 case HAL_DATASPACE_TRANSFER_GAMMA2_2:
111 return std::string("gamma 2.2");
112
113 case HAL_DATASPACE_TRANSFER_GAMMA2_6:
114 return std::string("gamma 2.6");
115
116 case HAL_DATASPACE_TRANSFER_GAMMA2_8:
117 return std::string("gamma 2.8");
118
119 case HAL_DATASPACE_TRANSFER_ST2084:
120 return std::string("SMPTE 2084");
121
122 case HAL_DATASPACE_TRANSFER_HLG:
123 return std::string("STD-B67");
124 }
125
126 return android::base::StringPrintf("Unknown dataspace transfer %d", dataspaceTransfer);
127}
128
129std::string decodeRange(android_dataspace dataspace) {
130 const uint32_t dataspaceRange = (dataspace & HAL_DATASPACE_RANGE_MASK);
131 switch (dataspaceRange) {
132 case HAL_DATASPACE_RANGE_UNSPECIFIED:
133 return std::string("Range Unspecified");
134
135 case HAL_DATASPACE_RANGE_FULL:
136 return std::string("Full range");
137
138 case HAL_DATASPACE_RANGE_LIMITED:
139 return std::string("Limited range");
140
141 case HAL_DATASPACE_RANGE_EXTENDED:
142 return std::string("Extended range");
143 }
144
145 return android::base::StringPrintf("Unknown dataspace range %d", dataspaceRange);
146}
147
148std::string dataspaceDetails(android_dataspace dataspace) {
Courtney Goeltzenleuchter4f8f3712017-04-14 09:18:26 -0600149 if (dataspace == 0) {
150 return "Default (0)";
151 }
Courtney Goeltzenleuchtere06ad182017-03-22 13:09:12 -0600152 return android::base::StringPrintf("%s %s %s", decodeStandard(dataspace).c_str(),
153 decodeTransfer(dataspace).c_str(),
154 decodeRange(dataspace).c_str());
155}
156
157std::string decodeColorMode(android_color_mode colorMode) {
158 switch (colorMode) {
159 case HAL_COLOR_MODE_NATIVE:
160 return std::string("HAL_COLOR_MODE_NATIVE");
161
162 case HAL_COLOR_MODE_STANDARD_BT601_625:
163 return std::string("HAL_COLOR_MODE_BT601_625");
164
165 case HAL_COLOR_MODE_STANDARD_BT601_625_UNADJUSTED:
166 return std::string("HAL_COLOR_MODE_BT601_625_UNADJUSTED");
167
168 case HAL_COLOR_MODE_STANDARD_BT601_525:
169 return std::string("HAL_COLOR_MODE_BT601_525");
170
171 case HAL_COLOR_MODE_STANDARD_BT601_525_UNADJUSTED:
172 return std::string("HAL_COLOR_MODE_BT601_525_UNADJUSTED");
173
174 case HAL_COLOR_MODE_STANDARD_BT709:
175 return std::string("HAL_COLOR_MODE_BT709");
176
177 case HAL_COLOR_MODE_DCI_P3:
178 return std::string("HAL_COLOR_MODE_DCI_P3");
179
180 case HAL_COLOR_MODE_SRGB:
181 return std::string("HAL_COLOR_MODE_SRGB");
182
183 case HAL_COLOR_MODE_ADOBE_RGB:
184 return std::string("HAL_COLOR_MODE_ADOBE_RGB");
185
186 case HAL_COLOR_MODE_DISPLAY_P3:
187 return std::string("HAL_COLOR_MODE_DISPLAY_P3");
188 }
189
190 return android::base::StringPrintf("Unknown color mode %d", colorMode);
191}
Courtney Goeltzenleuchter4f8f3712017-04-14 09:18:26 -0600192
193// Converts a PixelFormat to a human-readable string. Max 11 chars.
194// (Could use a table of prefab String8 objects.)
195std::string decodePixelFormat(android::PixelFormat format) {
196 switch (format) {
197 case android::PIXEL_FORMAT_UNKNOWN:
198 return std::string("Unknown/None");
199 case android::PIXEL_FORMAT_CUSTOM:
200 return std::string("Custom");
201 case android::PIXEL_FORMAT_TRANSLUCENT:
202 return std::string("Translucent");
203 case android::PIXEL_FORMAT_TRANSPARENT:
204 return std::string("Transparent");
205 case android::PIXEL_FORMAT_OPAQUE:
206 return std::string("Opaque");
207 case android::PIXEL_FORMAT_RGBA_8888:
208 return std::string("RGBA_8888");
209 case android::PIXEL_FORMAT_RGBX_8888:
210 return std::string("RGBx_8888");
211 case android::PIXEL_FORMAT_RGBA_FP16:
212 return std::string("RGBA_FP16");
213 case android::PIXEL_FORMAT_RGBA_1010102:
214 return std::string("RGBA_1010102");
215 case android::PIXEL_FORMAT_RGB_888:
216 return std::string("RGB_888");
217 case android::PIXEL_FORMAT_RGB_565:
218 return std::string("RGB_565");
219 case android::PIXEL_FORMAT_BGRA_8888:
220 return std::string("BGRA_8888");
221 default:
222 return android::base::StringPrintf("Unknown %#08x", format);
223 }
224}