1 /* 2 * Copyright (c) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef OHOS_CJ_COLOR_MGR_UTILS_H 17 #define OHOS_CJ_COLOR_MGR_UTILS_H 18 19 #include <cstdint> 20 #include <hilog/log.h> 21 #include <memory> 22 #include <map> 23 #include <string> 24 #include "color_space.h" 25 26 #define FFI_EXPORT __attribute__((visibility("default"))) 27 28 namespace OHOS { 29 namespace ColorManager { 30 #ifndef TITLE 31 #define TITLE __func__ 32 #endif 33 34 constexpr OHOS::HiviewDFX::HiLogLabel LOG_LABEL = {LOG_CORE, 0xD001400, "CjColorSpace"}; 35 #define CMLOGE(fmt, args...) \ 36 (void)OHOS::HiviewDFX::HiLog::Error(LOG_LABEL, "%{public}s: " fmt, TITLE, ##args) 37 #define CMLOGI(fmt, args...) \ 38 (void)OHOS::HiviewDFX::HiLog::Info(LOG_LABEL, "%{public}s: " fmt, TITLE, ##args) 39 40 enum class ApiColorSpaceType : uint32_t { 41 UNKNOWN = 0, 42 ADOBE_RGB_1998 = 1, 43 DCI_P3 = 2, 44 DISPLAY_P3 = 3, 45 SRGB = 4, 46 CUSTOM = 5, 47 BT709 = 6, 48 BT601_EBU = 7, 49 BT601_SMPTE_C = 8, 50 BT2020_HLG = 9, 51 BT2020_PQ = 10, 52 P3_HLG = 11, 53 P3_PQ = 12, 54 ADOBE_RGB_1998_LIMIT = 13, 55 DISPLAY_P3_LIMIT = 14, 56 SRGB_LIMIT = 15, 57 BT709_LIMIT = 16, 58 BT601_EBU_LIMIT = 17, 59 BT601_SMPTE_C_LIMIT = 18, 60 BT2020_HLG_LIMIT = 19, 61 BT2020_PQ_LIMIT = 20, 62 P3_HLG_LIMIT = 21, 63 P3_PQ_LIMIT = 22, 64 LINEAR_P3 = 23, 65 LINEAR_SRGB = 24, 66 LINEAR_BT2020 = 25, 67 TYPE_END = 26, 68 LINEAR_BT709 = LINEAR_SRGB, 69 DISPLAY_SRGB = SRGB, 70 DISPLAY_P3_SRGB = DISPLAY_P3, 71 DISPLAY_P3_HLG = P3_HLG, 72 DISPLAY_P3_PQ = P3_PQ 73 }; 74 75 const std::map<ColorSpaceName, ApiColorSpaceType> NATIVE_TO_CJ_COLOR_SPACE_TYPE_MAP { 76 { ColorSpaceName::NONE, ApiColorSpaceType::UNKNOWN }, 77 { ColorSpaceName::ADOBE_RGB, ApiColorSpaceType::ADOBE_RGB_1998 }, 78 { ColorSpaceName::DCI_P3, ApiColorSpaceType::DCI_P3 }, 79 { ColorSpaceName::DISPLAY_P3, ApiColorSpaceType::DISPLAY_P3 }, 80 { ColorSpaceName::SRGB, ApiColorSpaceType::SRGB }, 81 { ColorSpaceName::BT709, ApiColorSpaceType::BT709 }, 82 { ColorSpaceName::BT601_EBU, ApiColorSpaceType::BT601_EBU }, 83 { ColorSpaceName::BT601_SMPTE_C, ApiColorSpaceType::BT601_SMPTE_C }, 84 { ColorSpaceName::BT2020_HLG, ApiColorSpaceType::BT2020_HLG }, 85 { ColorSpaceName::BT2020_PQ, ApiColorSpaceType::BT2020_PQ }, 86 { ColorSpaceName::P3_HLG, ApiColorSpaceType::P3_HLG }, 87 { ColorSpaceName::P3_PQ, ApiColorSpaceType::P3_PQ }, 88 { ColorSpaceName::ADOBE_RGB_LIMIT, ApiColorSpaceType::ADOBE_RGB_1998_LIMIT }, 89 { ColorSpaceName::DISPLAY_P3_LIMIT, ApiColorSpaceType::DISPLAY_P3_LIMIT }, 90 { ColorSpaceName::SRGB_LIMIT, ApiColorSpaceType::SRGB_LIMIT }, 91 { ColorSpaceName::BT709_LIMIT, ApiColorSpaceType::BT709_LIMIT }, 92 { ColorSpaceName::BT601_EBU_LIMIT, ApiColorSpaceType::BT601_EBU_LIMIT }, 93 { ColorSpaceName::BT601_SMPTE_C_LIMIT, ApiColorSpaceType::BT601_SMPTE_C_LIMIT }, 94 { ColorSpaceName::BT2020_HLG_LIMIT, ApiColorSpaceType::BT2020_HLG_LIMIT }, 95 { ColorSpaceName::BT2020_PQ_LIMIT, ApiColorSpaceType::BT2020_PQ_LIMIT }, 96 { ColorSpaceName::P3_HLG_LIMIT, ApiColorSpaceType::P3_HLG_LIMIT }, 97 { ColorSpaceName::P3_PQ_LIMIT, ApiColorSpaceType::P3_PQ_LIMIT }, 98 { ColorSpaceName::LINEAR_P3, ApiColorSpaceType::LINEAR_P3 }, 99 { ColorSpaceName::LINEAR_SRGB, ApiColorSpaceType::LINEAR_SRGB }, 100 { ColorSpaceName::LINEAR_BT709, ApiColorSpaceType::LINEAR_BT709 }, 101 { ColorSpaceName::LINEAR_BT2020, ApiColorSpaceType::LINEAR_BT2020 }, 102 { ColorSpaceName::DISPLAY_SRGB, ApiColorSpaceType::DISPLAY_SRGB }, 103 { ColorSpaceName::DISPLAY_P3_SRGB, ApiColorSpaceType::DISPLAY_P3_SRGB }, 104 { ColorSpaceName::DISPLAY_P3_HLG, ApiColorSpaceType::DISPLAY_P3_HLG }, 105 { ColorSpaceName::DISPLAY_P3_PQ, ApiColorSpaceType::DISPLAY_P3_PQ }, 106 { ColorSpaceName::CUSTOM, ApiColorSpaceType::CUSTOM }, 107 }; 108 109 const std::map<ApiColorSpaceType, ColorSpaceName> CJ_TO_NATIVE_COLOR_SPACE_NAME_MAP { 110 { ApiColorSpaceType::UNKNOWN, ColorSpaceName::NONE }, 111 { ApiColorSpaceType::ADOBE_RGB_1998, ColorSpaceName::ADOBE_RGB }, 112 { ApiColorSpaceType::DCI_P3, ColorSpaceName::DCI_P3 }, 113 { ApiColorSpaceType::DISPLAY_P3, ColorSpaceName::DISPLAY_P3 }, 114 { ApiColorSpaceType::SRGB, ColorSpaceName::SRGB }, 115 { ApiColorSpaceType::BT709, ColorSpaceName::BT709 }, 116 { ApiColorSpaceType::BT601_EBU, ColorSpaceName::BT601_EBU }, 117 { ApiColorSpaceType::BT601_SMPTE_C, ColorSpaceName::BT601_SMPTE_C }, 118 { ApiColorSpaceType::BT2020_HLG, ColorSpaceName::BT2020_HLG }, 119 { ApiColorSpaceType::BT2020_PQ, ColorSpaceName::BT2020_PQ }, 120 { ApiColorSpaceType::P3_HLG, ColorSpaceName::P3_HLG }, 121 { ApiColorSpaceType::P3_PQ, ColorSpaceName::P3_PQ }, 122 { ApiColorSpaceType::ADOBE_RGB_1998_LIMIT, ColorSpaceName::ADOBE_RGB_LIMIT }, 123 { ApiColorSpaceType::DISPLAY_P3_LIMIT, ColorSpaceName::DISPLAY_P3_LIMIT }, 124 { ApiColorSpaceType::SRGB_LIMIT, ColorSpaceName::SRGB_LIMIT }, 125 { ApiColorSpaceType::BT709_LIMIT, ColorSpaceName::BT709_LIMIT }, 126 { ApiColorSpaceType::BT601_EBU_LIMIT, ColorSpaceName::BT601_EBU_LIMIT }, 127 { ApiColorSpaceType::BT601_SMPTE_C_LIMIT, ColorSpaceName::BT601_SMPTE_C_LIMIT }, 128 { ApiColorSpaceType::BT2020_HLG_LIMIT, ColorSpaceName::BT2020_HLG_LIMIT }, 129 { ApiColorSpaceType::BT2020_PQ_LIMIT, ColorSpaceName::BT2020_PQ_LIMIT }, 130 { ApiColorSpaceType::P3_HLG_LIMIT, ColorSpaceName::P3_HLG_LIMIT }, 131 { ApiColorSpaceType::P3_PQ_LIMIT, ColorSpaceName::P3_PQ_LIMIT }, 132 { ApiColorSpaceType::LINEAR_P3, ColorSpaceName::LINEAR_P3 }, 133 { ApiColorSpaceType::LINEAR_SRGB, ColorSpaceName::LINEAR_SRGB }, 134 { ApiColorSpaceType::LINEAR_BT709, ColorSpaceName::LINEAR_BT709 }, 135 { ApiColorSpaceType::LINEAR_BT2020, ColorSpaceName::LINEAR_BT2020 }, 136 { ApiColorSpaceType::DISPLAY_SRGB, ColorSpaceName::DISPLAY_SRGB }, 137 { ApiColorSpaceType::DISPLAY_P3_SRGB, ColorSpaceName::DISPLAY_P3_SRGB }, 138 { ApiColorSpaceType::DISPLAY_P3_HLG, ColorSpaceName::DISPLAY_P3_HLG }, 139 { ApiColorSpaceType::DISPLAY_P3_PQ, ColorSpaceName::DISPLAY_P3_PQ }, 140 { ApiColorSpaceType::CUSTOM, ColorSpaceName::CUSTOM }, 141 }; 142 143 enum class CMError : int32_t { 144 CM_OK = 0, 145 CM_ERROR_NULLPTR, 146 CM_ERROR_INVALID_PARAM, 147 CM_ERROR_INVALID_ENUM_USAGE, 148 }; 149 150 enum class CMErrorCode : int32_t { 151 CM_OK = 0, 152 CM_ERROR_NO_PERMISSION = 201, // the value do not change. It is defined on all system 153 CM_ERROR_INVALID_PARAM = 401, // the value do not change. It is defined on all system 154 CM_ERROR_DEVICE_NOT_SUPPORT = 801, // the value do not change. It is defined on all system 155 CM_ERROR_ABNORMAL_PARAM_VALUE = 18600001, // the value do not change. It is defined on color manager system 156 }; 157 158 const std::map<CMError, CMErrorCode> CJ_TO_ERROR_CODE_MAP { 159 { CMError::CM_OK, CMErrorCode::CM_OK }, 160 { CMError::CM_ERROR_NULLPTR, CMErrorCode::CM_ERROR_INVALID_PARAM }, 161 { CMError::CM_ERROR_INVALID_PARAM, CMErrorCode::CM_ERROR_INVALID_PARAM }, 162 { CMError::CM_ERROR_INVALID_ENUM_USAGE, CMErrorCode::CM_ERROR_ABNORMAL_PARAM_VALUE }, 163 }; 164 } 165 } 166 167 class FFI_EXPORT Utils { 168 public: 169 static char* MallocCString(const std::string& origin); 170 }; 171 #endif