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