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