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