• 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 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