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 { 226 int32_t x; 227 int32_t y; 228 int32_t w; 229 int32_t h; 230 }; 231 232 using ScalingMode = enum { 233 SCALING_MODE_FREEZE = 0, 234 SCALING_MODE_SCALE_TO_WINDOW, 235 SCALING_MODE_SCALE_CROP, 236 SCALING_MODE_NO_SCALE_CROP, 237 SCALING_MODE_SCALE_FIT, 238 }; 239 240 using HDRMetaDataType = enum { 241 HDR_NOT_USED = 0, 242 HDR_META_DATA, 243 HDR_META_DATA_SET, 244 }; 245 246 using GraphicHDRMetadataKey = enum { 247 GRAPHIC_MATAKEY_RED_PRIMARY_X = 0, 248 GRAPHIC_MATAKEY_RED_PRIMARY_Y = 1, 249 GRAPHIC_MATAKEY_GREEN_PRIMARY_X = 2, 250 GRAPHIC_MATAKEY_GREEN_PRIMARY_Y = 3, 251 GRAPHIC_MATAKEY_BLUE_PRIMARY_X = 4, 252 GRAPHIC_MATAKEY_BLUE_PRIMARY_Y = 5, 253 GRAPHIC_MATAKEY_WHITE_PRIMARY_X = 6, 254 GRAPHIC_MATAKEY_WHITE_PRIMARY_Y = 7, 255 GRAPHIC_MATAKEY_MAX_LUMINANCE = 8, 256 GRAPHIC_MATAKEY_MIN_LUMINANCE = 9, 257 GRAPHIC_MATAKEY_MAX_CONTENT_LIGHT_LEVEL = 10, 258 GRAPHIC_MATAKEY_MAX_FRAME_AVERAGE_LIGHT_LEVEL = 11, 259 GRAPHIC_MATAKEY_HDR10_PLUS = 12, 260 GRAPHIC_MATAKEY_HDR_VIVID = 13, 261 }; 262 263 using GraphicHDRMetaDataSet = struct GraphicHDRMetaDataSet { 264 GraphicHDRMetadataKey key = GraphicHDRMetadataKey::GRAPHIC_MATAKEY_RED_PRIMARY_X; 265 std::vector<uint8_t> metaData; 266 }; 267 268 typedef struct { 269 GraphicHDRMetadataKey key; 270 float value; 271 } GraphicHDRMetaData; 272 273 using SurfaceBufferUsage = enum { 274 BUFFER_USAGE_CPU_READ = (1ULL << 0), /**< CPU read buffer */ 275 BUFFER_USAGE_CPU_WRITE = (1ULL << 1), /**< CPU write memory */ 276 BUFFER_USAGE_MEM_MMZ = (1ULL << 2), /**< Media memory zone (MMZ) */ 277 BUFFER_USAGE_MEM_DMA = (1ULL << 3), /**< Direct memory access (DMA) buffer */ 278 BUFFER_USAGE_MEM_SHARE = (1ULL << 4), /**< Shared memory buffer*/ 279 BUFFER_USAGE_MEM_MMZ_CACHE = (1ULL << 5), /**< MMZ with cache*/ 280 BUFFER_USAGE_MEM_FB = (1ULL << 6), /**< Framebuffer */ 281 BUFFER_USAGE_ASSIGN_SIZE = (1ULL << 7), /**< Memory assigned */ 282 BUFFER_USAGE_HW_RENDER = (1ULL << 8), /**< For GPU write case */ 283 BUFFER_USAGE_HW_TEXTURE = (1ULL << 9), /**< For GPU read case */ 284 BUFFER_USAGE_HW_COMPOSER = (1ULL << 10), /**< For hardware composer */ 285 BUFFER_USAGE_PROTECTED = (1ULL << 11), /**< For safe buffer case, such as DRM */ 286 BUFFER_USAGE_CAMERA_READ = (1ULL << 12), /**< For camera read case */ 287 BUFFER_USAGE_CAMERA_WRITE = (1ULL << 13), /**< For camera write case */ 288 BUFFER_USAGE_VIDEO_ENCODER = (1ULL << 14), /**< For encode case */ 289 BUFFER_USAGE_VIDEO_DECODER = (1ULL << 15), /**< For decode case */ 290 BUFFER_USAGE_CPU_READ_OFTEN = (1ULL << 16), /**< CPU read often buffer */ 291 BUFFER_USAGE_CPU_HW_BOTH = (1ULL << 17), /**< CPU read often buffer */ 292 BUFFER_USAGE_ALIGNMENT_512 = (1ULL << 18), /**< 512 bytes alignment */ 293 BUFFER_USAGE_VENDOR_PRI0 = (1ULL << 44), /**< Reserverd for vendor */ 294 BUFFER_USAGE_VENDOR_PRI1 = (1ULL << 45), /**< Reserverd for vendor */ 295 BUFFER_USAGE_VENDOR_PRI2 = (1ULL << 46), /**< Reserverd for vendor */ 296 BUFFER_USAGE_VENDOR_PRI3 = (1ULL << 47), /**< Reserverd for vendor */ 297 BUFFER_USAGE_VENDOR_PRI4 = (1ULL << 48), /**< Reserverd for vendor */ 298 BUFFER_USAGE_VENDOR_PRI5 = (1ULL << 49), /**< Reserverd for vendor */ 299 BUFFER_USAGE_VENDOR_PRI6 = (1ULL << 50), /**< Reserverd for vendor */ 300 BUFFER_USAGE_VENDOR_PRI7 = (1ULL << 51), /**< Reserverd for vendor */ 301 BUFFER_USAGE_VENDOR_PRI8 = (1ULL << 52), /**< Reserverd for vendor */ 302 BUFFER_USAGE_VENDOR_PRI9 = (1ULL << 53), /**< Reserverd for vendor */ 303 BUFFER_USAGE_VENDOR_PRI10 = (1ULL << 54), /**< Reserverd for vendor */ 304 BUFFER_USAGE_VENDOR_PRI11 = (1ULL << 55), /**< Reserverd for vendor */ 305 BUFFER_USAGE_VENDOR_PRI12 = (1ULL << 56), /**< Reserverd for vendor */ 306 BUFFER_USAGE_VENDOR_PRI13 = (1ULL << 57), /**< Reserverd for vendor */ 307 BUFFER_USAGE_VENDOR_PRI14 = (1ULL << 58), /**< Reserverd for vendor */ 308 BUFFER_USAGE_VENDOR_PRI15 = (1ULL << 59), /**< Reserverd for vendor */ 309 BUFFER_USAGE_VENDOR_PRI16 = (1ULL << 60), /**< Reserverd for vendor */ 310 BUFFER_USAGE_VENDOR_PRI17 = (1ULL << 61), /**< Reserverd for vendor */ 311 BUFFER_USAGE_VENDOR_PRI18 = (1ULL << 62), /**< Reserverd for vendor */ 312 BUFFER_USAGE_VENDOR_PRI19 = (1ULL << 63), /**< Reserverd for vendor */ 313 }; 314 315 using GraphicColorGamut = enum { 316 GRAPHIC_COLOR_GAMUT_INVALID = -1, /**< Invalid */ 317 GRAPHIC_COLOR_GAMUT_NATIVE = 0, /**< Native or default */ 318 GRAPHIC_COLOR_GAMUT_STANDARD_BT601 = 1, /**< Standard BT601 */ 319 GRAPHIC_COLOR_GAMUT_STANDARD_BT709 = 2, /**< Standard BT709 */ 320 GRAPHIC_COLOR_GAMUT_DCI_P3 = 3, /**< DCI P3 */ 321 GRAPHIC_COLOR_GAMUT_SRGB = 4, /**< SRGB */ 322 GRAPHIC_COLOR_GAMUT_ADOBE_RGB = 5, /**< Adobe RGB */ 323 GRAPHIC_COLOR_GAMUT_DISPLAY_P3 = 6, /**< display P3 */ 324 GRAPHIC_COLOR_GAMUT_BT2020 = 7, /**< BT2020 */ 325 GRAPHIC_COLOR_GAMUT_BT2100_PQ = 8, /**< BT2100 PQ */ 326 GRAPHIC_COLOR_GAMUT_BT2100_HLG = 9, /**< BT2100 HLG */ 327 GRAPHIC_COLOR_GAMUT_DISPLAY_BT2020 = 10, /**< Display BT2020 */ 328 }; 329 330 using GraphicCM_ColorSpaceType = enum { 331 GRAPHIC_CM_COLORSPACE_NONE, 332 333 /* COLORPRIMARIES_BT601_P | (TRANSFUNC_BT709 << 8) | (MATRIX_BT601_P << 16) | (RANGE_FULL << 21) */ 334 GRAPHIC_CM_BT601_EBU_FULL = 2 | (1 << 8) | (2 << 16) | (1 << 21), 335 /* COLORPRIMARIES_BT601_N | (TRANSFUNC_BT709 << 8) | (MATRIX_BT601_N << 16) | (RANGE_FULL << 21) */ 336 GRAPHIC_CM_BT601_SMPTE_C_FULL = 3 | (1 << 8) | (3 << 16) | (1 << 21), 337 /* COLORPRIMARIES_BT709 | (TRANSFUNC_BT709 << 8) | (MATRIX_BT709 << 16) | (RANGE_FULL << 21) */ 338 GRAPHIC_CM_BT709_FULL = 1 | (1 << 8) | (1 << 16) | (1 << 21), 339 /* COLORPRIMARIES_BT2020 | (TRANSFUNC_HLG << 8) | (MATRIX_BT2020 << 16) | (RANGE_FULL << 21) */ 340 GRAPHIC_CM_BT2020_HLG_FULL = 4 | (5 << 8) | (4 << 16) | (1 << 21), 341 /* COLORPRIMARIES_BT2020 | (TRANSFUNC_PQ << 8) | (MATRIX_BT2020 << 16) | (RANGE_FULL << 21) */ 342 GRAPHIC_CM_BT2020_PQ_FULL = 4 | (4 << 8) | (4 << 16) | (1 << 21), 343 344 /* COLORPRIMARIES_BT601_P | (TRANSFUNC_BT709 << 8) | (MATRIX_BT601_P << 16) | (RANGE_LIMITED << 21) */ 345 GRAPHIC_CM_BT601_EBU_LIMIT = 2 | (1 << 8) | (2 << 16) | (2 << 21), 346 /* COLORPRIMARIES_BT601_N | (TRANSFUNC_BT709 << 8) | (MATRIX_BT601_N << 16) | (RANGE_LIMITED << 21) */ 347 GRAPHIC_CM_BT601_SMPTE_C_LIMIT = 3 | (1 << 8) | (3 << 16) | (2 << 21), 348 /* COLORPRIMARIES_BT709 | (TRANSFUNC_BT709 << 8) | (MATRIX_BT709 << 16) | (RANGE_LIMITED << 21) */ 349 GRAPHIC_CM_BT709_LIMIT = 1 | (1 << 8) | (1 << 16) | (2 << 21), 350 /* COLORPRIMARIES_BT2020 | (TRANSFUNC_HLG << 8) | (MATRIX_BT2020 << 16) | (RANGE_LIMITED << 21) */ 351 GRAPHIC_CM_BT2020_HLG_LIMIT = 4 | (5 << 8) | (4 << 16) | (2 << 21), 352 /* COLORPRIMARIES_BT2020 | (TRANSFUNC_PQ << 8) | (MATRIX_BT2020 << 16) | (RANGE_LIMITED << 21) */ 353 GRAPHIC_CM_BT2020_PQ_LIMIT = 4 | (4 << 8) | (4 << 16) | (2 << 21), 354 355 /* COLORPRIMARIES_SRGB | (TRANSFUNC_SRGB << 8) | (MATRIX_BT601_N << 16) | (RANGE_FULL << 21) */ 356 GRAPHIC_CM_SRGB_FULL = 1 | (2 << 8) | (3 << 16) | (1 << 21), 357 /* COLORPRIMARIES_P3_D65 | (TRANSFUNC_SRGB << 8) | (MATRIX_P3 << 16) | (RANGE_FULL << 21) */ 358 GRAPHIC_CM_P3_FULL = 6 | (2 << 8) | (3 << 16) | (1 << 21), 359 /* COLORPRIMARIES_P3_D65 | (TRANSFUNC_HLG << 8) | (MATRIX_P3 << 16) | (RANGE_FULL << 21) */ 360 GRAPHIC_CM_P3_HLG_FULL = 6 | (5 << 8) | (3 << 16) | (1 << 21), 361 /* COLORPRIMARIES_P3_D65 | (TRANSFUNC_PQ << 8) | (MATRIX_P3 << 16) | (RANGE_FULL << 21) */ 362 GRAPHIC_CM_P3_PQ_FULL = 6 | (4 << 8) | (3 << 16) | (1 << 21), 363 /* COLORPRIMARIES_ADOBERGB | (TRANSFUNC_ADOBERGB << 8) | (MATRIX_ADOBERGB << 16) | (RANGE_FULL << 21) */ 364 GRAPHIC_CM_ADOBERGB_FULL = 23 | (6 << 8) | (0 << 16) | (1 << 21), 365 366 /* COLORPRIMARIES_SRGB | (TRANSFUNC_SRGB << 8) | (MATRIX_BT601_N << 16) | (RANGE_LIMITED << 21) */ 367 GRAPHIC_CM_SRGB_LIMIT = 1 | (2 << 8) | (3 << 16) | (2 << 21), 368 /* COLORPRIMARIES_P3_D65 | (TRANSFUNC_SRGB << 8) | (MATRIX_P3 << 16) | (RANGE_LIMITED << 21) */ 369 GRAPHIC_CM_P3_LIMIT = 6 | (2 << 8) | (3 << 16) | (2 << 21), 370 /* COLORPRIMARIES_P3_D65 | (TRANSFUNC_HLG << 8) | (MATRIX_P3 << 16) | (RANGE_LIMITED << 21) */ 371 GRAPHIC_CM_P3_HLG_LIMIT = 6 | (5 << 8) | (3 << 16) | (2 << 21), 372 /* COLORPRIMARIES_P3_D65 | (TRANSFUNC_PQ << 8) | (MATRIX_P3 << 16) | (RANGE_LIMITED << 21) */ 373 GRAPHIC_CM_P3_PQ_LIMIT = 6 | (4 << 8) | (3 << 16) | (2 << 21), 374 /* COLORPRIMARIES_ADOBERGB | (TRANSFUNC_ADOBERGB << 8) | (MATRIX_ADOBERGB << 16) | (RANGE_LIMITED << 21) */ 375 GRAPHIC_CM_ADOBERGB_LIMIT = 23 | (6 << 8) | (0 << 16) | (2 << 21), 376 377 /* COLORPRIMARIES_SRGB | (TRANSFUNC_LINEAR << 8) */ 378 GRAPHIC_CM_LINEAR_SRGB = 1 | (3 << 8), 379 /* equal to GRAPHIC_CM_LINEAR_SRGB */ 380 GRAPHIC_CM_LINEAR_BT709 = 1 | (3 << 8), 381 /* COLORPRIMARIES_P3_D65 | (TRANSFUNC_LINEAR << 8) */ 382 GRAPHIC_CM_LINEAR_P3 = 6 | (3 << 8), 383 /* COLORPRIMARIES_BT2020 | (TRANSFUNC_LINEAR << 8) */ 384 GRAPHIC_CM_LINEAR_BT2020 = 4 | (3 << 8), 385 386 /* equal to GRAPHIC_CM_SRGB_FULL */ 387 GRAPHIC_CM_DISPLAY_SRGB = 1 | (2 << 8) | (3 << 16) | (1 << 21), 388 /* equal to GRAPHIC_CM_P3_FULL */ 389 GRAPHIC_CM_DISPLAY_P3_SRGB = 6 | (2 << 8) | (3 << 16) | (1 << 21), 390 /* equal to GRAPHIC_CM_P3_HLG_FULL */ 391 GRAPHIC_CM_DISPLAY_P3_HLG = 6 | (5 << 8) | (3 << 16) | (1 << 21), 392 /* equal to GRAPHIC_CM_P3_PQ_FULL */ 393 GRAPHIC_CM_DISPLAY_P3_PQ = 6 | (4 << 8) | (3 << 16) | (1 << 21), 394 /* COLORPRIMARIES_BT2020 | (TRANSFUNC_SRGB << 8) | (MATRIX_BT2020 << 16) | (RANGE_FULL << 21) */ 395 GRAPHIC_CM_DISPLAY_BT2020_SRGB = 4 | (2 << 8) | (4 << 16) | (1 << 21), 396 /* equal to GRAPHIC_CM_BT2020_HLG_FULL */ 397 GRAPHIC_CM_DISPLAY_BT2020_HLG = 4 | (5 << 8) | (4 << 16) | (1 << 21), 398 /* equal to GRAPHIC_CM_BT2020_PQ_FULL */ 399 GRAPHIC_CM_DISPLAY_BT2020_PQ = 4 | (4 << 8) | (4 << 16) | (1 << 21) 400 }; 401 402 using GraphicColorDataSpace = enum { 403 GRAPHIC_COLOR_DATA_SPACE_UNKNOWN = 0, 404 GRAPHIC_GAMUT_BT601 = 0x00000001, 405 GRAPHIC_GAMUT_BT709 = 0x00000002, 406 GRAPHIC_GAMUT_DCI_P3 = 0x00000003, 407 GRAPHIC_GAMUT_SRGB = 0x00000004, 408 GRAPHIC_GAMUT_ADOBE_RGB = 0x00000005, 409 GRAPHIC_GAMUT_DISPLAY_P3 = 0x00000006, 410 GRAPHIC_GAMUT_BT2020 = 0x00000007, 411 GRAPHIC_GAMUT_BT2100_PQ = 0x00000008, 412 GRAPHIC_GAMUT_BT2100_HLG = 0x00000009, 413 GRAPHIC_GAMUT_DISPLAY_BT2020 = 0x0000000a, 414 GRAPHIC_TRANSFORM_FUNC_UNSPECIFIED = 0x00000100, 415 GRAPHIC_TRANSFORM_FUNC_LINEAR = 0x00000200, 416 GRAPHIC_TRANSFORM_FUNC_SRGB = 0x00000300, 417 GRAPHIC_TRANSFORM_FUNC_SMPTE_170M = 0x00000400, 418 GRAPHIC_TRANSFORM_FUNC_GM2_2 = 0x00000500, 419 GRAPHIC_TRANSFORM_FUNC_GM2_6 = 0x00000600, 420 GRAPHIC_TRANSFORM_FUNC_GM2_8 = 0x00000700, 421 GRAPHIC_TRANSFORM_FUNC_ST2084 = 0x00000800, 422 GRAPHIC_TRANSFORM_FUNC_HLG = 0x00000900, 423 GRAPHIC_PRECISION_UNSPECIFIED = 0x00010000, 424 GRAPHIC_PRECISION_FULL = 0x00020000, 425 GRAPHIC_PRESION_LIMITED = 0x00030000, 426 GRAPHIC_PRESION_EXTENDED = 0x00040000, 427 GRAPHIC_BT601_SMPTE170M_FULL = GRAPHIC_GAMUT_BT601 | GRAPHIC_TRANSFORM_FUNC_SMPTE_170M | GRAPHIC_PRECISION_FULL, 428 GRAPHIC_BT601_SMPTE170M_LIMITED = GRAPHIC_GAMUT_BT601 | GRAPHIC_TRANSFORM_FUNC_SMPTE_170M | 429 GRAPHIC_PRESION_LIMITED, 430 GRAPHIC_BT709_LINEAR_FULL = GRAPHIC_GAMUT_BT709 | GRAPHIC_TRANSFORM_FUNC_LINEAR | GRAPHIC_PRECISION_FULL, 431 GRAPHIC_BT709_LINEAR_EXTENDED = GRAPHIC_GAMUT_BT709 | GRAPHIC_TRANSFORM_FUNC_LINEAR | GRAPHIC_PRESION_EXTENDED, 432 GRAPHIC_BT709_SRGB_FULL = GRAPHIC_GAMUT_BT709 | GRAPHIC_TRANSFORM_FUNC_SRGB | GRAPHIC_PRECISION_FULL, 433 GRAPHIC_BT709_SRGB_EXTENDED = GRAPHIC_GAMUT_BT709 | GRAPHIC_TRANSFORM_FUNC_SRGB | GRAPHIC_PRESION_EXTENDED, 434 GRAPHIC_BT709_SMPTE170M_LIMITED = GRAPHIC_GAMUT_BT709 | GRAPHIC_TRANSFORM_FUNC_SMPTE_170M | 435 GRAPHIC_PRESION_LIMITED, 436 GRAPHIC_DCI_P3_LINEAR_FULL = GRAPHIC_GAMUT_DCI_P3 | GRAPHIC_TRANSFORM_FUNC_LINEAR | GRAPHIC_PRECISION_FULL, 437 GRAPHIC_DCI_P3_GAMMA26_FULL = GRAPHIC_GAMUT_DCI_P3 | GRAPHIC_TRANSFORM_FUNC_GM2_6 | GRAPHIC_PRECISION_FULL, 438 GRAPHIC_DISPLAY_P3_LINEAR_FULL = GRAPHIC_GAMUT_DISPLAY_P3 | GRAPHIC_TRANSFORM_FUNC_LINEAR | GRAPHIC_PRECISION_FULL, 439 GRAPHIC_DCI_P3_SRGB_FULL = GRAPHIC_GAMUT_DCI_P3 | GRAPHIC_TRANSFORM_FUNC_SRGB | GRAPHIC_PRECISION_FULL, 440 GRAPHIC_ADOBE_RGB_GAMMA22_FULL = GRAPHIC_GAMUT_ADOBE_RGB | GRAPHIC_TRANSFORM_FUNC_GM2_2 | GRAPHIC_PRECISION_FULL, 441 GRAPHIC_BT2020_LINEAR_FULL = GRAPHIC_GAMUT_BT2020 | GRAPHIC_TRANSFORM_FUNC_LINEAR | GRAPHIC_PRECISION_FULL, 442 GRAPHIC_BT2020_SRGB_FULL = GRAPHIC_GAMUT_BT2020 | GRAPHIC_TRANSFORM_FUNC_SRGB | GRAPHIC_PRECISION_FULL, 443 GRAPHIC_BT2020_SMPTE170M_FULL = GRAPHIC_GAMUT_BT2020 | GRAPHIC_TRANSFORM_FUNC_SMPTE_170M | GRAPHIC_PRECISION_FULL, 444 GRAPHIC_BT2020_ST2084_FULL = GRAPHIC_GAMUT_BT2020 | GRAPHIC_TRANSFORM_FUNC_ST2084 | GRAPHIC_PRECISION_FULL, 445 GRAPHIC_BT2020_HLG_FULL = GRAPHIC_GAMUT_BT2020 | GRAPHIC_TRANSFORM_FUNC_HLG | GRAPHIC_PRECISION_FULL, 446 GRAPHIC_BT2020_ST2084_LIMITED = GRAPHIC_GAMUT_BT2020 | GRAPHIC_TRANSFORM_FUNC_ST2084 | GRAPHIC_PRESION_LIMITED, 447 }; 448 449 using GraphicTransformType = enum { 450 GRAPHIC_ROTATE_NONE = 0, /**< No rotation */ 451 GRAPHIC_ROTATE_90, /**< Rotation by 90 degrees */ 452 GRAPHIC_ROTATE_180, /**< Rotation by 180 degrees */ 453 GRAPHIC_ROTATE_270, /**< Rotation by 270 degrees */ 454 GRAPHIC_FLIP_H, /**< Flip horizontally */ 455 GRAPHIC_FLIP_V, /**< Flip vertically */ 456 GRAPHIC_FLIP_H_ROT90, /**< Flip horizontally and rotate 90 degrees */ 457 GRAPHIC_FLIP_V_ROT90, /**< Flip vertically and rotate 90 degrees */ 458 GRAPHIC_FLIP_H_ROT180, /**< Flip horizontally and rotate 180 degrees */ 459 GRAPHIC_FLIP_V_ROT180, /**< Flip vertically and rotate 180 degrees */ 460 GRAPHIC_FLIP_H_ROT270, /**< Flip horizontally and rotate 270 degrees */ 461 GRAPHIC_FLIP_V_ROT270, /**< Flip vertically and rotate 270 degrees */ 462 GRAPHIC_ROTATE_BUTT /**< Invalid operation */ 463 }; 464 465 using BufferRequestConfig = struct BufferRequestConfig { 466 int32_t width; 467 int32_t height; 468 int32_t strideAlignment; // output parameter, system components can ignore it 469 int32_t format; // GraphicPixelFormat 470 uint64_t usage; 471 int32_t timeout; 472 GraphicColorGamut colorGamut = GraphicColorGamut::GRAPHIC_COLOR_GAMUT_SRGB; 473 GraphicTransformType transform = GraphicTransformType::GRAPHIC_ROTATE_NONE; 474 bool operator ==(const struct BufferRequestConfig &config) const 475 { 476 return width == config.width && height == config.height && 477 format == config.format && usage == config.usage; 478 } 479 bool operator != (const struct BufferRequestConfig &config) const 480 { 481 return !(*this == config); 482 } 483 }; 484 485 using BufferFlushConfig = struct { 486 Rect damage; 487 int64_t timestamp; 488 int64_t desiredPresentTimestamp; 489 }; 490 491 using BufferFlushConfigWithDamages = struct BufferFlushConfigWithDamages { 492 std::vector<Rect> damages = {}; 493 int64_t timestamp; 494 int64_t desiredPresentTimestamp; 495 }; 496 497 using SceneType = enum { 498 SURFACE_SCENE_TYPE_EGL = 0, 499 SURFACE_SCENE_TYPE_MEDIA, 500 SURFACE_SCENE_TYPE_CAMERA, 501 SURFACE_SCENE_TYPE_CPU, 502 }; 503 504 using GraphicExtDataHandle = struct { 505 /**< Handle fd, -1 if not supported */ 506 int32_t fd; 507 /**< the number of reserved integer value */ 508 uint32_t reserveInts; 509 /**< the reserved data */ 510 int32_t reserve[0]; 511 }; 512 } // namespace OHOS 513 514 #endif // INTERFACES_INNERKITS_SURFACE_SURFACE_TYPE_H 515