1 /*
2 * Copyright (c) 2021-2022 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 RS_BASE_SCREEN_TYPES
17 #define RS_BASE_SCREEN_TYPES
18
19 #include <cstdint>
20 #include <type_traits>
21
22 namespace OHOS {
23 namespace Rosen {
24 // Logical ScreenId for both physical and virtual screen.
25 using ScreenId = uint64_t;
26
27 // Screen Physical Id provided by hdi-backend.
28 using ScreenPhysicalId = uint32_t;
29
30 constexpr ScreenId INVALID_SCREEN_ID = ~(static_cast<ScreenId>(0));
31
32 constexpr int32_t INVALID_BACKLIGHT_VALUE = -1;
33
34 constexpr uint32_t LAYER_COMPOSITION_CAPACITY = 12;
35
36 constexpr uint32_t DEFAULT_SKIP_FRAME_INTERVAL = 1;
37
38 constexpr int32_t SCREEN_ROTATION_NUM = 4;
39
40 constexpr int32_t RS_ROTATION_0 = 0;
41 constexpr int32_t RS_ROTATION_90 = 90;
42 constexpr int32_t RS_ROTATION_180 = 180;
43 constexpr int32_t RS_ROTATION_270 = 270;
44 constexpr int32_t RS_ROTATION_360 = 360;
45
ToScreenId(ScreenPhysicalId physicalId)46 inline constexpr ScreenId ToScreenId(ScreenPhysicalId physicalId)
47 {
48 return static_cast<ScreenId>(physicalId);
49 }
50
ToScreenPhysicalId(ScreenId id)51 inline constexpr ScreenPhysicalId ToScreenPhysicalId(ScreenId id)
52 {
53 return static_cast<ScreenPhysicalId>(id);
54 }
55
56 enum class ScreenEvent : uint8_t {
57 CONNECTED,
58 DISCONNECTED,
59 UNKNOWN,
60 };
61
62 enum class ScreenRotation : uint32_t {
63 ROTATION_0 = 0,
64 ROTATION_90,
65 ROTATION_180,
66 ROTATION_270,
67 INVALID_SCREEN_ROTATION,
68 };
69
70 /*
71 * @brief Enumerates screen constraint types, the frame to be displayed on screen at a given time.
72 */
73 enum class ScreenConstraintType : uint32_t {
74 CONSTRAINT_NONE = 0, /**< No constraint */
75 CONSTRAINT_ABSOLUTE, /**< Absolute timestamp */
76 CONSTRAINT_RELATIVE, /**< Relative timestamp */
77 };
78
79 enum class ScreenScaleMode : uint32_t {
80 FILL_MODE = 0,
81 UNISCALE_MODE,
82 INVALID_MODE,
83 };
84
85 typedef enum : uint32_t {
86 BUILT_IN_TYPE_SCREEN = 0,
87 EXTERNAL_TYPE_SCREEN,
88 VIRTUAL_TYPE_SCREEN,
89 UNKNOWN_TYPE_SCREEN,
90 } RSScreenType;
91
92 typedef enum : uint32_t {
93 POWER_STATUS_ON = 0,
94 POWER_STATUS_STANDBY,
95 POWER_STATUS_SUSPEND,
96 POWER_STATUS_OFF,
97 POWER_STATUS_OFF_FAKE,
98 POWER_STATUS_ON_ADVANCED,
99 POWER_STATUS_OFF_ADVANCED,
100 POWER_STATUS_BUTT,
101 INVALID_POWER_STATUS,
102 } ScreenPowerStatus;
103
104 typedef enum : uint32_t {
105 DISP_INTF_HDMI = 0,
106 DISP_INTF_LCD,
107 DISP_INTF_BT1120,
108 DISP_INTF_BT656,
109 DISP_INTF_YPBPR,
110 DISP_INTF_RGB,
111 DISP_INTF_CVBS,
112 DISP_INTF_SVIDEO,
113 DISP_INTF_VGA,
114 DISP_INTF_MIPI,
115 DISP_INTF_PANEL,
116 DISP_INTF_BUTT,
117 DISP_INVALID,
118 } ScreenInterfaceType;
119
120 typedef enum : uint32_t {
121 COLOR_GAMUT_INVALID = UINT32_MAX,
122 COLOR_GAMUT_NATIVE = 0,
123 COLOR_GAMUT_STANDARD_BT601,
124 COLOR_GAMUT_STANDARD_BT709,
125 COLOR_GAMUT_DCI_P3,
126 COLOR_GAMUT_SRGB,
127 COLOR_GAMUT_ADOBE_RGB,
128 COLOR_GAMUT_DISPLAY_P3,
129 COLOR_GAMUT_BT2020,
130 COLOR_GAMUT_BT2100_PQ,
131 COLOR_GAMUT_BT2100_HLG,
132 COLOR_GAMUT_DISPLAY_BT2020,
133 } ScreenColorGamut;
134
135 typedef enum : uint32_t {
136 GAMUT_MAP_CONSTANT = 0,
137 GAMUT_MAP_EXTENSION,
138 GAMUT_MAP_HDR_CONSTANT,
139 GAMUT_MAP_HDR_EXTENSION,
140 } ScreenGamutMap;
141
142 typedef enum : uint32_t {
143 NOT_SUPPORT_HDR = 0,
144 VIDEO_HLG,
145 VIDEO_HDR10,
146 VIDEO_HDR_VIVID,
147 IMAGE_HDR_VIVID_DUAL,
148 IMAGE_HDR_VIVID_SINGLE,
149 IMAGE_HDR_ISO_DUAL,
150 IMAGE_HDR_ISO_SINGLE,
151 } ScreenHDRFormat;
152
153 typedef enum : uint32_t {
154 MATAKEY_RED_PRIMARY_X = 0,
155 MATAKEY_RED_PRIMARY_Y = 1,
156 MATAKEY_GREEN_PRIMARY_X = 2,
157 MATAKEY_GREEN_PRIMARY_Y = 3,
158 MATAKEY_BLUE_PRIMARY_X = 4,
159 MATAKEY_BLUE_PRIMARY_Y = 5,
160 MATAKEY_WHITE_PRIMARY_X = 6,
161 MATAKEY_WHITE_PRIMARY_Y = 7,
162 MATAKEY_MAX_LUMINANCE = 8,
163 MATAKEY_MIN_LUMINANCE = 9,
164 MATAKEY_MAX_CONTENT_LIGHT_LEVEL = 10,
165 MATAKEY_MAX_FRAME_AVERAGE_LIGHT_LEVEL = 11,
166 MATAKEY_HDR10_PLUS = 12,
167 MATAKEY_HDR_VIVID = 13,
168 } ScreenHDRMetadataKey;
169
170 /*
171 * @brief Defines the screen HDR metadata.
172 */
173 typedef struct {
174 ScreenHDRMetadataKey key;
175 float value;
176 } ScreenHDRMetaData;
177
178 typedef enum : uint32_t {
179 SUCCESS = 0,
180 SCREEN_NOT_FOUND,
181 RS_CONNECTION_ERROR,
182 SURFACE_NOT_UNIQUE,
183 RENDER_SERVICE_NULL,
184 INVALID_ARGUMENTS,
185 WRITE_PARCEL_ERR,
186 HDI_ERROR,
187 SCREEN_MANAGER_NULL,
188 BLACKLIST_IS_EMPTY,
189 } StatusCode;
190
191 /*
192 * @brief Enumerates screen color key types supported by hardware acceleration.
193 */
194 typedef enum {
195 SCREEN_CKEY_NONE = 0, /**< No color key */
196 SCREEN_CKEY_SRC, /**< Source color key */
197 SCREEN_CKEY_DST, /**< Destination color key */
198 SCREEN_CKEY_BUTT /**< Null operation */
199 } ScreenColorKey;
200
201 /*
202 * @brief Enumerates screen mirror types supported by hardware acceleration.
203 */
204 typedef enum {
205 SCREEN_MIRROR_NONE = 0, /**< No mirror */
206 SCREEN_MIRROR_LR, /**< Left and right mirrors */
207 SCREEN_MIRROR_TB, /**< Top and bottom mirrors */
208 SCREEN_MIRROR_BUTT /**< Null operation */
209 } ScreenMirrorType;
210
211 /*
212 * @brief Enumerates the color data spaces.
213 */
214 typedef enum {
215 SCREEN_COLOR_DATA_SPACE_UNKNOWN = 0,
216 SCREEN_GAMUT_BT601 = 0x00000001,
217 SCREEN_GAMUT_BT709 = 0x00000002,
218 SCREEN_GAMUT_DCI_P3 = 0x00000003,
219 SCREEN_GAMUT_SRGB = 0x00000004,
220 SCREEN_GAMUT_ADOBE_RGB = 0x00000005,
221 SCREEN_GAMUT_DISPLAY_P3 = 0x00000006,
222 SCREEN_GAMUT_BT2020 = 0x00000007,
223 SCREEN_GAMUT_BT2100_PQ = 0x00000008,
224 SCREEN_GAMUT_BT2100_HLG = 0x00000009,
225 SCREEN_GAMUT_DISPLAY_BT2020 = 0x0000000a,
226 SCREEN_TRANSFORM_FUNC_UNSPECIFIED = 0x00000100,
227 SCREEN_TRANSFORM_FUNC_LINEAR = 0x00000200,
228 SCREEN_TRANSFORM_FUNC_SRGB = 0x00000300,
229 SCREEN_TRANSFORM_FUNC_SMPTE_170M = 0x00000400,
230 SCREEN_TRANSFORM_FUNC_GM2_2 = 0x00000500,
231 SCREEN_TRANSFORM_FUNC_GM2_6 = 0x00000600,
232 SCREEN_TRANSFORM_FUNC_GM2_8 = 0x00000700,
233 SCREEN_TRANSFORM_FUNC_ST2084 = 0x00000800,
234 SCREEN_TRANSFORM_FUNC_HLG = 0x00000900,
235 SCREEN_PRECISION_UNSPECIFIED = 0x00010000,
236 SCREEN_PRECISION_FULL = 0x00020000,
237 SCREEN_PRESION_LIMITED = 0x00030000,
238 SCREEN_PRESION_EXTENDED = 0x00040000,
239 SCREEN_BT601_SMPTE170M_FULL = SCREEN_GAMUT_BT601 | SCREEN_TRANSFORM_FUNC_SMPTE_170M | SCREEN_PRECISION_FULL,
240 SCREEN_BT601_SMPTE170M_LIMITED = SCREEN_GAMUT_BT601 | SCREEN_TRANSFORM_FUNC_SMPTE_170M | SCREEN_PRESION_LIMITED,
241 SCREEN_BT709_LINEAR_FULL = SCREEN_GAMUT_BT709 | SCREEN_TRANSFORM_FUNC_LINEAR | SCREEN_PRECISION_FULL,
242 SCREEN_BT709_LINEAR_EXTENDED = SCREEN_GAMUT_BT709 | SCREEN_TRANSFORM_FUNC_LINEAR | SCREEN_PRESION_EXTENDED,
243 SCREEN_BT709_SRGB_FULL = SCREEN_GAMUT_BT709 | SCREEN_TRANSFORM_FUNC_SRGB | SCREEN_PRECISION_FULL,
244 SCREEN_BT709_SRGB_EXTENDED = SCREEN_GAMUT_BT709 | SCREEN_TRANSFORM_FUNC_SRGB | SCREEN_PRESION_EXTENDED,
245 SCREEN_BT709_SMPTE170M_LIMITED = SCREEN_GAMUT_BT709 | SCREEN_TRANSFORM_FUNC_SMPTE_170M | SCREEN_PRESION_LIMITED,
246 SCREEN_DCI_P3_LINEAR_FULL = SCREEN_GAMUT_DCI_P3 | SCREEN_TRANSFORM_FUNC_LINEAR | SCREEN_PRECISION_FULL,
247 SCREEN_DCI_P3_GAMMA26_FULL = SCREEN_GAMUT_DCI_P3 | SCREEN_TRANSFORM_FUNC_GM2_6 | SCREEN_PRECISION_FULL,
248 SCREEN_DISPLAY_P3_LINEAR_FULL = SCREEN_GAMUT_DISPLAY_P3 | SCREEN_TRANSFORM_FUNC_LINEAR | SCREEN_PRECISION_FULL,
249 SCREEN_DCI_P3_SRGB_FULL = SCREEN_GAMUT_DCI_P3 | SCREEN_TRANSFORM_FUNC_SRGB | SCREEN_PRECISION_FULL,
250 SCREEN_ADOBE_RGB_GAMMA22_FULL = SCREEN_GAMUT_ADOBE_RGB | SCREEN_TRANSFORM_FUNC_GM2_2 | SCREEN_PRECISION_FULL,
251 SCREEN_BT2020_LINEAR_FULL = SCREEN_GAMUT_BT2020 | SCREEN_TRANSFORM_FUNC_LINEAR | SCREEN_PRECISION_FULL,
252 SCREEN_BT2020_SRGB_FULL = SCREEN_GAMUT_BT2020 | SCREEN_TRANSFORM_FUNC_SRGB | SCREEN_PRECISION_FULL,
253 SCREEN_BT2020_SMPTE170M_FULL = SCREEN_GAMUT_BT2020 | SCREEN_TRANSFORM_FUNC_SMPTE_170M | SCREEN_PRECISION_FULL,
254 SCREEN_BT2020_ST2084_FULL = SCREEN_GAMUT_BT2020 | SCREEN_TRANSFORM_FUNC_ST2084 | SCREEN_PRECISION_FULL,
255 SCREEN_BT2020_HLG_FULL = SCREEN_GAMUT_BT2020 | SCREEN_TRANSFORM_FUNC_HLG | SCREEN_PRECISION_FULL,
256 SCREEN_BT2020_ST2084_LIMITED = SCREEN_GAMUT_BT2020 | SCREEN_TRANSFORM_FUNC_ST2084 | SCREEN_PRESION_LIMITED,
257 } ScreenColorDataSpace;
258
259 // get the underlying type of an enum value.
260 template<typename EnumType>
ECast(EnumType t)261 inline constexpr typename std::underlying_type<EnumType>::type ECast(EnumType t)
262 {
263 return static_cast<typename std::underlying_type<EnumType>::type>(t);
264 }
265
ScreenRotationMapping(ScreenRotation screenCorrection)266 inline int32_t ScreenRotationMapping(ScreenRotation screenCorrection)
267 {
268 return screenCorrection == ScreenRotation::INVALID_SCREEN_ROTATION ?
269 RS_ROTATION_0 : static_cast<int32_t>(screenCorrection) * RS_ROTATION_90;
270 }
271 } // namespace Rosen
272 } // namespace OHOS
273
274 #endif // RS_BASE_SCREEN_TYPES
275