Home | History | Annotate | Download | only in ui
      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