blob: 17ebf803297bc81621d1483cf045fef6f3792a7c [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>
Kalle Raitaa099a242017-01-11 11:17:29 -080019#include <ui/Rect.h>
Courtney Goeltzenleuchtere06ad182017-03-22 13:09:12 -060020
21#include <android-base/stringprintf.h>
22#include <string>
23
Kalle Raitaa099a242017-01-11 11:17:29 -080024using android::base::StringPrintf;
25
Courtney Goeltzenleuchtere06ad182017-03-22 13:09:12 -060026std::string decodeStandard(android_dataspace dataspace) {
27 const uint32_t dataspaceSelect = (dataspace & HAL_DATASPACE_STANDARD_MASK);
28 switch (dataspaceSelect) {
29 case HAL_DATASPACE_STANDARD_BT709:
30 return std::string("BT709");
31
32 case HAL_DATASPACE_STANDARD_BT601_625:
33 return std::string("BT601_625");
34
35 case HAL_DATASPACE_STANDARD_BT601_625_UNADJUSTED:
36 return std::string("BT601_625_UNADJUSTED");
37
38 case HAL_DATASPACE_STANDARD_BT601_525:
39 return std::string("BT601_525");
40
41 case HAL_DATASPACE_STANDARD_BT601_525_UNADJUSTED:
42 return std::string("BT601_525_UNADJUSTED");
43
44 case HAL_DATASPACE_STANDARD_BT2020:
45 return std::string("BT2020");
46
47 case HAL_DATASPACE_STANDARD_BT2020_CONSTANT_LUMINANCE:
48 return std::string("BT2020 (constant luminance)");
49
50 case HAL_DATASPACE_STANDARD_BT470M:
51 return std::string("BT470M");
52
53 case HAL_DATASPACE_STANDARD_FILM:
54 return std::string("FILM");
55
56 case HAL_DATASPACE_STANDARD_DCI_P3:
57 return std::string("DCI-P3");
58
59 case HAL_DATASPACE_STANDARD_ADOBE_RGB:
60 return std::string("AdobeRGB");
61
62 case 0:
63 switch (dataspace & 0xffff) {
64 case HAL_DATASPACE_JFIF:
Courtney Goeltzenleuchter039eb242017-05-31 17:51:45 -060065 return std::string("(deprecated) JFIF (BT601_625)");
Courtney Goeltzenleuchtere06ad182017-03-22 13:09:12 -060066
67 case HAL_DATASPACE_BT601_625:
Courtney Goeltzenleuchter039eb242017-05-31 17:51:45 -060068 return std::string("(deprecated) BT601_625");
Courtney Goeltzenleuchtere06ad182017-03-22 13:09:12 -060069
70 case HAL_DATASPACE_BT601_525:
Courtney Goeltzenleuchter039eb242017-05-31 17:51:45 -060071 return std::string("(deprecated) BT601_525");
Courtney Goeltzenleuchtere06ad182017-03-22 13:09:12 -060072
73 case HAL_DATASPACE_SRGB_LINEAR:
Courtney Goeltzenleuchtere06ad182017-03-22 13:09:12 -060074 case HAL_DATASPACE_SRGB:
75 return std::string("(deprecated) sRGB");
76
Yiwei Zhang8cf697c2018-03-01 17:27:39 -080077 case HAL_DATASPACE_BT709:
Courtney Goeltzenleuchter039eb242017-05-31 17:51:45 -060078 return std::string("(deprecated) BT709");
Courtney Goeltzenleuchtere06ad182017-03-22 13:09:12 -060079
80 case HAL_DATASPACE_ARBITRARY:
81 return std::string("ARBITRARY");
82
83 case HAL_DATASPACE_UNKNOWN:
84 // Fallthrough
85 default:
86 return android::base::StringPrintf("Unknown deprecated dataspace code %d",
Yiwei Zhang8cf697c2018-03-01 17:27:39 -080087 dataspace);
Courtney Goeltzenleuchtere06ad182017-03-22 13:09:12 -060088 }
89 }
90
91 return android::base::StringPrintf("Unknown dataspace code %d", dataspaceSelect);
92}
93
94std::string decodeTransfer(android_dataspace dataspace) {
Courtney Goeltzenleuchter039eb242017-05-31 17:51:45 -060095 const uint32_t dataspaceSelect = (dataspace & HAL_DATASPACE_STANDARD_MASK);
96 if (dataspaceSelect == 0) {
97 switch (dataspace & 0xffff) {
98 case HAL_DATASPACE_JFIF:
99 case HAL_DATASPACE_BT601_625:
100 case HAL_DATASPACE_BT601_525:
Yiwei Zhang8cf697c2018-03-01 17:27:39 -0800101 case HAL_DATASPACE_BT709:
Courtney Goeltzenleuchter039eb242017-05-31 17:51:45 -0600102 return std::string("SMPTE_170M");
103
104 case HAL_DATASPACE_SRGB_LINEAR:
105 case HAL_DATASPACE_ARBITRARY:
106 return std::string("Linear");
107
108 case HAL_DATASPACE_SRGB:
109 return std::string("sRGB");
110
111 case HAL_DATASPACE_UNKNOWN:
112 // Fallthrough
113 default:
114 return std::string("");
115 }
116 }
117
Courtney Goeltzenleuchtere06ad182017-03-22 13:09:12 -0600118 const uint32_t dataspaceTransfer = (dataspace & HAL_DATASPACE_TRANSFER_MASK);
119 switch (dataspaceTransfer) {
120 case HAL_DATASPACE_TRANSFER_UNSPECIFIED:
121 return std::string("Unspecified");
122
123 case HAL_DATASPACE_TRANSFER_LINEAR:
124 return std::string("Linear");
125
126 case HAL_DATASPACE_TRANSFER_SRGB:
127 return std::string("sRGB");
128
129 case HAL_DATASPACE_TRANSFER_SMPTE_170M:
130 return std::string("SMPTE_170M");
131
132 case HAL_DATASPACE_TRANSFER_GAMMA2_2:
133 return std::string("gamma 2.2");
134
135 case HAL_DATASPACE_TRANSFER_GAMMA2_6:
136 return std::string("gamma 2.6");
137
138 case HAL_DATASPACE_TRANSFER_GAMMA2_8:
139 return std::string("gamma 2.8");
140
141 case HAL_DATASPACE_TRANSFER_ST2084:
142 return std::string("SMPTE 2084");
143
144 case HAL_DATASPACE_TRANSFER_HLG:
145 return std::string("STD-B67");
146 }
147
148 return android::base::StringPrintf("Unknown dataspace transfer %d", dataspaceTransfer);
149}
150
151std::string decodeRange(android_dataspace dataspace) {
Courtney Goeltzenleuchter039eb242017-05-31 17:51:45 -0600152 const uint32_t dataspaceSelect = (dataspace & HAL_DATASPACE_STANDARD_MASK);
153 if (dataspaceSelect == 0) {
154 switch (dataspace & 0xffff) {
155 case HAL_DATASPACE_JFIF:
156 case HAL_DATASPACE_SRGB_LINEAR:
157 case HAL_DATASPACE_SRGB:
158 return std::string("Full range");
159
160 case HAL_DATASPACE_BT601_625:
161 case HAL_DATASPACE_BT601_525:
Yiwei Zhang8cf697c2018-03-01 17:27:39 -0800162 case HAL_DATASPACE_BT709:
163 return std::string("Limited range");
Courtney Goeltzenleuchter039eb242017-05-31 17:51:45 -0600164
165 case HAL_DATASPACE_ARBITRARY:
166 case HAL_DATASPACE_UNKNOWN:
167 // Fallthrough
168 default:
169 return std::string("unspecified range");
170 }
171 }
172
Courtney Goeltzenleuchtere06ad182017-03-22 13:09:12 -0600173 const uint32_t dataspaceRange = (dataspace & HAL_DATASPACE_RANGE_MASK);
174 switch (dataspaceRange) {
175 case HAL_DATASPACE_RANGE_UNSPECIFIED:
176 return std::string("Range Unspecified");
177
178 case HAL_DATASPACE_RANGE_FULL:
179 return std::string("Full range");
180
181 case HAL_DATASPACE_RANGE_LIMITED:
182 return std::string("Limited range");
183
184 case HAL_DATASPACE_RANGE_EXTENDED:
185 return std::string("Extended range");
186 }
187
188 return android::base::StringPrintf("Unknown dataspace range %d", dataspaceRange);
189}
190
191std::string dataspaceDetails(android_dataspace dataspace) {
Courtney Goeltzenleuchter4f8f3712017-04-14 09:18:26 -0600192 if (dataspace == 0) {
Courtney Goeltzenleuchter9f484642017-07-14 12:14:28 -0600193 return "Default";
Courtney Goeltzenleuchter4f8f3712017-04-14 09:18:26 -0600194 }
Courtney Goeltzenleuchtere06ad182017-03-22 13:09:12 -0600195 return android::base::StringPrintf("%s %s %s", decodeStandard(dataspace).c_str(),
196 decodeTransfer(dataspace).c_str(),
197 decodeRange(dataspace).c_str());
198}
199
200std::string decodeColorMode(android_color_mode colorMode) {
201 switch (colorMode) {
202 case HAL_COLOR_MODE_NATIVE:
203 return std::string("HAL_COLOR_MODE_NATIVE");
204
205 case HAL_COLOR_MODE_STANDARD_BT601_625:
206 return std::string("HAL_COLOR_MODE_BT601_625");
207
208 case HAL_COLOR_MODE_STANDARD_BT601_625_UNADJUSTED:
209 return std::string("HAL_COLOR_MODE_BT601_625_UNADJUSTED");
210
211 case HAL_COLOR_MODE_STANDARD_BT601_525:
212 return std::string("HAL_COLOR_MODE_BT601_525");
213
214 case HAL_COLOR_MODE_STANDARD_BT601_525_UNADJUSTED:
215 return std::string("HAL_COLOR_MODE_BT601_525_UNADJUSTED");
216
217 case HAL_COLOR_MODE_STANDARD_BT709:
218 return std::string("HAL_COLOR_MODE_BT709");
219
220 case HAL_COLOR_MODE_DCI_P3:
221 return std::string("HAL_COLOR_MODE_DCI_P3");
222
223 case HAL_COLOR_MODE_SRGB:
224 return std::string("HAL_COLOR_MODE_SRGB");
225
226 case HAL_COLOR_MODE_ADOBE_RGB:
227 return std::string("HAL_COLOR_MODE_ADOBE_RGB");
228
229 case HAL_COLOR_MODE_DISPLAY_P3:
230 return std::string("HAL_COLOR_MODE_DISPLAY_P3");
231 }
232
233 return android::base::StringPrintf("Unknown color mode %d", colorMode);
234}
Courtney Goeltzenleuchter4f8f3712017-04-14 09:18:26 -0600235
236// Converts a PixelFormat to a human-readable string. Max 11 chars.
237// (Could use a table of prefab String8 objects.)
238std::string decodePixelFormat(android::PixelFormat format) {
239 switch (format) {
240 case android::PIXEL_FORMAT_UNKNOWN:
241 return std::string("Unknown/None");
242 case android::PIXEL_FORMAT_CUSTOM:
243 return std::string("Custom");
244 case android::PIXEL_FORMAT_TRANSLUCENT:
245 return std::string("Translucent");
246 case android::PIXEL_FORMAT_TRANSPARENT:
247 return std::string("Transparent");
248 case android::PIXEL_FORMAT_OPAQUE:
249 return std::string("Opaque");
250 case android::PIXEL_FORMAT_RGBA_8888:
251 return std::string("RGBA_8888");
252 case android::PIXEL_FORMAT_RGBX_8888:
253 return std::string("RGBx_8888");
254 case android::PIXEL_FORMAT_RGBA_FP16:
255 return std::string("RGBA_FP16");
256 case android::PIXEL_FORMAT_RGBA_1010102:
257 return std::string("RGBA_1010102");
258 case android::PIXEL_FORMAT_RGB_888:
259 return std::string("RGB_888");
260 case android::PIXEL_FORMAT_RGB_565:
261 return std::string("RGB_565");
262 case android::PIXEL_FORMAT_BGRA_8888:
263 return std::string("BGRA_8888");
264 default:
265 return android::base::StringPrintf("Unknown %#08x", format);
266 }
267}
Kalle Raitaa099a242017-01-11 11:17:29 -0800268
269std::string to_string(const android::Rect& rect) {
270 return StringPrintf("(%4d,%4d,%4d,%4d)", rect.left, rect.top, rect.right, rect.bottom);
271}