1 /* 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> 18 19 #include <android-base/stringprintf.h> 20 #include <string> 21 22 std::string decodeStandard(android_dataspace dataspace) { 23 const uint32_t dataspaceSelect = (dataspace & HAL_DATASPACE_STANDARD_MASK); 24 switch (dataspaceSelect) { 25 case HAL_DATASPACE_STANDARD_BT709: 26 return std::string("BT709"); 27 28 case HAL_DATASPACE_STANDARD_BT601_625: 29 return std::string("BT601_625"); 30 31 case HAL_DATASPACE_STANDARD_BT601_625_UNADJUSTED: 32 return std::string("BT601_625_UNADJUSTED"); 33 34 case HAL_DATASPACE_STANDARD_BT601_525: 35 return std::string("BT601_525"); 36 37 case HAL_DATASPACE_STANDARD_BT601_525_UNADJUSTED: 38 return std::string("BT601_525_UNADJUSTED"); 39 40 case HAL_DATASPACE_STANDARD_BT2020: 41 return std::string("BT2020"); 42 43 case HAL_DATASPACE_STANDARD_BT2020_CONSTANT_LUMINANCE: 44 return std::string("BT2020 (constant luminance)"); 45 46 case HAL_DATASPACE_STANDARD_BT470M: 47 return std::string("BT470M"); 48 49 case HAL_DATASPACE_STANDARD_FILM: 50 return std::string("FILM"); 51 52 case HAL_DATASPACE_STANDARD_DCI_P3: 53 return std::string("DCI-P3"); 54 55 case HAL_DATASPACE_STANDARD_ADOBE_RGB: 56 return std::string("AdobeRGB"); 57 58 case 0: 59 switch (dataspace & 0xffff) { 60 case HAL_DATASPACE_JFIF: 61 return std::string("(deprecated) JFIF (BT601_625, SMPTE_170M Full range)"); 62 63 case HAL_DATASPACE_BT601_625: 64 return std::string("(deprecated) BT601_625 (BT601_625, SMPTE_170M Limited " 65 "range)"); 66 67 case HAL_DATASPACE_BT601_525: 68 return std::string("(deprecated) BT601_525 (BT601_525, SMPTE_170M Limited " 69 "range)"); 70 71 case HAL_DATASPACE_SRGB_LINEAR: 72 return std::string("(deprecated) SRGB Linear Full range"); 73 74 case HAL_DATASPACE_SRGB: 75 return std::string("(deprecated) sRGB"); 76 77 case HAL_DATASPACE_V0_BT709: 78 return std::string("(deprecated) BT709 (BT709, SMPTE_170M Limited range)"); 79 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", 87 dataspaceSelect); 88 } 89 } 90 91 return android::base::StringPrintf("Unknown dataspace code %d", dataspaceSelect); 92 } 93 94 std::string decodeTransfer(android_dataspace dataspace) { 95 const uint32_t dataspaceTransfer = (dataspace & HAL_DATASPACE_TRANSFER_MASK); 96 switch (dataspaceTransfer) { 97 case HAL_DATASPACE_TRANSFER_UNSPECIFIED: 98 return std::string("Unspecified"); 99 100 case HAL_DATASPACE_TRANSFER_LINEAR: 101 return std::string("Linear"); 102 103 case HAL_DATASPACE_TRANSFER_SRGB: 104 return std::string("sRGB"); 105 106 case HAL_DATASPACE_TRANSFER_SMPTE_170M: 107 return std::string("SMPTE_170M"); 108 109 case HAL_DATASPACE_TRANSFER_GAMMA2_2: 110 return std::string("gamma 2.2"); 111 112 case HAL_DATASPACE_TRANSFER_GAMMA2_6: 113 return std::string("gamma 2.6"); 114 115 case HAL_DATASPACE_TRANSFER_GAMMA2_8: 116 return std::string("gamma 2.8"); 117 118 case HAL_DATASPACE_TRANSFER_ST2084: 119 return std::string("SMPTE 2084"); 120 121 case HAL_DATASPACE_TRANSFER_HLG: 122 return std::string("STD-B67"); 123 } 124 125 return android::base::StringPrintf("Unknown dataspace transfer %d", dataspaceTransfer); 126 } 127 128 std::string decodeRange(android_dataspace dataspace) { 129 const uint32_t dataspaceRange = (dataspace & HAL_DATASPACE_RANGE_MASK); 130 switch (dataspaceRange) { 131 case HAL_DATASPACE_RANGE_UNSPECIFIED: 132 return std::string("Range Unspecified"); 133 134 case HAL_DATASPACE_RANGE_FULL: 135 return std::string("Full range"); 136 137 case HAL_DATASPACE_RANGE_LIMITED: 138 return std::string("Limited range"); 139 140 case HAL_DATASPACE_RANGE_EXTENDED: 141 return std::string("Extended range"); 142 } 143 144 return android::base::StringPrintf("Unknown dataspace range %d", dataspaceRange); 145 } 146 147 std::string dataspaceDetails(android_dataspace dataspace) { 148 return android::base::StringPrintf("%s %s %s", decodeStandard(dataspace).c_str(), 149 decodeTransfer(dataspace).c_str(), 150 decodeRange(dataspace).c_str()); 151 } 152 153 std::string decodeColorMode(android_color_mode colorMode) { 154 switch (colorMode) { 155 case HAL_COLOR_MODE_NATIVE: 156 return std::string("HAL_COLOR_MODE_NATIVE"); 157 158 case HAL_COLOR_MODE_STANDARD_BT601_625: 159 return std::string("HAL_COLOR_MODE_BT601_625"); 160 161 case HAL_COLOR_MODE_STANDARD_BT601_625_UNADJUSTED: 162 return std::string("HAL_COLOR_MODE_BT601_625_UNADJUSTED"); 163 164 case HAL_COLOR_MODE_STANDARD_BT601_525: 165 return std::string("HAL_COLOR_MODE_BT601_525"); 166 167 case HAL_COLOR_MODE_STANDARD_BT601_525_UNADJUSTED: 168 return std::string("HAL_COLOR_MODE_BT601_525_UNADJUSTED"); 169 170 case HAL_COLOR_MODE_STANDARD_BT709: 171 return std::string("HAL_COLOR_MODE_BT709"); 172 173 case HAL_COLOR_MODE_DCI_P3: 174 return std::string("HAL_COLOR_MODE_DCI_P3"); 175 176 case HAL_COLOR_MODE_SRGB: 177 return std::string("HAL_COLOR_MODE_SRGB"); 178 179 case HAL_COLOR_MODE_ADOBE_RGB: 180 return std::string("HAL_COLOR_MODE_ADOBE_RGB"); 181 182 case HAL_COLOR_MODE_DISPLAY_P3: 183 return std::string("HAL_COLOR_MODE_DISPLAY_P3"); 184 } 185 186 return android::base::StringPrintf("Unknown color mode %d", colorMode); 187 } 188