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
ToScreenId(ScreenPhysicalId physicalId)38 inline constexpr ScreenId ToScreenId(ScreenPhysicalId physicalId)
39 {
40 return static_cast<ScreenId>(physicalId);
41 }
42
ToScreenPhysicalId(ScreenId id)43 inline constexpr ScreenPhysicalId ToScreenPhysicalId(ScreenId id)
44 {
45 return static_cast<ScreenPhysicalId>(id);
46 }
47
48 enum class ScreenEvent : uint8_t {
49 CONNECTED,
50 DISCONNECTED,
51 UNKNOWN,
52 };
53
54 enum class ScreenRotation : uint32_t {
55 ROTATION_0 = 0,
56 ROTATION_90,
57 ROTATION_180,
58 ROTATION_270,
59 INVALID_SCREEN_ROTATION,
60 };
61
62 typedef enum : uint32_t {
63 BUILT_IN_TYPE_SCREEN = 0,
64 EXTERNAL_TYPE_SCREEN,
65 VIRTUAL_TYPE_SCREEN,
66 UNKNOWN_TYPE_SCREEN,
67 } RSScreenType;
68
69 typedef enum : uint32_t {
70 POWER_STATUS_ON = 0,
71 POWER_STATUS_STANDBY,
72 POWER_STATUS_SUSPEND,
73 POWER_STATUS_OFF,
74 POWER_STATUS_BUTT,
75 INVALID_POWER_STATUS,
76 } ScreenPowerStatus;
77
78 typedef enum : uint32_t {
79 DISP_INTF_HDMI = 0,
80 DISP_INTF_LCD,
81 DISP_INTF_BT1120,
82 DISP_INTF_BT656,
83 DISP_INTF_YPBPR,
84 DISP_INTF_RGB,
85 DISP_INTF_CVBS,
86 DISP_INTF_SVIDEO,
87 DISP_INTF_VGA,
88 DISP_INTF_MIPI,
89 DISP_INTF_PANEL,
90 DISP_INTF_BUTT,
91 DISP_INVALID,
92 } ScreenInterfaceType;
93
94 typedef enum : uint32_t {
95 COLOR_GAMUT_INVALID = UINT32_MAX,
96 COLOR_GAMUT_NATIVE = 0,
97 COLOR_GAMUT_STANDARD_BT601,
98 COLOR_GAMUT_STANDARD_BT709,
99 COLOR_GAMUT_DCI_P3,
100 COLOR_GAMUT_SRGB,
101 COLOR_GAMUT_ADOBE_RGB,
102 COLOR_GAMUT_DISPLAY_P3,
103 COLOR_GAMUT_BT2020,
104 COLOR_GAMUT_BT2100_PQ,
105 COLOR_GAMUT_BT2100_HLG,
106 COLOR_GAMUT_DISPLAY_BT2020,
107 } ScreenColorGamut;
108
109 typedef enum : uint32_t {
110 GAMUT_MAP_CONSTANT = 0,
111 GAMUT_MAP_EXTENSION,
112 GAMUT_MAP_HDR_CONSTANT,
113 GAMUT_MAP_HDR_EXTENSION,
114 } ScreenGamutMap;
115
116 typedef enum : uint32_t {
117 NOT_SUPPORT_HDR = 0,
118 DOLBY_VISION,
119 HDR10,
120 HLG,
121 HDR10_PLUS,
122 HDR_VIVID,
123 } ScreenHDRFormat;
124
125 typedef enum : uint32_t {
126 MATAKEY_RED_PRIMARY_X = 0,
127 MATAKEY_RED_PRIMARY_Y = 1,
128 MATAKEY_GREEN_PRIMARY_X = 2,
129 MATAKEY_GREEN_PRIMARY_Y = 3,
130 MATAKEY_BLUE_PRIMARY_X = 4,
131 MATAKEY_BLUE_PRIMARY_Y = 5,
132 MATAKEY_WHITE_PRIMARY_X = 6,
133 MATAKEY_WHITE_PRIMARY_Y = 7,
134 MATAKEY_MAX_LUMINANCE = 8,
135 MATAKEY_MIN_LUMINANCE = 9,
136 MATAKEY_MAX_CONTENT_LIGHT_LEVEL = 10,
137 MATAKEY_MAX_FRAME_AVERAGE_LIGHT_LEVEL = 11,
138 MATAKEY_HDR10_PLUS = 12,
139 MATAKEY_HDR_VIVID = 13,
140 } ScreenHDRMetadataKey;
141
142 /*
143 * @brief Defines the screen HDR metadata.
144 */
145 typedef struct {
146 ScreenHDRMetadataKey key;
147 float value;
148 } ScreenHDRMetaData;
149
150 typedef enum : uint32_t {
151 SUCCESS = 0,
152 SCREEN_NOT_FOUND,
153 RS_CONNECTION_ERROR,
154 SURFACE_NOT_UNIQUE,
155 RENDER_SERVICE_NULL,
156 INVALID_ARGUMENTS,
157 WRITE_PARCEL_ERR,
158 HDI_ERROR,
159 SCREEN_MANAGER_NULL,
160 } StatusCode;
161
162 /*
163 * @brief Enumerates screen color key types supported by hardware acceleration.
164 */
165 typedef enum {
166 SCREEN_CKEY_NONE = 0, /**< No color key */
167 SCREEN_CKEY_SRC, /**< Source color key */
168 SCREEN_CKEY_DST, /**< Destination color key */
169 SCREEN_CKEY_BUTT /**< Null operation */
170 } ScreenColorKey;
171
172 /*
173 * @brief Enumerates screen mirror types supported by hardware acceleration.
174 */
175 typedef enum {
176 SCREEN_MIRROR_NONE = 0, /**< No mirror */
177 SCREEN_MIRROR_LR, /**< Left and right mirrors */
178 SCREEN_MIRROR_TB, /**< Top and bottom mirrors */
179 SCREEN_MIRROR_BUTT /**< Null operation */
180 } ScreenMirrorType;
181
182 /*
183 * @brief Enumerates the color data spaces.
184 */
185 typedef enum {
186 SCREEN_COLOR_DATA_SPACE_UNKNOWN = 0,
187 SCREEN_GAMUT_BT601 = 0x00000001,
188 SCREEN_GAMUT_BT709 = 0x00000002,
189 SCREEN_GAMUT_DCI_P3 = 0x00000003,
190 SCREEN_GAMUT_SRGB = 0x00000004,
191 SCREEN_GAMUT_ADOBE_RGB = 0x00000005,
192 SCREEN_GAMUT_DISPLAY_P3 = 0x00000006,
193 SCREEN_GAMUT_BT2020 = 0x00000007,
194 SCREEN_GAMUT_BT2100_PQ = 0x00000008,
195 SCREEN_GAMUT_BT2100_HLG = 0x00000009,
196 SCREEN_GAMUT_DISPLAY_BT2020 = 0x0000000a,
197 SCREEN_TRANSFORM_FUNC_UNSPECIFIED = 0x00000100,
198 SCREEN_TRANSFORM_FUNC_LINEAR = 0x00000200,
199 SCREEN_TRANSFORM_FUNC_SRGB = 0x00000300,
200 SCREEN_TRANSFORM_FUNC_SMPTE_170M = 0x00000400,
201 SCREEN_TRANSFORM_FUNC_GM2_2 = 0x00000500,
202 SCREEN_TRANSFORM_FUNC_GM2_6 = 0x00000600,
203 SCREEN_TRANSFORM_FUNC_GM2_8 = 0x00000700,
204 SCREEN_TRANSFORM_FUNC_ST2084 = 0x00000800,
205 SCREEN_TRANSFORM_FUNC_HLG = 0x00000900,
206 SCREEN_PRECISION_UNSPECIFIED = 0x00010000,
207 SCREEN_PRECISION_FULL = 0x00020000,
208 SCREEN_PRESION_LIMITED = 0x00030000,
209 SCREEN_PRESION_EXTENDED = 0x00040000,
210 SCREEN_BT601_SMPTE170M_FULL = SCREEN_GAMUT_BT601 | SCREEN_TRANSFORM_FUNC_SMPTE_170M | SCREEN_PRECISION_FULL,
211 SCREEN_BT601_SMPTE170M_LIMITED = SCREEN_GAMUT_BT601 | SCREEN_TRANSFORM_FUNC_SMPTE_170M | SCREEN_PRESION_LIMITED,
212 SCREEN_BT709_LINEAR_FULL = SCREEN_GAMUT_BT709 | SCREEN_TRANSFORM_FUNC_LINEAR | SCREEN_PRECISION_FULL,
213 SCREEN_BT709_LINEAR_EXTENDED = SCREEN_GAMUT_BT709 | SCREEN_TRANSFORM_FUNC_LINEAR | SCREEN_PRESION_EXTENDED,
214 SCREEN_BT709_SRGB_FULL = SCREEN_GAMUT_BT709 | SCREEN_TRANSFORM_FUNC_SRGB | SCREEN_PRECISION_FULL,
215 SCREEN_BT709_SRGB_EXTENDED = SCREEN_GAMUT_BT709 | SCREEN_TRANSFORM_FUNC_SRGB | SCREEN_PRESION_EXTENDED,
216 SCREEN_BT709_SMPTE170M_LIMITED = SCREEN_GAMUT_BT709 | SCREEN_TRANSFORM_FUNC_SMPTE_170M | SCREEN_PRESION_LIMITED,
217 SCREEN_DCI_P3_LINEAR_FULL = SCREEN_GAMUT_DCI_P3 | SCREEN_TRANSFORM_FUNC_LINEAR | SCREEN_PRECISION_FULL,
218 SCREEN_DCI_P3_GAMMA26_FULL = SCREEN_GAMUT_DCI_P3 | SCREEN_TRANSFORM_FUNC_GM2_6 | SCREEN_PRECISION_FULL,
219 SCREEN_DISPLAY_P3_LINEAR_FULL = SCREEN_GAMUT_DISPLAY_P3 | SCREEN_TRANSFORM_FUNC_LINEAR | SCREEN_PRECISION_FULL,
220 SCREEN_DCI_P3_SRGB_FULL = SCREEN_GAMUT_DCI_P3 | SCREEN_TRANSFORM_FUNC_SRGB | SCREEN_PRECISION_FULL,
221 SCREEN_ADOBE_RGB_GAMMA22_FULL = SCREEN_GAMUT_ADOBE_RGB | SCREEN_TRANSFORM_FUNC_GM2_2 | SCREEN_PRECISION_FULL,
222 SCREEN_BT2020_LINEAR_FULL = SCREEN_GAMUT_BT2020 | SCREEN_TRANSFORM_FUNC_LINEAR | SCREEN_PRECISION_FULL,
223 SCREEN_BT2020_SRGB_FULL = SCREEN_GAMUT_BT2020 | SCREEN_TRANSFORM_FUNC_SRGB | SCREEN_PRECISION_FULL,
224 SCREEN_BT2020_SMPTE170M_FULL = SCREEN_GAMUT_BT2020 | SCREEN_TRANSFORM_FUNC_SMPTE_170M | SCREEN_PRECISION_FULL,
225 SCREEN_BT2020_ST2084_FULL = SCREEN_GAMUT_BT2020 | SCREEN_TRANSFORM_FUNC_ST2084 | SCREEN_PRECISION_FULL,
226 SCREEN_BT2020_HLG_FULL = SCREEN_GAMUT_BT2020 | SCREEN_TRANSFORM_FUNC_HLG | SCREEN_PRECISION_FULL,
227 SCREEN_BT2020_ST2084_LIMITED = SCREEN_GAMUT_BT2020 | SCREEN_TRANSFORM_FUNC_ST2084 | SCREEN_PRESION_LIMITED,
228 } ScreenColorDataSpace;
229
230 // get the underlying type of an enum value.
231 template<typename EnumType>
ECast(EnumType t)232 inline constexpr typename std::underlying_type<EnumType>::type ECast(EnumType t)
233 {
234 return static_cast<typename std::underlying_type<EnumType>::type>(t);
235 }
236 } // namespace Rosen
237 } // namespace OHOS
238
239 #endif // RS_BASE_SCREEN_TYPES
240