• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 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 INTERFACES_INNERKITS_SURFACE_SURFACE_TYPE_H
17 #define INTERFACES_INNERKITS_SURFACE_SURFACE_TYPE_H
18 
19 #include <cstdint>
20 #include <string>
21 #include <vector>
22 #include <graphic_common.h>
23 
24 namespace OHOS {
25 #define SURFACE_MAX_USER_DATA_COUNT 1000
26 #define SURFACE_MAX_QUEUE_SIZE 32
27 #define SURFACE_DEFAULT_QUEUE_SIZE 3
28 #define SURFACE_MAX_STRIDE_ALIGNMENT 32
29 #define SURFACE_MIN_STRIDE_ALIGNMENT 4
30 #define SURFACE_DEFAULT_STRIDE_ALIGNMENT 4
31 #define SURFACE_MAX_SIZE 58982400 // 8K * 8K
32 
33 constexpr uint32_t SURFACE_PARCEL_SIZE_LIMIT = 1024;
34 
35 /*
36  * @brief Enumerates return values of the functions.
37  */
38 using GraphicDispErrCode = enum {
39     GRAPHIC_DISPLAY_SUCCESS = 0,           /**< Success */
40     GRAPHIC_DISPLAY_FAILURE = -1,          /**< Failure */
41     GRAPHIC_DISPLAY_FD_ERR = -2,           /**< File handle (FD) error */
42     GRAPHIC_DISPLAY_PARAM_ERR = -3,        /**< Parameter error */
43     GRAPHIC_DISPLAY_NULL_PTR = -4,         /**< Null pointer */
44     GRAPHIC_DISPLAY_NOT_SUPPORT = -5,      /**< Unsupported feature */
45     GRAPHIC_DISPLAY_NOMEM = -6,            /**< Insufficient memory */
46     GRAPHIC_DISPLAY_SYS_BUSY = -7,         /**< System busy */
47     GRAPHIC_DISPLAY_NOT_PERM = -8          /**< Forbidden operation */
48 };
49 
50 using GraphicCompositionType = enum {
51     GRAPHIC_COMPOSITION_CLIENT,       /**< Client composition type. The composer should be the CPU or GPU. */
52     GRAPHIC_COMPOSITION_DEVICE,       /**< Device composition type. The composer should be the hardware. */
53     GRAPHIC_COMPOSITION_CURSOR,       /**< Cursor composition type, used for cursor. */
54     GRAPHIC_COMPOSITION_VIDEO,        /**< Video composition type, used for video. */
55     GRAPHIC_COMPOSITION_DEVICE_CLEAR, /**< Device clear composition type, the device will clear the target region. */
56     GRAPHIC_COMPOSITION_CLIENT_CLEAR, /**< Client clear composition type, the service will clear the target region. */
57     GRAPHIC_COMPOSITION_TUNNEL,       /**< Tunnel composition type, used for tunnel. */
58     GRAPHIC_COMPOSITION_BUTT
59 };
60 
61 using GraphicLayerAlpha = struct {
62     bool enGlobalAlpha;   /**< Global alpha enable bit */
63     bool enPixelAlpha;    /**< Pixel alpha enable bit */
64     uint8_t alpha0;       /**< Alpha0 value, ranging from 0 to 255 */
65     uint8_t alpha1;       /**< Alpha1 value, ranging from 0 to 255 */
66     uint8_t gAlpha;       /**< Global alpha value, ranging from 0 to 255 */
67 };
68 
69 using GraphicBlendType = enum {
70     GRAPHIC_BLEND_NONE = 0,         /**< No blending */
71     GRAPHIC_BLEND_CLEAR,            /**< CLEAR blending */
72     GRAPHIC_BLEND_SRC,              /**< SRC blending */
73     GRAPHIC_BLEND_SRCOVER,          /**< SRC_OVER blending */
74     GRAPHIC_BLEND_DSTOVER,          /**< DST_OVER blending */
75     GRAPHIC_BLEND_SRCIN,            /**< SRC_IN blending */
76     GRAPHIC_BLEND_DSTIN,            /**< DST_IN blending */
77     GRAPHIC_BLEND_SRCOUT,           /**< SRC_OUT blending */
78     GRAPHIC_BLEND_DSTOUT,           /**< DST_OUT blending */
79     GRAPHIC_BLEND_SRCATOP,          /**< SRC_ATOP blending */
80     GRAPHIC_BLEND_DSTATOP,          /**< DST_ATOP blending */
81     GRAPHIC_BLEND_ADD,              /**< ADD blending */
82     GRAPHIC_BLEND_XOR,              /**< XOR blending */
83     GRAPHIC_BLEND_DST,              /**< DST blending */
84     GRAPHIC_BLEND_AKS,              /**< AKS blending */
85     GRAPHIC_BLEND_AKD,              /**< AKD blending */
86     GRAPHIC_BLEND_BUTT              /**< Null operation */
87 };
88 
89 using GraphicPixelFormat = enum {
90     GRAPHIC_PIXEL_FMT_CLUT8 = 0,                 /**< CLUT8 format */
91     GRAPHIC_PIXEL_FMT_CLUT1,                     /**< CLUT1 format */
92     GRAPHIC_PIXEL_FMT_CLUT4,                     /**< CLUT4 format */
93     GRAPHIC_PIXEL_FMT_RGB_565,                   /**< RGB565 format */
94     GRAPHIC_PIXEL_FMT_RGBA_5658,                 /**< RGBA5658 format */
95     GRAPHIC_PIXEL_FMT_RGBX_4444,                 /**< RGBX4444 format */
96     GRAPHIC_PIXEL_FMT_RGBA_4444,                 /**< RGBA4444 format */
97     GRAPHIC_PIXEL_FMT_RGB_444,                   /**< RGB444 format */
98     GRAPHIC_PIXEL_FMT_RGBX_5551,                 /**< RGBX5551 format */
99     GRAPHIC_PIXEL_FMT_RGBA_5551,                 /**< RGBA5551 format */
100     GRAPHIC_PIXEL_FMT_RGB_555,                   /**< RGB555 format */
101     GRAPHIC_PIXEL_FMT_RGBX_8888,                 /**< RGBX8888 format */
102     GRAPHIC_PIXEL_FMT_RGBA_8888,                 /**< RGBA8888 format */
103     GRAPHIC_PIXEL_FMT_RGB_888,                   /**< RGB888 format */
104     GRAPHIC_PIXEL_FMT_BGR_565,                   /**< BGR565 format */
105     GRAPHIC_PIXEL_FMT_BGRX_4444,                 /**< BGRX4444 format */
106     GRAPHIC_PIXEL_FMT_BGRA_4444,                 /**< BGRA4444 format */
107     GRAPHIC_PIXEL_FMT_BGRX_5551,                 /**< BGRX5551 format */
108     GRAPHIC_PIXEL_FMT_BGRA_5551,                 /**< BGRA5551 format */
109     GRAPHIC_PIXEL_FMT_BGRX_8888,                 /**< BGRX8888 format */
110     GRAPHIC_PIXEL_FMT_BGRA_8888,                 /**< BGRA8888 format */
111     GRAPHIC_PIXEL_FMT_YUV_422_I,                 /**< YUV422 interleaved format */
112     GRAPHIC_PIXEL_FMT_YCBCR_422_SP,              /**< YCBCR422 semi-planar format */
113     GRAPHIC_PIXEL_FMT_YCRCB_422_SP,              /**< YCRCB422 semi-planar format */
114     GRAPHIC_PIXEL_FMT_YCBCR_420_SP,              /**< YCBCR420 semi-planar format */
115     GRAPHIC_PIXEL_FMT_YCRCB_420_SP,              /**< YCRCB420 semi-planar format */
116     GRAPHIC_PIXEL_FMT_YCBCR_422_P,               /**< YCBCR422 planar format */
117     GRAPHIC_PIXEL_FMT_YCRCB_422_P,               /**< YCRCB422 planar format */
118     GRAPHIC_PIXEL_FMT_YCBCR_420_P,               /**< YCBCR420 planar format */
119     GRAPHIC_PIXEL_FMT_YCRCB_420_P,               /**< YCRCB420 planar format */
120     GRAPHIC_PIXEL_FMT_YUYV_422_PKG,              /**< YUYV422 packed format */
121     GRAPHIC_PIXEL_FMT_UYVY_422_PKG,              /**< UYVY422 packed format */
122     GRAPHIC_PIXEL_FMT_YVYU_422_PKG,              /**< YVYU422 packed format */
123     GRAPHIC_PIXEL_FMT_VYUY_422_PKG,              /**< VYUY422 packed format */
124     GRAPHIC_PIXEL_FMT_RGBA_1010102,              /**< RGBA_1010102 packed format */
125     GRAPHIC_PIXEL_FMT_VENDER_MASK = 0X7FFF0000,  /**< vendor mask format */
126     GRAPHIC_PIXEL_FMT_BUTT = 0X7FFFFFFF          /**< Invalid pixel format */
127 };
128 
129 using GraphicLayerType = enum {
130     GRAPHIC_LAYER_TYPE_GRAPHIC,         /**< Graphic layer */
131     GRAPHIC_LAYER_TYPE_OVERLAY,         /**< Overlay layer */
132     GRAPHIC_LAYER_TYPE_SDIEBAND,        /**< Sideband layer */
133     GRAPHIC_LAYER_TYPE_CURSOR,          /**< Cursor Layer */
134     GRAPHIC_LAYER_TYPE_BUTT             /**< Empty layer */
135 };
136 
137 using GraphicLayerInfo = struct {
138     int32_t width;                /**< Layer width */
139     int32_t height;               /**< Layer height */
140     GraphicLayerType type;        /**< Layer type, which can be a graphic layer, overlay layer, or sideband layer */
141     int32_t bpp;                  /**< Number of bits occupied by each pixel */
142     GraphicPixelFormat pixFormat; /**< Pixel format of the layer */
143 };
144 
145 typedef struct {
146     int32_t x;      /**< Start X coordinate of the rectangle */
147     int32_t y;      /**< Start Y coordinate of the rectangle */
148     int32_t w;      /**< Width of the rectangle */
149     int32_t h;      /**< Height of the rectangle */
150 } GraphicIRect;
151 
152 typedef struct {
153     float scaleX;   /* horizontal scale factor */
154     float skewX;    /* horizontal skew factor */
155     float transX;   /* horizontal translation */
156     float skewY;    /* vertical scale factor */
157     float scaleY;   /* vertical skew factor */
158     float transY;   /* vertical translation */
159     float pers0;    /* input x-axis perspective factor */
160     float pers1;    /* input y-axis perspective factor */
161     float pers2;    /* perspective scale factor */
162 } GraphicMatrix;
163 
164 using BufferAllocInfo = struct {
165     uint32_t width;                 /**< Width of the requested memory */
166     uint32_t height;                /**< Height of the requested memory */
167     uint64_t usage;                 /**< Usage of the requested memory */
168     GraphicPixelFormat format;      /**< Format of the requested memory */
169     uint32_t expectedSize;          /**< Size assigned by memory requester */
170 };
171 
172 
173 using BufferVerifyAllocInfo = struct {
174     uint32_t width;               /**< Width of the memory to allocate */
175     uint32_t height;              /**< Height of the memory to allocate */
176     uint64_t usage;               /**< Usage of the memory */
177     GraphicPixelFormat format;    /**< Format of the memory to allocate */
178 };
179 
180 using GraphicPresentTimestampType = enum {
181     GRAPHIC_DISPLAY_PTS_UNSUPPORTED = 0,        /**< Unsupported */
182     GRAPHIC_DISPLAY_PTS_DELAY = 1 << 0,         /**< Delay */
183     GRAPHIC_DISPLAY_PTS_TIMESTAMP = 1 << 1,     /**< Timestamp */
184 };
185 
186 using GraphicPresentTimestamp = struct {
187     GraphicPresentTimestampType type;     /**< Present timestamp type */
188     int64_t time;                         /**< Present timestamp value */
189 };
190 
191 using Rect = struct {
192     int32_t x;
193     int32_t y;
194     int32_t w;
195     int32_t h;
196 };
197 
198 using ScalingMode = enum {
199     SCALING_MODE_FREEZE = 0,
200     SCALING_MODE_SCALE_TO_WINDOW,
201     SCALING_MODE_SCALE_CROP,
202     SCALING_MODE_NO_SCALE_CROP,
203 };
204 
205 using HDRMetaDataType = enum {
206     HDR_NOT_USED = 0,
207     HDR_META_DATA,
208     HDR_META_DATA_SET,
209 };
210 
211 using GraphicHDRMetadataKey = enum {
212     GRAPHIC_MATAKEY_RED_PRIMARY_X = 0,
213     GRAPHIC_MATAKEY_RED_PRIMARY_Y = 1,
214     GRAPHIC_MATAKEY_GREEN_PRIMARY_X = 2,
215     GRAPHIC_MATAKEY_GREEN_PRIMARY_Y = 3,
216     GRAPHIC_MATAKEY_BLUE_PRIMARY_X = 4,
217     GRAPHIC_MATAKEY_BLUE_PRIMARY_Y = 5,
218     GRAPHIC_MATAKEY_WHITE_PRIMARY_X = 6,
219     GRAPHIC_MATAKEY_WHITE_PRIMARY_Y = 7,
220     GRAPHIC_MATAKEY_MAX_LUMINANCE = 8,
221     GRAPHIC_MATAKEY_MIN_LUMINANCE = 9,
222     GRAPHIC_MATAKEY_MAX_CONTENT_LIGHT_LEVEL = 10,
223     GRAPHIC_MATAKEY_MAX_FRAME_AVERAGE_LIGHT_LEVEL = 11,
224     GRAPHIC_MATAKEY_HDR10_PLUS = 12,
225     GRAPHIC_MATAKEY_HDR_VIVID = 13,
226 };
227 
228 using GraphicHDRMetaDataSet = struct GraphicHDRMetaDataSet {
229     GraphicHDRMetadataKey key = GraphicHDRMetadataKey::GRAPHIC_MATAKEY_RED_PRIMARY_X;
230     std::vector<uint8_t> metaData;
231 };
232 
233 typedef struct {
234     GraphicHDRMetadataKey key;
235     float value;
236 } GraphicHDRMetaData;
237 
238 using SurfaceBufferUsage = enum {
239     BUFFER_USAGE_CPU_READ = (1ULL << 0),        /**< CPU read buffer */
240     BUFFER_USAGE_CPU_WRITE = (1ULL << 1),       /**< CPU write memory */
241     BUFFER_USAGE_MEM_MMZ = (1ULL << 2),         /**< Media memory zone (MMZ) */
242     BUFFER_USAGE_MEM_DMA = (1ULL << 3),         /**< Direct memory access (DMA) buffer */
243     BUFFER_USAGE_MEM_SHARE = (1ULL << 4),       /**< Shared memory buffer*/
244     BUFFER_USAGE_MEM_MMZ_CACHE = (1ULL << 5),   /**< MMZ with cache*/
245     BUFFER_USAGE_MEM_FB = (1ULL << 6),          /**< Framebuffer */
246     BUFFER_USAGE_ASSIGN_SIZE = (1ULL << 7),     /**< Memory assigned */
247     BUFFER_USAGE_HW_RENDER = (1ULL << 8),       /**< For GPU write case */
248     BUFFER_USAGE_HW_TEXTURE = (1ULL << 9),      /**< For GPU read case */
249     BUFFER_USAGE_HW_COMPOSER = (1ULL << 10),    /**< For hardware composer */
250     BUFFER_USAGE_PROTECTED = (1ULL << 11),      /**< For safe buffer case, such as DRM */
251     BUFFER_USAGE_CAMERA_READ = (1ULL << 12),    /**< For camera read case */
252     BUFFER_USAGE_CAMERA_WRITE = (1ULL << 13),   /**< For camera write case */
253     BUFFER_USAGE_VIDEO_ENCODER = (1ULL << 14),  /**< For encode case */
254     BUFFER_USAGE_VIDEO_DECODER = (1ULL << 15),  /**< For decode case */
255     BUFFER_USAGE_CPU_READ_OFTEN = (1ULL << 16), /**< CPU read often buffer */
256     BUFFER_USAGE_VENDOR_PRI0 = (1ULL << 44),    /**< Reserverd for vendor */
257     BUFFER_USAGE_VENDOR_PRI1 = (1ULL << 45),    /**< Reserverd for vendor */
258     BUFFER_USAGE_VENDOR_PRI2 = (1ULL << 46),    /**< Reserverd for vendor */
259     BUFFER_USAGE_VENDOR_PRI3 = (1ULL << 47),    /**< Reserverd for vendor */
260     BUFFER_USAGE_VENDOR_PRI4 = (1ULL << 48),    /**< Reserverd for vendor */
261     BUFFER_USAGE_VENDOR_PRI5 = (1ULL << 49),    /**< Reserverd for vendor */
262     BUFFER_USAGE_VENDOR_PRI6 = (1ULL << 50),    /**< Reserverd for vendor */
263     BUFFER_USAGE_VENDOR_PRI7 = (1ULL << 51),    /**< Reserverd for vendor */
264     BUFFER_USAGE_VENDOR_PRI8 = (1ULL << 52),    /**< Reserverd for vendor */
265     BUFFER_USAGE_VENDOR_PRI9 = (1ULL << 53),    /**< Reserverd for vendor */
266     BUFFER_USAGE_VENDOR_PRI10 = (1ULL << 54),   /**< Reserverd for vendor */
267     BUFFER_USAGE_VENDOR_PRI11 = (1ULL << 55),   /**< Reserverd for vendor */
268     BUFFER_USAGE_VENDOR_PRI12 = (1ULL << 56),   /**< Reserverd for vendor */
269     BUFFER_USAGE_VENDOR_PRI13 = (1ULL << 57),   /**< Reserverd for vendor */
270     BUFFER_USAGE_VENDOR_PRI14 = (1ULL << 58),   /**< Reserverd for vendor */
271     BUFFER_USAGE_VENDOR_PRI15 = (1ULL << 59),   /**< Reserverd for vendor */
272     BUFFER_USAGE_VENDOR_PRI16 = (1ULL << 60),   /**< Reserverd for vendor */
273     BUFFER_USAGE_VENDOR_PRI17 = (1ULL << 61),   /**< Reserverd for vendor */
274     BUFFER_USAGE_VENDOR_PRI18 = (1ULL << 62),   /**< Reserverd for vendor */
275     BUFFER_USAGE_VENDOR_PRI19 = (1ULL << 63),   /**< Reserverd for vendor */
276 };
277 
278 using GraphicColorGamut = enum {
279     GRAPHIC_COLOR_GAMUT_INVALID = -1,            /**< Invalid */
280     GRAPHIC_COLOR_GAMUT_NATIVE = 0,              /**< Native or default */
281     GRAPHIC_COLOR_GAMUT_STANDARD_BT601 = 1,      /**< Standard BT601 */
282     GRAPHIC_COLOR_GAMUT_STANDARD_BT709 = 2,      /**< Standard BT709 */
283     GRAPHIC_COLOR_GAMUT_DCI_P3 = 3,              /**< DCI P3 */
284     GRAPHIC_COLOR_GAMUT_SRGB = 4,                /**< SRGB */
285     GRAPHIC_COLOR_GAMUT_ADOBE_RGB = 5,           /**< Adobe RGB */
286     GRAPHIC_COLOR_GAMUT_DISPLAY_P3 = 6,          /**< display P3 */
287     GRAPHIC_COLOR_GAMUT_BT2020 = 7,              /**< BT2020 */
288     GRAPHIC_COLOR_GAMUT_BT2100_PQ = 8,           /**< BT2100 PQ */
289     GRAPHIC_COLOR_GAMUT_BT2100_HLG = 9,          /**< BT2100 HLG */
290     GRAPHIC_COLOR_GAMUT_DISPLAY_BT2020 = 10,     /**< Display BT2020 */
291 };
292 
293 using GraphicColorDataSpace = enum {
294     GRAPHIC_COLOR_DATA_SPACE_UNKNOWN = 0,
295     GRAPHIC_GAMUT_BT601 = 0x00000001,
296     GRAPHIC_GAMUT_BT709 = 0x00000002,
297     GRAPHIC_GAMUT_DCI_P3 = 0x00000003,
298     GRAPHIC_GAMUT_SRGB = 0x00000004,
299     GRAPHIC_GAMUT_ADOBE_RGB = 0x00000005,
300     GRAPHIC_GAMUT_DISPLAY_P3 = 0x00000006,
301     GRAPHIC_GAMUT_BT2020 = 0x00000007,
302     GRAPHIC_GAMUT_BT2100_PQ = 0x00000008,
303     GRAPHIC_GAMUT_BT2100_HLG = 0x00000009,
304     GRAPHIC_GAMUT_DISPLAY_BT2020 = 0x0000000a,
305     GRAPHIC_TRANSFORM_FUNC_UNSPECIFIED = 0x00000100,
306     GRAPHIC_TRANSFORM_FUNC_LINEAR = 0x00000200,
307     GRAPHIC_TRANSFORM_FUNC_SRGB = 0x00000300,
308     GRAPHIC_TRANSFORM_FUNC_SMPTE_170M = 0x00000400,
309     GRAPHIC_TRANSFORM_FUNC_GM2_2 = 0x00000500,
310     GRAPHIC_TRANSFORM_FUNC_GM2_6 = 0x00000600,
311     GRAPHIC_TRANSFORM_FUNC_GM2_8 = 0x00000700,
312     GRAPHIC_TRANSFORM_FUNC_ST2084 = 0x00000800,
313     GRAPHIC_TRANSFORM_FUNC_HLG = 0x00000900,
314     GRAPHIC_PRECISION_UNSPECIFIED = 0x00010000,
315     GRAPHIC_PRECISION_FULL = 0x00020000,
316     GRAPHIC_PRESION_LIMITED = 0x00030000,
317     GRAPHIC_PRESION_EXTENDED = 0x00040000,
318     GRAPHIC_BT601_SMPTE170M_FULL = GRAPHIC_GAMUT_BT601 | GRAPHIC_TRANSFORM_FUNC_SMPTE_170M | GRAPHIC_PRECISION_FULL,
319     GRAPHIC_BT601_SMPTE170M_LIMITED = GRAPHIC_GAMUT_BT601 | GRAPHIC_TRANSFORM_FUNC_SMPTE_170M | GRAPHIC_PRESION_LIMITED,
320     GRAPHIC_BT709_LINEAR_FULL = GRAPHIC_GAMUT_BT709 | GRAPHIC_TRANSFORM_FUNC_LINEAR | GRAPHIC_PRECISION_FULL,
321     GRAPHIC_BT709_LINEAR_EXTENDED = GRAPHIC_GAMUT_BT709 | GRAPHIC_TRANSFORM_FUNC_LINEAR | GRAPHIC_PRESION_EXTENDED,
322     GRAPHIC_BT709_SRGB_FULL = GRAPHIC_GAMUT_BT709 | GRAPHIC_TRANSFORM_FUNC_SRGB | GRAPHIC_PRECISION_FULL,
323     GRAPHIC_BT709_SRGB_EXTENDED = GRAPHIC_GAMUT_BT709 | GRAPHIC_TRANSFORM_FUNC_SRGB | GRAPHIC_PRESION_EXTENDED,
324     GRAPHIC_BT709_SMPTE170M_LIMITED = GRAPHIC_GAMUT_BT709 | GRAPHIC_TRANSFORM_FUNC_SMPTE_170M | GRAPHIC_PRESION_LIMITED,
325     GRAPHIC_DCI_P3_LINEAR_FULL = GRAPHIC_GAMUT_DCI_P3 | GRAPHIC_TRANSFORM_FUNC_LINEAR | GRAPHIC_PRECISION_FULL,
326     GRAPHIC_DCI_P3_GAMMA26_FULL = GRAPHIC_GAMUT_DCI_P3 | GRAPHIC_TRANSFORM_FUNC_GM2_6 | GRAPHIC_PRECISION_FULL,
327     GRAPHIC_DISPLAY_P3_LINEAR_FULL = GRAPHIC_GAMUT_DISPLAY_P3 | GRAPHIC_TRANSFORM_FUNC_LINEAR | GRAPHIC_PRECISION_FULL,
328     GRAPHIC_DCI_P3_SRGB_FULL = GRAPHIC_GAMUT_DCI_P3 | GRAPHIC_TRANSFORM_FUNC_SRGB | GRAPHIC_PRECISION_FULL,
329     GRAPHIC_ADOBE_RGB_GAMMA22_FULL = GRAPHIC_GAMUT_ADOBE_RGB | GRAPHIC_TRANSFORM_FUNC_GM2_2 | GRAPHIC_PRECISION_FULL,
330     GRAPHIC_BT2020_LINEAR_FULL = GRAPHIC_GAMUT_BT2020 | GRAPHIC_TRANSFORM_FUNC_LINEAR | GRAPHIC_PRECISION_FULL,
331     GRAPHIC_BT2020_SRGB_FULL = GRAPHIC_GAMUT_BT2020 | GRAPHIC_TRANSFORM_FUNC_SRGB | GRAPHIC_PRECISION_FULL,
332     GRAPHIC_BT2020_SMPTE170M_FULL = GRAPHIC_GAMUT_BT2020 | GRAPHIC_TRANSFORM_FUNC_SMPTE_170M | GRAPHIC_PRECISION_FULL,
333     GRAPHIC_BT2020_ST2084_FULL = GRAPHIC_GAMUT_BT2020 | GRAPHIC_TRANSFORM_FUNC_ST2084 | GRAPHIC_PRECISION_FULL,
334     GRAPHIC_BT2020_HLG_FULL = GRAPHIC_GAMUT_BT2020 | GRAPHIC_TRANSFORM_FUNC_HLG | GRAPHIC_PRECISION_FULL,
335     GRAPHIC_BT2020_ST2084_LIMITED = GRAPHIC_GAMUT_BT2020 | GRAPHIC_TRANSFORM_FUNC_ST2084 | GRAPHIC_PRESION_LIMITED,
336 };
337 
338 using GraphicTransformType = enum {
339     GRAPHIC_ROTATE_NONE = 0,        /**< No rotation */
340     GRAPHIC_ROTATE_90,              /**< Rotation by 90 degrees */
341     GRAPHIC_ROTATE_180,             /**< Rotation by 180 degrees */
342     GRAPHIC_ROTATE_270,             /**< Rotation by 270 degrees */
343     GRAPHIC_FLIP_H,                 /**< Flip horizontally */
344     GRAPHIC_FLIP_V,                 /**< Flip vertically */
345     GRAPHIC_FLIP_H_ROT90,           /**< Flip horizontally and rotate 90 degrees */
346     GRAPHIC_FLIP_V_ROT90,           /**< Flip vertically and rotate 90 degrees */
347     GRAPHIC_FLIP_H_ROT180,          /**< Flip horizontally and rotate 180 degrees */
348     GRAPHIC_FLIP_V_ROT180,          /**< Flip vertically and rotate 180 degrees */
349     GRAPHIC_FLIP_H_ROT270,          /**< Flip horizontally and rotate 270 degrees */
350     GRAPHIC_FLIP_V_ROT270,          /**< Flip vertically and rotate 270 degrees */
351     GRAPHIC_ROTATE_BUTT            /**< Invalid operation */
352 };
353 
354 using BufferRequestConfig = struct BufferRequestConfig {
355     int32_t width;
356     int32_t height;
357     int32_t strideAlignment; // output parameter, system components can ignore it
358     int32_t format; // GraphicPixelFormat
359     uint64_t usage;
360     int32_t timeout;
361     GraphicColorGamut colorGamut = GraphicColorGamut::GRAPHIC_COLOR_GAMUT_SRGB;
362     GraphicTransformType transform = GraphicTransformType::GRAPHIC_ROTATE_NONE;
363     bool operator ==(const struct BufferRequestConfig &config) const
364     {
365         return width == config.width &&
366                height == config.height &&
367                strideAlignment == config.strideAlignment &&
368                format == config.format &&
369                usage == config.usage &&
370                timeout == config.timeout &&
371                colorGamut == config.colorGamut &&
372                transform == config.transform;
373     }
374     bool operator != (const struct BufferRequestConfig &config) const
375     {
376         return !(*this == config);
377     }
378 };
379 
380 using BufferFlushConfig = struct {
381     Rect damage;
382     int64_t timestamp;
383 };
384 
385 using BufferFlushConfigWithDamages = struct BufferFlushConfigWithDamages {
386     std::vector<Rect> damages = {};
387     int64_t timestamp;
388 };
389 
390 using SceneType = enum {
391     SURFACE_SCENE_TYPE_EGL = 0,
392     SURFACE_SCENE_TYPE_MEDIA,
393     SURFACE_SCENE_TYPE_CAMERA,
394     SURFACE_SCENE_TYPE_CPU,
395 };
396 
397 using GraphicExtDataHandle = struct {
398     /**< Handle fd, -1 if not supported */
399     int32_t fd;
400     /**< the number of reserved integer value */
401     uint32_t reserveInts;
402     /**< the reserved data */
403     int32_t reserve[0];
404 };
405 } // namespace OHOS
406 
407 #endif // INTERFACES_INNERKITS_SURFACE_SURFACE_TYPE_H
408