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