blob: d5676cc2b8a2bd8f59060e69a076d564299d7fcb [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:
Courtney Goeltzenleuchter039eb242017-05-31 17:51:45 -060062 return std::string("(deprecated) JFIF (BT601_625)");
Courtney Goeltzenleuchtere06ad182017-03-22 13:09:12 -060063
64 case HAL_DATASPACE_BT601_625:
Courtney Goeltzenleuchter039eb242017-05-31 17:51:45 -060065 return std::string("(deprecated) BT601_625");
Courtney Goeltzenleuchtere06ad182017-03-22 13:09:12 -060066
67 case HAL_DATASPACE_BT601_525:
Courtney Goeltzenleuchter039eb242017-05-31 17:51:45 -060068 return std::string("(deprecated) BT601_525");
Courtney Goeltzenleuchtere06ad182017-03-22 13:09:12 -060069
70 case HAL_DATASPACE_SRGB_LINEAR:
Courtney Goeltzenleuchtere06ad182017-03-22 13:09:12 -060071 case HAL_DATASPACE_SRGB:
72 return std::string("(deprecated) sRGB");
73
74 case HAL_DATASPACE_V0_BT709:
Courtney Goeltzenleuchter039eb242017-05-31 17:51:45 -060075 return std::string("(deprecated) BT709");
Courtney Goeltzenleuchtere06ad182017-03-22 13:09:12 -060076
77 case HAL_DATASPACE_ARBITRARY:
78 return std::string("ARBITRARY");
79
80 case HAL_DATASPACE_UNKNOWN:
81 // Fallthrough
82 default:
83 return android::base::StringPrintf("Unknown deprecated dataspace code %d",
84 dataspaceSelect);
85 }
86 }
87
88 return android::base::StringPrintf("Unknown dataspace code %d", dataspaceSelect);
89}
90
91std::string decodeTransfer(android_dataspace dataspace) {
Courtney Goeltzenleuchter039eb242017-05-31 17:51:45 -060092 const uint32_t dataspaceSelect = (dataspace & HAL_DATASPACE_STANDARD_MASK);
93 if (dataspaceSelect == 0) {
94 switch (dataspace & 0xffff) {
95 case HAL_DATASPACE_JFIF:
96 case HAL_DATASPACE_BT601_625:
97 case HAL_DATASPACE_BT601_525:
98 case HAL_DATASPACE_V0_BT709:
99 return std::string("SMPTE_170M");
100
101 case HAL_DATASPACE_SRGB_LINEAR:
102 case HAL_DATASPACE_ARBITRARY:
103 return std::string("Linear");
104
105 case HAL_DATASPACE_SRGB:
106 return std::string("sRGB");
107
108 case HAL_DATASPACE_UNKNOWN:
109 // Fallthrough
110 default:
111 return std::string("");
112 }
113 }
114
Courtney Goeltzenleuchtere06ad182017-03-22 13:09:12 -0600115 const uint32_t dataspaceTransfer = (dataspace & HAL_DATASPACE_TRANSFER_MASK);
116 switch (dataspaceTransfer) {
117 case HAL_DATASPACE_TRANSFER_UNSPECIFIED:
118 return std::string("Unspecified");
119
120 case HAL_DATASPACE_TRANSFER_LINEAR:
121 return std::string("Linear");
122
123 case HAL_DATASPACE_TRANSFER_SRGB:
124 return std::string("sRGB");
125
126 case HAL_DATASPACE_TRANSFER_SMPTE_170M:
127 return std::string("SMPTE_170M");
128
129 case HAL_DATASPACE_TRANSFER_GAMMA2_2:
130 return std::string("gamma 2.2");
131
132 case HAL_DATASPACE_TRANSFER_GAMMA2_6:
133 return std::string("gamma 2.6");
134
135 case HAL_DATASPACE_TRANSFER_GAMMA2_8:
136 return std::string("gamma 2.8");
137
138 case HAL_DATASPACE_TRANSFER_ST2084:
139 return std::string("SMPTE 2084");
140
141 case HAL_DATASPACE_TRANSFER_HLG:
142 return std::string("STD-B67");
143 }
144
145 return android::base::StringPrintf("Unknown dataspace transfer %d", dataspaceTransfer);
146}
147
148std::string decodeRange(android_dataspace dataspace) {
Courtney Goeltzenleuchter039eb242017-05-31 17:51:45 -0600149 const uint32_t dataspaceSelect = (dataspace & HAL_DATASPACE_STANDARD_MASK);
150 if (dataspaceSelect == 0) {
151 switch (dataspace & 0xffff) {
152 case HAL_DATASPACE_JFIF:
153 case HAL_DATASPACE_SRGB_LINEAR:
154 case HAL_DATASPACE_SRGB:
155 return std::string("Full range");
156
157 case HAL_DATASPACE_BT601_625:
158 case HAL_DATASPACE_BT601_525:
159 case HAL_DATASPACE_V0_BT709:
160 return std::string("Limited range)");
161
162 case HAL_DATASPACE_ARBITRARY:
163 case HAL_DATASPACE_UNKNOWN:
164 // Fallthrough
165 default:
166 return std::string("unspecified range");
167 }
168 }
169
Courtney Goeltzenleuchtere06ad182017-03-22 13:09:12 -0600170 const uint32_t dataspaceRange = (dataspace & HAL_DATASPACE_RANGE_MASK);
171 switch (dataspaceRange) {
172 case HAL_DATASPACE_RANGE_UNSPECIFIED:
173 return std::string("Range Unspecified");
174
175 case HAL_DATASPACE_RANGE_FULL:
176 return std::string("Full range");
177
178 case HAL_DATASPACE_RANGE_LIMITED:
179 return std::string("Limited range");
180
181 case HAL_DATASPACE_RANGE_EXTENDED:
182 return std::string("Extended range");
183 }
184
185 return android::base::StringPrintf("Unknown dataspace range %d", dataspaceRange);
186}
187
188std::string dataspaceDetails(android_dataspace dataspace) {
Courtney Goeltzenleuchter4f8f3712017-04-14 09:18:26 -0600189 if (dataspace == 0) {
190 return "Default (0)";
191 }
Courtney Goeltzenleuchtere06ad182017-03-22 13:09:12 -0600192 return android::base::StringPrintf("%s %s %s", decodeStandard(dataspace).c_str(),
193 decodeTransfer(dataspace).c_str(),
194 decodeRange(dataspace).c_str());
195}
196
197std::string decodeColorMode(android_color_mode colorMode) {
198 switch (colorMode) {
199 case HAL_COLOR_MODE_NATIVE:
200 return std::string("HAL_COLOR_MODE_NATIVE");
201
202 case HAL_COLOR_MODE_STANDARD_BT601_625:
203 return std::string("HAL_COLOR_MODE_BT601_625");
204
205 case HAL_COLOR_MODE_STANDARD_BT601_625_UNADJUSTED:
206 return std::string("HAL_COLOR_MODE_BT601_625_UNADJUSTED");
207
208 case HAL_COLOR_MODE_STANDARD_BT601_525:
209 return std::string("HAL_COLOR_MODE_BT601_525");
210
211 case HAL_COLOR_MODE_STANDARD_BT601_525_UNADJUSTED:
212 return std::string("HAL_COLOR_MODE_BT601_525_UNADJUSTED");
213
214 case HAL_COLOR_MODE_STANDARD_BT709:
215 return std::string("HAL_COLOR_MODE_BT709");
216
217 case HAL_COLOR_MODE_DCI_P3:
218 return std::string("HAL_COLOR_MODE_DCI_P3");
219
220 case HAL_COLOR_MODE_SRGB:
221 return std::string("HAL_COLOR_MODE_SRGB");
222
223 case HAL_COLOR_MODE_ADOBE_RGB:
224 return std::string("HAL_COLOR_MODE_ADOBE_RGB");
225
226 case HAL_COLOR_MODE_DISPLAY_P3:
227 return std::string("HAL_COLOR_MODE_DISPLAY_P3");
228 }
229
230 return android::base::StringPrintf("Unknown color mode %d", colorMode);
231}
Courtney Goeltzenleuchter4f8f3712017-04-14 09:18:26 -0600232
233// Converts a PixelFormat to a human-readable string. Max 11 chars.
234// (Could use a table of prefab String8 objects.)
235std::string decodePixelFormat(android::PixelFormat format) {
236 switch (format) {
237 case android::PIXEL_FORMAT_UNKNOWN:
238 return std::string("Unknown/None");
239 case android::PIXEL_FORMAT_CUSTOM:
240 return std::string("Custom");
241 case android::PIXEL_FORMAT_TRANSLUCENT:
242 return std::string("Translucent");
243 case android::PIXEL_FORMAT_TRANSPARENT:
244 return std::string("Transparent");
245 case android::PIXEL_FORMAT_OPAQUE:
246 return std::string("Opaque");
247 case android::PIXEL_FORMAT_RGBA_8888:
248 return std::string("RGBA_8888");
249 case android::PIXEL_FORMAT_RGBX_8888:
250 return std::string("RGBx_8888");
251 case android::PIXEL_FORMAT_RGBA_FP16:
252 return std::string("RGBA_FP16");
253 case android::PIXEL_FORMAT_RGBA_1010102:
254 return std::string("RGBA_1010102");
255 case android::PIXEL_FORMAT_RGB_888:
256 return std::string("RGB_888");
257 case android::PIXEL_FORMAT_RGB_565:
258 return std::string("RGB_565");
259 case android::PIXEL_FORMAT_BGRA_8888:
260 return std::string("BGRA_8888");
261 default:
262 return android::base::StringPrintf("Unknown %#08x", format);
263 }
264}