• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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