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