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 64 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_SOLID_COLOR, /**< used for SetLayerColor. */ 59 GRAPHIC_COMPOSITION_BUTT 60 }; 61 62 using GraphicLayerAlpha = struct { 63 bool enGlobalAlpha; /**< Global alpha enable bit */ 64 bool enPixelAlpha; /**< Pixel alpha enable bit */ 65 uint8_t alpha0; /**< Alpha0 value, ranging from 0 to 255 */ 66 uint8_t alpha1; /**< Alpha1 value, ranging from 0 to 255 */ 67 uint8_t gAlpha; /**< Global alpha value, ranging from 0 to 255 */ 68 }; 69 70 using GraphicBlendType = enum { 71 GRAPHIC_BLEND_NONE = 0, /**< No blending */ 72 GRAPHIC_BLEND_CLEAR, /**< CLEAR blending */ 73 GRAPHIC_BLEND_SRC, /**< SRC blending */ 74 GRAPHIC_BLEND_SRCOVER, /**< SRC_OVER blending */ 75 GRAPHIC_BLEND_DSTOVER, /**< DST_OVER blending */ 76 GRAPHIC_BLEND_SRCIN, /**< SRC_IN blending */ 77 GRAPHIC_BLEND_DSTIN, /**< DST_IN blending */ 78 GRAPHIC_BLEND_SRCOUT, /**< SRC_OUT blending */ 79 GRAPHIC_BLEND_DSTOUT, /**< DST_OUT blending */ 80 GRAPHIC_BLEND_SRCATOP, /**< SRC_ATOP blending */ 81 GRAPHIC_BLEND_DSTATOP, /**< DST_ATOP blending */ 82 GRAPHIC_BLEND_ADD, /**< ADD blending */ 83 GRAPHIC_BLEND_XOR, /**< XOR blending */ 84 GRAPHIC_BLEND_DST, /**< DST blending */ 85 GRAPHIC_BLEND_AKS, /**< AKS blending */ 86 GRAPHIC_BLEND_AKD, /**< AKD blending */ 87 GRAPHIC_BLEND_BUTT /**< Null operation */ 88 }; 89 90 /* 91 * @brief Enumeration values are indicated for external consistency. 92 */ 93 using GraphicPixelFormat = enum { 94 GRAPHIC_PIXEL_FMT_CLUT8 = 0, /**< CLUT8 format */ 95 GRAPHIC_PIXEL_FMT_CLUT1 = 1, /**< CLUT1 format */ 96 GRAPHIC_PIXEL_FMT_CLUT4 = 2, /**< CLUT4 format */ 97 GRAPHIC_PIXEL_FMT_RGB_565 = 3, /**< RGB565 format */ 98 GRAPHIC_PIXEL_FMT_RGBA_5658 = 4, /**< RGBA5658 format */ 99 GRAPHIC_PIXEL_FMT_RGBX_4444 = 5, /**< RGBX4444 format */ 100 GRAPHIC_PIXEL_FMT_RGBA_4444 = 6, /**< RGBA4444 format */ 101 GRAPHIC_PIXEL_FMT_RGB_444 = 7, /**< RGB444 format */ 102 GRAPHIC_PIXEL_FMT_RGBX_5551 = 8, /**< RGBX5551 format */ 103 GRAPHIC_PIXEL_FMT_RGBA_5551 = 9, /**< RGBA5551 format */ 104 GRAPHIC_PIXEL_FMT_RGB_555 = 10, /**< RGB555 format */ 105 GRAPHIC_PIXEL_FMT_RGBX_8888 = 11, /**< RGBX8888 format */ 106 GRAPHIC_PIXEL_FMT_RGBA_8888 = 12, /**< RGBA8888 format */ 107 GRAPHIC_PIXEL_FMT_RGB_888 = 13, /**< RGB888 format */ 108 GRAPHIC_PIXEL_FMT_BGR_565 = 14, /**< BGR565 format */ 109 GRAPHIC_PIXEL_FMT_BGRX_4444 = 15, /**< BGRX4444 format */ 110 GRAPHIC_PIXEL_FMT_BGRA_4444 = 16, /**< BGRA4444 format */ 111 GRAPHIC_PIXEL_FMT_BGRX_5551 = 17, /**< BGRX5551 format */ 112 GRAPHIC_PIXEL_FMT_BGRA_5551 = 18, /**< BGRA5551 format */ 113 GRAPHIC_PIXEL_FMT_BGRX_8888 = 19, /**< BGRX8888 format */ 114 GRAPHIC_PIXEL_FMT_BGRA_8888 = 20, /**< BGRA8888 format */ 115 GRAPHIC_PIXEL_FMT_YUV_422_I = 21, /**< YUV422 interleaved format */ 116 GRAPHIC_PIXEL_FMT_YCBCR_422_SP = 22, /**< YCBCR422 semi-planar format */ 117 GRAPHIC_PIXEL_FMT_YCRCB_422_SP = 23, /**< YCRCB422 semi-planar format */ 118 GRAPHIC_PIXEL_FMT_YCBCR_420_SP = 24, /**< YCBCR420 semi-planar format */ 119 GRAPHIC_PIXEL_FMT_YCRCB_420_SP = 25, /**< YCRCB420 semi-planar format */ 120 GRAPHIC_PIXEL_FMT_YCBCR_422_P = 26, /**< YCBCR422 planar format */ 121 GRAPHIC_PIXEL_FMT_YCRCB_422_P = 27, /**< YCRCB422 planar format */ 122 GRAPHIC_PIXEL_FMT_YCBCR_420_P = 28, /**< YCBCR420 planar format */ 123 GRAPHIC_PIXEL_FMT_YCRCB_420_P = 29, /**< YCRCB420 planar format */ 124 GRAPHIC_PIXEL_FMT_YUYV_422_PKG = 30, /**< YUYV422 packed format */ 125 GRAPHIC_PIXEL_FMT_UYVY_422_PKG = 31, /**< UYVY422 packed format */ 126 GRAPHIC_PIXEL_FMT_YVYU_422_PKG = 32, /**< YVYU422 packed format */ 127 GRAPHIC_PIXEL_FMT_VYUY_422_PKG = 33, /**< VYUY422 packed format */ 128 GRAPHIC_PIXEL_FMT_RGBA_1010102 = 34, /**< RGBA_1010102 packed format */ 129 GRAPHIC_PIXEL_FMT_YCBCR_P010 = 35, /**< YCBCR420 semi-planar 10bit packed format */ 130 GRAPHIC_PIXEL_FMT_YCRCB_P010 = 36, /**< YCRCB420 semi-planar 10bit packed format */ 131 GRAPHIC_PIXEL_FMT_RAW10 = 37, /**< Raw 10bit packed format */ 132 GRAPHIC_PIXEL_FMT_BLOB = 38, /**< BLOB format */ 133 GRAPHIC_PIXEL_FMT_RGBA16_FLOAT = 39, /**< RGBA16 float format */ 134 GRAPHIC_PIXEL_FMT_VENDER_MASK = 0X7FFF0000, /**< vendor mask format */ 135 GRAPHIC_PIXEL_FMT_BUTT = 0X7FFFFFFF /**< Invalid pixel format */ 136 }; 137 138 using GraphicLayerType = enum { 139 GRAPHIC_LAYER_TYPE_GRAPHIC, /**< Graphic layer */ 140 GRAPHIC_LAYER_TYPE_OVERLAY, /**< Overlay layer */ 141 GRAPHIC_LAYER_TYPE_SDIEBAND, /**< Sideband layer */ 142 GRAPHIC_LAYER_TYPE_CURSOR, /**< Cursor Layer */ 143 GRAPHIC_LAYER_TYPE_BUTT /**< Empty layer */ 144 }; 145 146 using ProducerInitInfo = struct { 147 uint64_t uniqueId; 148 int32_t width; 149 int32_t height; 150 std::string name; 151 }; 152 153 using GraphicLayerInfo = struct { 154 int32_t width; /**< Layer width */ 155 int32_t height; /**< Layer height */ 156 GraphicLayerType type; /**< Layer type, which can be a graphic layer, overlay layer, or sideband layer */ 157 int32_t bpp; /**< Number of bits occupied by each pixel */ 158 GraphicPixelFormat pixFormat; /**< Pixel format of the layer */ 159 }; 160 161 using GraphicIRect = struct GraphicIRect { 162 int32_t x; /**< Start X coordinate of the rectangle */ 163 int32_t y; /**< Start Y coordinate of the rectangle */ 164 int32_t w; /**< Width of the rectangle */ 165 int32_t h; /**< Height of the rectangle */ 166 167 bool operator==(const GraphicIRect& rect) const 168 { 169 return (x == rect.x) && (y == rect.y) && (w == rect.w) && (h == rect.h); 170 } 171 }; 172 173 using GraphicMatrix = struct GraphicMatrix { 174 float scaleX; /* horizontal scale factor */ 175 float skewX; /* horizontal skew factor */ 176 float transX; /* horizontal translation */ 177 float skewY; /* vertical scale factor */ 178 float scaleY; /* vertical skew factor */ 179 float transY; /* vertical translation */ 180 float pers0; /* input x-axis perspective factor */ 181 float pers1; /* input y-axis perspective factor */ 182 float pers2; /* perspective scale factor */ 183 floatEqualGraphicMatrix184 inline static bool floatEqual(float x, float y) 185 { 186 return (std::abs((x) - (y)) <= (std::numeric_limits<float>::epsilon())); 187 } 188 189 bool operator==(const GraphicMatrix& matrix) const 190 { 191 return floatEqual(scaleX, matrix.scaleX) && floatEqual(skewX, matrix.skewX) && 192 floatEqual(transX, matrix.transX) && floatEqual(skewY, matrix.skewY) && 193 floatEqual(scaleY, matrix.scaleY) && floatEqual(transY, matrix.transY) && 194 floatEqual(pers0, matrix.pers0) && floatEqual(pers1, matrix.pers1) && floatEqual(pers2, matrix.pers2); 195 } 196 }; 197 198 using BufferAllocInfo = struct { 199 uint32_t width; /**< Width of the requested memory */ 200 uint32_t height; /**< Height of the requested memory */ 201 uint64_t usage; /**< Usage of the requested memory */ 202 GraphicPixelFormat format; /**< Format of the requested memory */ 203 uint32_t expectedSize; /**< Size assigned by memory requester */ 204 }; 205 206 207 using BufferVerifyAllocInfo = struct { 208 uint32_t width; /**< Width of the memory to allocate */ 209 uint32_t height; /**< Height of the memory to allocate */ 210 uint64_t usage; /**< Usage of the memory */ 211 GraphicPixelFormat format; /**< Format of the memory to allocate */ 212 }; 213 214 using GraphicPresentTimestampType = enum { 215 GRAPHIC_DISPLAY_PTS_UNSUPPORTED = 0, /**< Unsupported */ 216 GRAPHIC_DISPLAY_PTS_DELAY = 1 << 0, /**< Delay */ 217 GRAPHIC_DISPLAY_PTS_TIMESTAMP = 1 << 1, /**< Timestamp */ 218 }; 219 220 using GraphicPresentTimestamp = struct { 221 GraphicPresentTimestampType type; /**< Present timestamp type */ 222 int64_t time; /**< Present timestamp value */ 223 }; 224 225 using Rect = struct Rect { 226 int32_t x; 227 int32_t y; 228 int32_t w; 229 int32_t h; 230 231 bool operator==(const Rect& other) const 232 { 233 return x == other.x && 234 y == other.y && 235 w == other.w && 236 h == other.h; 237 } 238 239 bool operator!=(const Rect& other) const 240 { 241 return !(*this == other); 242 } 243 }; 244 245 using ScalingMode = enum { 246 SCALING_MODE_FREEZE = 0, 247 SCALING_MODE_SCALE_TO_WINDOW, 248 SCALING_MODE_SCALE_CROP, 249 SCALING_MODE_NO_SCALE_CROP, 250 SCALING_MODE_SCALE_FIT, 251 }; 252 253 using HDRMetaDataType = enum { 254 HDR_NOT_USED = 0, 255 HDR_META_DATA, 256 HDR_META_DATA_SET, 257 }; 258 259 using GraphicHDRMetadataKey = enum { 260 GRAPHIC_MATAKEY_RED_PRIMARY_X = 0, 261 GRAPHIC_MATAKEY_RED_PRIMARY_Y = 1, 262 GRAPHIC_MATAKEY_GREEN_PRIMARY_X = 2, 263 GRAPHIC_MATAKEY_GREEN_PRIMARY_Y = 3, 264 GRAPHIC_MATAKEY_BLUE_PRIMARY_X = 4, 265 GRAPHIC_MATAKEY_BLUE_PRIMARY_Y = 5, 266 GRAPHIC_MATAKEY_WHITE_PRIMARY_X = 6, 267 GRAPHIC_MATAKEY_WHITE_PRIMARY_Y = 7, 268 GRAPHIC_MATAKEY_MAX_LUMINANCE = 8, 269 GRAPHIC_MATAKEY_MIN_LUMINANCE = 9, 270 GRAPHIC_MATAKEY_MAX_CONTENT_LIGHT_LEVEL = 10, 271 GRAPHIC_MATAKEY_MAX_FRAME_AVERAGE_LIGHT_LEVEL = 11, 272 GRAPHIC_MATAKEY_HDR10_PLUS = 12, 273 GRAPHIC_MATAKEY_HDR_VIVID = 13, 274 }; 275 276 using GraphicHDRMetaDataSet = struct GraphicHDRMetaDataSet { 277 GraphicHDRMetadataKey key = GraphicHDRMetadataKey::GRAPHIC_MATAKEY_RED_PRIMARY_X; 278 std::vector<uint8_t> metaData; 279 }; 280 281 typedef struct { 282 GraphicHDRMetadataKey key; 283 float value; 284 } GraphicHDRMetaData; 285 286 using SurfaceBufferUsage = enum { 287 BUFFER_USAGE_CPU_READ = (1ULL << 0), /**< CPU read buffer */ 288 BUFFER_USAGE_CPU_WRITE = (1ULL << 1), /**< CPU write memory */ 289 BUFFER_USAGE_MEM_MMZ = (1ULL << 2), /**< Media memory zone (MMZ) */ 290 BUFFER_USAGE_MEM_DMA = (1ULL << 3), /**< Direct memory access (DMA) buffer */ 291 BUFFER_USAGE_MEM_SHARE = (1ULL << 4), /**< Shared memory buffer*/ 292 BUFFER_USAGE_MEM_MMZ_CACHE = (1ULL << 5), /**< MMZ with cache*/ 293 BUFFER_USAGE_MEM_FB = (1ULL << 6), /**< Framebuffer */ 294 BUFFER_USAGE_ASSIGN_SIZE = (1ULL << 7), /**< Memory assigned */ 295 BUFFER_USAGE_HW_RENDER = (1ULL << 8), /**< For GPU write case */ 296 BUFFER_USAGE_HW_TEXTURE = (1ULL << 9), /**< For GPU read case */ 297 BUFFER_USAGE_HW_COMPOSER = (1ULL << 10), /**< For hardware composer */ 298 BUFFER_USAGE_PROTECTED = (1ULL << 11), /**< For safe buffer case, such as DRM */ 299 BUFFER_USAGE_CAMERA_READ = (1ULL << 12), /**< For camera read case */ 300 BUFFER_USAGE_CAMERA_WRITE = (1ULL << 13), /**< For camera write case */ 301 BUFFER_USAGE_VIDEO_ENCODER = (1ULL << 14), /**< For encode case */ 302 BUFFER_USAGE_VIDEO_DECODER = (1ULL << 15), /**< For decode case */ 303 BUFFER_USAGE_CPU_READ_OFTEN = (1ULL << 16), /**< CPU read often buffer */ 304 BUFFER_USAGE_CPU_HW_BOTH = (1ULL << 17), /**< CPU read often buffer */ 305 BUFFER_USAGE_ALIGNMENT_512 = (1ULL << 18), /**< 512 bytes alignment */ 306 BUFFER_USAGE_DRM_REDRAW = (1ULL << 24), /**< For drm redraw framebuffer allocate */ 307 BUFFER_USAGE_VENDOR_PRI0 = (1ULL << 44), /**< Reserverd for vendor */ 308 BUFFER_USAGE_VENDOR_PRI1 = (1ULL << 45), /**< Reserverd for vendor */ 309 BUFFER_USAGE_VENDOR_PRI2 = (1ULL << 46), /**< Reserverd for vendor */ 310 BUFFER_USAGE_VENDOR_PRI3 = (1ULL << 47), /**< Reserverd for vendor */ 311 BUFFER_USAGE_VENDOR_PRI4 = (1ULL << 48), /**< Reserverd for vendor */ 312 BUFFER_USAGE_VENDOR_PRI5 = (1ULL << 49), /**< Reserverd for vendor */ 313 BUFFER_USAGE_VENDOR_PRI6 = (1ULL << 50), /**< Reserverd for vendor */ 314 BUFFER_USAGE_VENDOR_PRI7 = (1ULL << 51), /**< Reserverd for vendor */ 315 BUFFER_USAGE_VENDOR_PRI8 = (1ULL << 52), /**< Reserverd for vendor */ 316 BUFFER_USAGE_VENDOR_PRI9 = (1ULL << 53), /**< Reserverd for vendor */ 317 BUFFER_USAGE_VENDOR_PRI10 = (1ULL << 54), /**< Reserverd for vendor */ 318 BUFFER_USAGE_VENDOR_PRI11 = (1ULL << 55), /**< Reserverd for vendor */ 319 BUFFER_USAGE_VENDOR_PRI12 = (1ULL << 56), /**< Reserverd for vendor */ 320 BUFFER_USAGE_VENDOR_PRI13 = (1ULL << 57), /**< Reserverd for vendor */ 321 BUFFER_USAGE_VENDOR_PRI14 = (1ULL << 58), /**< Reserverd for vendor */ 322 BUFFER_USAGE_VENDOR_PRI15 = (1ULL << 59), /**< Reserverd for vendor */ 323 BUFFER_USAGE_VENDOR_PRI16 = (1ULL << 60), /**< Reserverd for vendor */ 324 BUFFER_USAGE_VENDOR_PRI17 = (1ULL << 61), /**< Reserverd for vendor */ 325 BUFFER_USAGE_VENDOR_PRI18 = (1ULL << 62), /**< Reserverd for vendor */ 326 BUFFER_USAGE_VENDOR_PRI19 = (1ULL << 63), /**< Reserverd for vendor */ 327 }; 328 329 using GraphicColorGamut = enum { 330 GRAPHIC_COLOR_GAMUT_INVALID = -1, /**< Invalid */ 331 GRAPHIC_COLOR_GAMUT_NATIVE = 0, /**< Native or default */ 332 GRAPHIC_COLOR_GAMUT_STANDARD_BT601 = 1, /**< Standard BT601 */ 333 GRAPHIC_COLOR_GAMUT_STANDARD_BT709 = 2, /**< Standard BT709 */ 334 GRAPHIC_COLOR_GAMUT_DCI_P3 = 3, /**< DCI P3 */ 335 GRAPHIC_COLOR_GAMUT_SRGB = 4, /**< SRGB */ 336 GRAPHIC_COLOR_GAMUT_ADOBE_RGB = 5, /**< Adobe RGB */ 337 GRAPHIC_COLOR_GAMUT_DISPLAY_P3 = 6, /**< display P3 */ 338 GRAPHIC_COLOR_GAMUT_BT2020 = 7, /**< BT2020 */ 339 GRAPHIC_COLOR_GAMUT_BT2100_PQ = 8, /**< BT2100 PQ */ 340 GRAPHIC_COLOR_GAMUT_BT2100_HLG = 9, /**< BT2100 HLG */ 341 GRAPHIC_COLOR_GAMUT_DISPLAY_BT2020 = 10, /**< Display BT2020 */ 342 }; 343 344 using GraphicCM_ColorSpaceType = enum { 345 GRAPHIC_CM_COLORSPACE_NONE, 346 347 /* COLORPRIMARIES_BT601_P | (TRANSFUNC_BT709 << 8) | (MATRIX_BT601_P << 16) | (RANGE_FULL << 21) */ 348 GRAPHIC_CM_BT601_EBU_FULL = 2 | (1 << 8) | (2 << 16) | (1 << 21), 349 /* COLORPRIMARIES_BT601_N | (TRANSFUNC_BT709 << 8) | (MATRIX_BT601_N << 16) | (RANGE_FULL << 21) */ 350 GRAPHIC_CM_BT601_SMPTE_C_FULL = 3 | (1 << 8) | (3 << 16) | (1 << 21), 351 /* COLORPRIMARIES_BT709 | (TRANSFUNC_BT709 << 8) | (MATRIX_BT709 << 16) | (RANGE_FULL << 21) */ 352 GRAPHIC_CM_BT709_FULL = 1 | (1 << 8) | (1 << 16) | (1 << 21), 353 /* COLORPRIMARIES_BT2020 | (TRANSFUNC_HLG << 8) | (MATRIX_BT2020 << 16) | (RANGE_FULL << 21) */ 354 GRAPHIC_CM_BT2020_HLG_FULL = 4 | (5 << 8) | (4 << 16) | (1 << 21), 355 /* COLORPRIMARIES_BT2020 | (TRANSFUNC_PQ << 8) | (MATRIX_BT2020 << 16) | (RANGE_FULL << 21) */ 356 GRAPHIC_CM_BT2020_PQ_FULL = 4 | (4 << 8) | (4 << 16) | (1 << 21), 357 358 /* COLORPRIMARIES_BT601_P | (TRANSFUNC_BT709 << 8) | (MATRIX_BT601_P << 16) | (RANGE_LIMITED << 21) */ 359 GRAPHIC_CM_BT601_EBU_LIMIT = 2 | (1 << 8) | (2 << 16) | (2 << 21), 360 /* COLORPRIMARIES_BT601_N | (TRANSFUNC_BT709 << 8) | (MATRIX_BT601_N << 16) | (RANGE_LIMITED << 21) */ 361 GRAPHIC_CM_BT601_SMPTE_C_LIMIT = 3 | (1 << 8) | (3 << 16) | (2 << 21), 362 /* COLORPRIMARIES_BT709 | (TRANSFUNC_BT709 << 8) | (MATRIX_BT709 << 16) | (RANGE_LIMITED << 21) */ 363 GRAPHIC_CM_BT709_LIMIT = 1 | (1 << 8) | (1 << 16) | (2 << 21), 364 /* COLORPRIMARIES_BT2020 | (TRANSFUNC_HLG << 8) | (MATRIX_BT2020 << 16) | (RANGE_LIMITED << 21) */ 365 GRAPHIC_CM_BT2020_HLG_LIMIT = 4 | (5 << 8) | (4 << 16) | (2 << 21), 366 /* COLORPRIMARIES_BT2020 | (TRANSFUNC_PQ << 8) | (MATRIX_BT2020 << 16) | (RANGE_LIMITED << 21) */ 367 GRAPHIC_CM_BT2020_PQ_LIMIT = 4 | (4 << 8) | (4 << 16) | (2 << 21), 368 369 /* COLORPRIMARIES_SRGB | (TRANSFUNC_SRGB << 8) | (MATRIX_BT601_N << 16) | (RANGE_FULL << 21) */ 370 GRAPHIC_CM_SRGB_FULL = 1 | (2 << 8) | (3 << 16) | (1 << 21), 371 /* COLORPRIMARIES_P3_D65 | (TRANSFUNC_SRGB << 8) | (MATRIX_P3 << 16) | (RANGE_FULL << 21) */ 372 GRAPHIC_CM_P3_FULL = 6 | (2 << 8) | (3 << 16) | (1 << 21), 373 /* COLORPRIMARIES_P3_D65 | (TRANSFUNC_HLG << 8) | (MATRIX_P3 << 16) | (RANGE_FULL << 21) */ 374 GRAPHIC_CM_P3_HLG_FULL = 6 | (5 << 8) | (3 << 16) | (1 << 21), 375 /* COLORPRIMARIES_P3_D65 | (TRANSFUNC_PQ << 8) | (MATRIX_P3 << 16) | (RANGE_FULL << 21) */ 376 GRAPHIC_CM_P3_PQ_FULL = 6 | (4 << 8) | (3 << 16) | (1 << 21), 377 /* COLORPRIMARIES_ADOBERGB | (TRANSFUNC_ADOBERGB << 8) | (MATRIX_ADOBERGB << 16) | (RANGE_FULL << 21) */ 378 GRAPHIC_CM_ADOBERGB_FULL = 23 | (6 << 8) | (0 << 16) | (1 << 21), 379 380 /* COLORPRIMARIES_SRGB | (TRANSFUNC_SRGB << 8) | (MATRIX_BT601_N << 16) | (RANGE_LIMITED << 21) */ 381 GRAPHIC_CM_SRGB_LIMIT = 1 | (2 << 8) | (3 << 16) | (2 << 21), 382 /* COLORPRIMARIES_P3_D65 | (TRANSFUNC_SRGB << 8) | (MATRIX_P3 << 16) | (RANGE_LIMITED << 21) */ 383 GRAPHIC_CM_P3_LIMIT = 6 | (2 << 8) | (3 << 16) | (2 << 21), 384 /* COLORPRIMARIES_P3_D65 | (TRANSFUNC_HLG << 8) | (MATRIX_P3 << 16) | (RANGE_LIMITED << 21) */ 385 GRAPHIC_CM_P3_HLG_LIMIT = 6 | (5 << 8) | (3 << 16) | (2 << 21), 386 /* COLORPRIMARIES_P3_D65 | (TRANSFUNC_PQ << 8) | (MATRIX_P3 << 16) | (RANGE_LIMITED << 21) */ 387 GRAPHIC_CM_P3_PQ_LIMIT = 6 | (4 << 8) | (3 << 16) | (2 << 21), 388 /* COLORPRIMARIES_ADOBERGB | (TRANSFUNC_ADOBERGB << 8) | (MATRIX_ADOBERGB << 16) | (RANGE_LIMITED << 21) */ 389 GRAPHIC_CM_ADOBERGB_LIMIT = 23 | (6 << 8) | (0 << 16) | (2 << 21), 390 391 /* COLORPRIMARIES_SRGB | (TRANSFUNC_LINEAR << 8) */ 392 GRAPHIC_CM_LINEAR_SRGB = 1 | (3 << 8), 393 /* equal to GRAPHIC_CM_LINEAR_SRGB */ 394 GRAPHIC_CM_LINEAR_BT709 = 1 | (3 << 8), 395 /* COLORPRIMARIES_P3_D65 | (TRANSFUNC_LINEAR << 8) */ 396 GRAPHIC_CM_LINEAR_P3 = 6 | (3 << 8), 397 /* COLORPRIMARIES_BT2020 | (TRANSFUNC_LINEAR << 8) */ 398 GRAPHIC_CM_LINEAR_BT2020 = 4 | (3 << 8), 399 400 /* equal to GRAPHIC_CM_SRGB_FULL */ 401 GRAPHIC_CM_DISPLAY_SRGB = 1 | (2 << 8) | (3 << 16) | (1 << 21), 402 /* equal to GRAPHIC_CM_P3_FULL */ 403 GRAPHIC_CM_DISPLAY_P3_SRGB = 6 | (2 << 8) | (3 << 16) | (1 << 21), 404 /* equal to GRAPHIC_CM_P3_HLG_FULL */ 405 GRAPHIC_CM_DISPLAY_P3_HLG = 6 | (5 << 8) | (3 << 16) | (1 << 21), 406 /* equal to GRAPHIC_CM_P3_PQ_FULL */ 407 GRAPHIC_CM_DISPLAY_P3_PQ = 6 | (4 << 8) | (3 << 16) | (1 << 21), 408 /* COLORPRIMARIES_BT2020 | (TRANSFUNC_SRGB << 8) | (MATRIX_BT2020 << 16) | (RANGE_FULL << 21) */ 409 GRAPHIC_CM_DISPLAY_BT2020_SRGB = 4 | (2 << 8) | (4 << 16) | (1 << 21), 410 /* equal to GRAPHIC_CM_BT2020_HLG_FULL */ 411 GRAPHIC_CM_DISPLAY_BT2020_HLG = 4 | (5 << 8) | (4 << 16) | (1 << 21), 412 /* equal to GRAPHIC_CM_BT2020_PQ_FULL */ 413 GRAPHIC_CM_DISPLAY_BT2020_PQ = 4 | (4 << 8) | (4 << 16) | (1 << 21) 414 }; 415 416 using GraphicColorDataSpace = enum { 417 GRAPHIC_COLOR_DATA_SPACE_UNKNOWN = 0, 418 GRAPHIC_GAMUT_BT601 = 0x00000001, 419 GRAPHIC_GAMUT_BT709 = 0x00000002, 420 GRAPHIC_GAMUT_DCI_P3 = 0x00000003, 421 GRAPHIC_GAMUT_SRGB = 0x00000004, 422 GRAPHIC_GAMUT_ADOBE_RGB = 0x00000005, 423 GRAPHIC_GAMUT_DISPLAY_P3 = 0x00000006, 424 GRAPHIC_GAMUT_BT2020 = 0x00000007, 425 GRAPHIC_GAMUT_BT2100_PQ = 0x00000008, 426 GRAPHIC_GAMUT_BT2100_HLG = 0x00000009, 427 GRAPHIC_GAMUT_DISPLAY_BT2020 = 0x0000000a, 428 GRAPHIC_TRANSFORM_FUNC_UNSPECIFIED = 0x00000100, 429 GRAPHIC_TRANSFORM_FUNC_LINEAR = 0x00000200, 430 GRAPHIC_TRANSFORM_FUNC_SRGB = 0x00000300, 431 GRAPHIC_TRANSFORM_FUNC_SMPTE_170M = 0x00000400, 432 GRAPHIC_TRANSFORM_FUNC_GM2_2 = 0x00000500, 433 GRAPHIC_TRANSFORM_FUNC_GM2_6 = 0x00000600, 434 GRAPHIC_TRANSFORM_FUNC_GM2_8 = 0x00000700, 435 GRAPHIC_TRANSFORM_FUNC_ST2084 = 0x00000800, 436 GRAPHIC_TRANSFORM_FUNC_HLG = 0x00000900, 437 GRAPHIC_PRECISION_UNSPECIFIED = 0x00010000, 438 GRAPHIC_PRECISION_FULL = 0x00020000, 439 GRAPHIC_PRESION_LIMITED = 0x00030000, 440 GRAPHIC_PRESION_EXTENDED = 0x00040000, 441 GRAPHIC_BT601_SMPTE170M_FULL = GRAPHIC_GAMUT_BT601 | GRAPHIC_TRANSFORM_FUNC_SMPTE_170M | GRAPHIC_PRECISION_FULL, 442 GRAPHIC_BT601_SMPTE170M_LIMITED = GRAPHIC_GAMUT_BT601 | GRAPHIC_TRANSFORM_FUNC_SMPTE_170M | 443 GRAPHIC_PRESION_LIMITED, 444 GRAPHIC_BT709_LINEAR_FULL = GRAPHIC_GAMUT_BT709 | GRAPHIC_TRANSFORM_FUNC_LINEAR | GRAPHIC_PRECISION_FULL, 445 GRAPHIC_BT709_LINEAR_EXTENDED = GRAPHIC_GAMUT_BT709 | GRAPHIC_TRANSFORM_FUNC_LINEAR | GRAPHIC_PRESION_EXTENDED, 446 GRAPHIC_BT709_SRGB_FULL = GRAPHIC_GAMUT_BT709 | GRAPHIC_TRANSFORM_FUNC_SRGB | GRAPHIC_PRECISION_FULL, 447 GRAPHIC_BT709_SRGB_EXTENDED = GRAPHIC_GAMUT_BT709 | GRAPHIC_TRANSFORM_FUNC_SRGB | GRAPHIC_PRESION_EXTENDED, 448 GRAPHIC_BT709_SMPTE170M_LIMITED = GRAPHIC_GAMUT_BT709 | GRAPHIC_TRANSFORM_FUNC_SMPTE_170M | 449 GRAPHIC_PRESION_LIMITED, 450 GRAPHIC_DCI_P3_LINEAR_FULL = GRAPHIC_GAMUT_DCI_P3 | GRAPHIC_TRANSFORM_FUNC_LINEAR | GRAPHIC_PRECISION_FULL, 451 GRAPHIC_DCI_P3_GAMMA26_FULL = GRAPHIC_GAMUT_DCI_P3 | GRAPHIC_TRANSFORM_FUNC_GM2_6 | GRAPHIC_PRECISION_FULL, 452 GRAPHIC_DISPLAY_P3_LINEAR_FULL = GRAPHIC_GAMUT_DISPLAY_P3 | GRAPHIC_TRANSFORM_FUNC_LINEAR | GRAPHIC_PRECISION_FULL, 453 GRAPHIC_DCI_P3_SRGB_FULL = GRAPHIC_GAMUT_DCI_P3 | GRAPHIC_TRANSFORM_FUNC_SRGB | GRAPHIC_PRECISION_FULL, 454 GRAPHIC_ADOBE_RGB_GAMMA22_FULL = GRAPHIC_GAMUT_ADOBE_RGB | GRAPHIC_TRANSFORM_FUNC_GM2_2 | GRAPHIC_PRECISION_FULL, 455 GRAPHIC_BT2020_LINEAR_FULL = GRAPHIC_GAMUT_BT2020 | GRAPHIC_TRANSFORM_FUNC_LINEAR | GRAPHIC_PRECISION_FULL, 456 GRAPHIC_BT2020_SRGB_FULL = GRAPHIC_GAMUT_BT2020 | GRAPHIC_TRANSFORM_FUNC_SRGB | GRAPHIC_PRECISION_FULL, 457 GRAPHIC_BT2020_SMPTE170M_FULL = GRAPHIC_GAMUT_BT2020 | GRAPHIC_TRANSFORM_FUNC_SMPTE_170M | GRAPHIC_PRECISION_FULL, 458 GRAPHIC_BT2020_ST2084_FULL = GRAPHIC_GAMUT_BT2020 | GRAPHIC_TRANSFORM_FUNC_ST2084 | GRAPHIC_PRECISION_FULL, 459 GRAPHIC_BT2020_HLG_FULL = GRAPHIC_GAMUT_BT2020 | GRAPHIC_TRANSFORM_FUNC_HLG | GRAPHIC_PRECISION_FULL, 460 GRAPHIC_BT2020_ST2084_LIMITED = GRAPHIC_GAMUT_BT2020 | GRAPHIC_TRANSFORM_FUNC_ST2084 | GRAPHIC_PRESION_LIMITED, 461 }; 462 463 using GraphicTransformType = enum { 464 GRAPHIC_ROTATE_NONE = 0, /**< No rotation */ 465 GRAPHIC_ROTATE_90, /**< Rotation by 90 degrees */ 466 GRAPHIC_ROTATE_180, /**< Rotation by 180 degrees */ 467 GRAPHIC_ROTATE_270, /**< Rotation by 270 degrees */ 468 GRAPHIC_FLIP_H, /**< Flip horizontally */ 469 GRAPHIC_FLIP_V, /**< Flip vertically */ 470 GRAPHIC_FLIP_H_ROT90, /**< Flip horizontally and rotate 90 degrees */ 471 GRAPHIC_FLIP_V_ROT90, /**< Flip vertically and rotate 90 degrees */ 472 GRAPHIC_FLIP_H_ROT180, /**< Flip horizontally and rotate 180 degrees */ 473 GRAPHIC_FLIP_V_ROT180, /**< Flip vertically and rotate 180 degrees */ 474 GRAPHIC_FLIP_H_ROT270, /**< Flip horizontally and rotate 270 degrees */ 475 GRAPHIC_FLIP_V_ROT270, /**< Flip vertically and rotate 270 degrees */ 476 GRAPHIC_ROTATE_BUTT /**< Invalid operation */ 477 }; 478 479 using BufferRequestConfig = struct BufferRequestConfig { 480 int32_t width; 481 int32_t height; 482 int32_t strideAlignment; // output parameter, system components can ignore it 483 int32_t format; // GraphicPixelFormat 484 uint64_t usage; 485 int32_t timeout; 486 GraphicColorGamut colorGamut = GraphicColorGamut::GRAPHIC_COLOR_GAMUT_SRGB; 487 GraphicTransformType transform = GraphicTransformType::GRAPHIC_ROTATE_NONE; 488 bool operator ==(const struct BufferRequestConfig &config) const 489 { 490 return width == config.width && height == config.height && 491 format == config.format && usage == config.usage; 492 } 493 bool operator != (const struct BufferRequestConfig &config) const 494 { 495 return !(*this == config); 496 } 497 }; 498 499 using BufferFlushConfig = struct { 500 Rect damage; 501 int64_t timestamp; 502 int64_t desiredPresentTimestamp; 503 }; 504 505 using BufferFlushConfigWithDamages = struct BufferFlushConfigWithDamages { 506 std::vector<Rect> damages = {}; 507 int64_t timestamp; 508 int64_t desiredPresentTimestamp; 509 }; 510 511 using SceneType = enum { 512 SURFACE_SCENE_TYPE_EGL = 0, 513 SURFACE_SCENE_TYPE_MEDIA, 514 SURFACE_SCENE_TYPE_CAMERA, 515 SURFACE_SCENE_TYPE_CPU, 516 }; 517 518 using GraphicExtDataHandle = struct { 519 /**< Handle fd, -1 if not supported */ 520 int32_t fd; 521 /**< the number of reserved integer value */ 522 uint32_t reserveInts; 523 /**< the reserved data */ 524 int32_t reserve[0]; 525 }; 526 } // namespace OHOS 527 528 #endif // INTERFACES_INNERKITS_SURFACE_SURFACE_TYPE_H 529