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_DRM_REDRAW = (1ULL << 24), /**< For drm redraw framebuffer allocate */ 294 BUFFER_USAGE_VENDOR_PRI0 = (1ULL << 44), /**< Reserverd for vendor */ 295 BUFFER_USAGE_VENDOR_PRI1 = (1ULL << 45), /**< Reserverd for vendor */ 296 BUFFER_USAGE_VENDOR_PRI2 = (1ULL << 46), /**< Reserverd for vendor */ 297 BUFFER_USAGE_VENDOR_PRI3 = (1ULL << 47), /**< Reserverd for vendor */ 298 BUFFER_USAGE_VENDOR_PRI4 = (1ULL << 48), /**< Reserverd for vendor */ 299 BUFFER_USAGE_VENDOR_PRI5 = (1ULL << 49), /**< Reserverd for vendor */ 300 BUFFER_USAGE_VENDOR_PRI6 = (1ULL << 50), /**< Reserverd for vendor */ 301 BUFFER_USAGE_VENDOR_PRI7 = (1ULL << 51), /**< Reserverd for vendor */ 302 BUFFER_USAGE_VENDOR_PRI8 = (1ULL << 52), /**< Reserverd for vendor */ 303 BUFFER_USAGE_VENDOR_PRI9 = (1ULL << 53), /**< Reserverd for vendor */ 304 BUFFER_USAGE_VENDOR_PRI10 = (1ULL << 54), /**< Reserverd for vendor */ 305 BUFFER_USAGE_VENDOR_PRI11 = (1ULL << 55), /**< Reserverd for vendor */ 306 BUFFER_USAGE_VENDOR_PRI12 = (1ULL << 56), /**< Reserverd for vendor */ 307 BUFFER_USAGE_VENDOR_PRI13 = (1ULL << 57), /**< Reserverd for vendor */ 308 BUFFER_USAGE_VENDOR_PRI14 = (1ULL << 58), /**< Reserverd for vendor */ 309 BUFFER_USAGE_VENDOR_PRI15 = (1ULL << 59), /**< Reserverd for vendor */ 310 BUFFER_USAGE_VENDOR_PRI16 = (1ULL << 60), /**< Reserverd for vendor */ 311 BUFFER_USAGE_VENDOR_PRI17 = (1ULL << 61), /**< Reserverd for vendor */ 312 BUFFER_USAGE_VENDOR_PRI18 = (1ULL << 62), /**< Reserverd for vendor */ 313 BUFFER_USAGE_VENDOR_PRI19 = (1ULL << 63), /**< Reserverd for vendor */ 314 }; 315 316 using GraphicColorGamut = enum { 317 GRAPHIC_COLOR_GAMUT_INVALID = -1, /**< Invalid */ 318 GRAPHIC_COLOR_GAMUT_NATIVE = 0, /**< Native or default */ 319 GRAPHIC_COLOR_GAMUT_STANDARD_BT601 = 1, /**< Standard BT601 */ 320 GRAPHIC_COLOR_GAMUT_STANDARD_BT709 = 2, /**< Standard BT709 */ 321 GRAPHIC_COLOR_GAMUT_DCI_P3 = 3, /**< DCI P3 */ 322 GRAPHIC_COLOR_GAMUT_SRGB = 4, /**< SRGB */ 323 GRAPHIC_COLOR_GAMUT_ADOBE_RGB = 5, /**< Adobe RGB */ 324 GRAPHIC_COLOR_GAMUT_DISPLAY_P3 = 6, /**< display P3 */ 325 GRAPHIC_COLOR_GAMUT_BT2020 = 7, /**< BT2020 */ 326 GRAPHIC_COLOR_GAMUT_BT2100_PQ = 8, /**< BT2100 PQ */ 327 GRAPHIC_COLOR_GAMUT_BT2100_HLG = 9, /**< BT2100 HLG */ 328 GRAPHIC_COLOR_GAMUT_DISPLAY_BT2020 = 10, /**< Display BT2020 */ 329 }; 330 331 using GraphicCM_ColorSpaceType = enum { 332 GRAPHIC_CM_COLORSPACE_NONE, 333 334 /* COLORPRIMARIES_BT601_P | (TRANSFUNC_BT709 << 8) | (MATRIX_BT601_P << 16) | (RANGE_FULL << 21) */ 335 GRAPHIC_CM_BT601_EBU_FULL = 2 | (1 << 8) | (2 << 16) | (1 << 21), 336 /* COLORPRIMARIES_BT601_N | (TRANSFUNC_BT709 << 8) | (MATRIX_BT601_N << 16) | (RANGE_FULL << 21) */ 337 GRAPHIC_CM_BT601_SMPTE_C_FULL = 3 | (1 << 8) | (3 << 16) | (1 << 21), 338 /* COLORPRIMARIES_BT709 | (TRANSFUNC_BT709 << 8) | (MATRIX_BT709 << 16) | (RANGE_FULL << 21) */ 339 GRAPHIC_CM_BT709_FULL = 1 | (1 << 8) | (1 << 16) | (1 << 21), 340 /* COLORPRIMARIES_BT2020 | (TRANSFUNC_HLG << 8) | (MATRIX_BT2020 << 16) | (RANGE_FULL << 21) */ 341 GRAPHIC_CM_BT2020_HLG_FULL = 4 | (5 << 8) | (4 << 16) | (1 << 21), 342 /* COLORPRIMARIES_BT2020 | (TRANSFUNC_PQ << 8) | (MATRIX_BT2020 << 16) | (RANGE_FULL << 21) */ 343 GRAPHIC_CM_BT2020_PQ_FULL = 4 | (4 << 8) | (4 << 16) | (1 << 21), 344 345 /* COLORPRIMARIES_BT601_P | (TRANSFUNC_BT709 << 8) | (MATRIX_BT601_P << 16) | (RANGE_LIMITED << 21) */ 346 GRAPHIC_CM_BT601_EBU_LIMIT = 2 | (1 << 8) | (2 << 16) | (2 << 21), 347 /* COLORPRIMARIES_BT601_N | (TRANSFUNC_BT709 << 8) | (MATRIX_BT601_N << 16) | (RANGE_LIMITED << 21) */ 348 GRAPHIC_CM_BT601_SMPTE_C_LIMIT = 3 | (1 << 8) | (3 << 16) | (2 << 21), 349 /* COLORPRIMARIES_BT709 | (TRANSFUNC_BT709 << 8) | (MATRIX_BT709 << 16) | (RANGE_LIMITED << 21) */ 350 GRAPHIC_CM_BT709_LIMIT = 1 | (1 << 8) | (1 << 16) | (2 << 21), 351 /* COLORPRIMARIES_BT2020 | (TRANSFUNC_HLG << 8) | (MATRIX_BT2020 << 16) | (RANGE_LIMITED << 21) */ 352 GRAPHIC_CM_BT2020_HLG_LIMIT = 4 | (5 << 8) | (4 << 16) | (2 << 21), 353 /* COLORPRIMARIES_BT2020 | (TRANSFUNC_PQ << 8) | (MATRIX_BT2020 << 16) | (RANGE_LIMITED << 21) */ 354 GRAPHIC_CM_BT2020_PQ_LIMIT = 4 | (4 << 8) | (4 << 16) | (2 << 21), 355 356 /* COLORPRIMARIES_SRGB | (TRANSFUNC_SRGB << 8) | (MATRIX_BT601_N << 16) | (RANGE_FULL << 21) */ 357 GRAPHIC_CM_SRGB_FULL = 1 | (2 << 8) | (3 << 16) | (1 << 21), 358 /* COLORPRIMARIES_P3_D65 | (TRANSFUNC_SRGB << 8) | (MATRIX_P3 << 16) | (RANGE_FULL << 21) */ 359 GRAPHIC_CM_P3_FULL = 6 | (2 << 8) | (3 << 16) | (1 << 21), 360 /* COLORPRIMARIES_P3_D65 | (TRANSFUNC_HLG << 8) | (MATRIX_P3 << 16) | (RANGE_FULL << 21) */ 361 GRAPHIC_CM_P3_HLG_FULL = 6 | (5 << 8) | (3 << 16) | (1 << 21), 362 /* COLORPRIMARIES_P3_D65 | (TRANSFUNC_PQ << 8) | (MATRIX_P3 << 16) | (RANGE_FULL << 21) */ 363 GRAPHIC_CM_P3_PQ_FULL = 6 | (4 << 8) | (3 << 16) | (1 << 21), 364 /* COLORPRIMARIES_ADOBERGB | (TRANSFUNC_ADOBERGB << 8) | (MATRIX_ADOBERGB << 16) | (RANGE_FULL << 21) */ 365 GRAPHIC_CM_ADOBERGB_FULL = 23 | (6 << 8) | (0 << 16) | (1 << 21), 366 367 /* COLORPRIMARIES_SRGB | (TRANSFUNC_SRGB << 8) | (MATRIX_BT601_N << 16) | (RANGE_LIMITED << 21) */ 368 GRAPHIC_CM_SRGB_LIMIT = 1 | (2 << 8) | (3 << 16) | (2 << 21), 369 /* COLORPRIMARIES_P3_D65 | (TRANSFUNC_SRGB << 8) | (MATRIX_P3 << 16) | (RANGE_LIMITED << 21) */ 370 GRAPHIC_CM_P3_LIMIT = 6 | (2 << 8) | (3 << 16) | (2 << 21), 371 /* COLORPRIMARIES_P3_D65 | (TRANSFUNC_HLG << 8) | (MATRIX_P3 << 16) | (RANGE_LIMITED << 21) */ 372 GRAPHIC_CM_P3_HLG_LIMIT = 6 | (5 << 8) | (3 << 16) | (2 << 21), 373 /* COLORPRIMARIES_P3_D65 | (TRANSFUNC_PQ << 8) | (MATRIX_P3 << 16) | (RANGE_LIMITED << 21) */ 374 GRAPHIC_CM_P3_PQ_LIMIT = 6 | (4 << 8) | (3 << 16) | (2 << 21), 375 /* COLORPRIMARIES_ADOBERGB | (TRANSFUNC_ADOBERGB << 8) | (MATRIX_ADOBERGB << 16) | (RANGE_LIMITED << 21) */ 376 GRAPHIC_CM_ADOBERGB_LIMIT = 23 | (6 << 8) | (0 << 16) | (2 << 21), 377 378 /* COLORPRIMARIES_SRGB | (TRANSFUNC_LINEAR << 8) */ 379 GRAPHIC_CM_LINEAR_SRGB = 1 | (3 << 8), 380 /* equal to GRAPHIC_CM_LINEAR_SRGB */ 381 GRAPHIC_CM_LINEAR_BT709 = 1 | (3 << 8), 382 /* COLORPRIMARIES_P3_D65 | (TRANSFUNC_LINEAR << 8) */ 383 GRAPHIC_CM_LINEAR_P3 = 6 | (3 << 8), 384 /* COLORPRIMARIES_BT2020 | (TRANSFUNC_LINEAR << 8) */ 385 GRAPHIC_CM_LINEAR_BT2020 = 4 | (3 << 8), 386 387 /* equal to GRAPHIC_CM_SRGB_FULL */ 388 GRAPHIC_CM_DISPLAY_SRGB = 1 | (2 << 8) | (3 << 16) | (1 << 21), 389 /* equal to GRAPHIC_CM_P3_FULL */ 390 GRAPHIC_CM_DISPLAY_P3_SRGB = 6 | (2 << 8) | (3 << 16) | (1 << 21), 391 /* equal to GRAPHIC_CM_P3_HLG_FULL */ 392 GRAPHIC_CM_DISPLAY_P3_HLG = 6 | (5 << 8) | (3 << 16) | (1 << 21), 393 /* equal to GRAPHIC_CM_P3_PQ_FULL */ 394 GRAPHIC_CM_DISPLAY_P3_PQ = 6 | (4 << 8) | (3 << 16) | (1 << 21), 395 /* COLORPRIMARIES_BT2020 | (TRANSFUNC_SRGB << 8) | (MATRIX_BT2020 << 16) | (RANGE_FULL << 21) */ 396 GRAPHIC_CM_DISPLAY_BT2020_SRGB = 4 | (2 << 8) | (4 << 16) | (1 << 21), 397 /* equal to GRAPHIC_CM_BT2020_HLG_FULL */ 398 GRAPHIC_CM_DISPLAY_BT2020_HLG = 4 | (5 << 8) | (4 << 16) | (1 << 21), 399 /* equal to GRAPHIC_CM_BT2020_PQ_FULL */ 400 GRAPHIC_CM_DISPLAY_BT2020_PQ = 4 | (4 << 8) | (4 << 16) | (1 << 21) 401 }; 402 403 using GraphicColorDataSpace = enum { 404 GRAPHIC_COLOR_DATA_SPACE_UNKNOWN = 0, 405 GRAPHIC_GAMUT_BT601 = 0x00000001, 406 GRAPHIC_GAMUT_BT709 = 0x00000002, 407 GRAPHIC_GAMUT_DCI_P3 = 0x00000003, 408 GRAPHIC_GAMUT_SRGB = 0x00000004, 409 GRAPHIC_GAMUT_ADOBE_RGB = 0x00000005, 410 GRAPHIC_GAMUT_DISPLAY_P3 = 0x00000006, 411 GRAPHIC_GAMUT_BT2020 = 0x00000007, 412 GRAPHIC_GAMUT_BT2100_PQ = 0x00000008, 413 GRAPHIC_GAMUT_BT2100_HLG = 0x00000009, 414 GRAPHIC_GAMUT_DISPLAY_BT2020 = 0x0000000a, 415 GRAPHIC_TRANSFORM_FUNC_UNSPECIFIED = 0x00000100, 416 GRAPHIC_TRANSFORM_FUNC_LINEAR = 0x00000200, 417 GRAPHIC_TRANSFORM_FUNC_SRGB = 0x00000300, 418 GRAPHIC_TRANSFORM_FUNC_SMPTE_170M = 0x00000400, 419 GRAPHIC_TRANSFORM_FUNC_GM2_2 = 0x00000500, 420 GRAPHIC_TRANSFORM_FUNC_GM2_6 = 0x00000600, 421 GRAPHIC_TRANSFORM_FUNC_GM2_8 = 0x00000700, 422 GRAPHIC_TRANSFORM_FUNC_ST2084 = 0x00000800, 423 GRAPHIC_TRANSFORM_FUNC_HLG = 0x00000900, 424 GRAPHIC_PRECISION_UNSPECIFIED = 0x00010000, 425 GRAPHIC_PRECISION_FULL = 0x00020000, 426 GRAPHIC_PRESION_LIMITED = 0x00030000, 427 GRAPHIC_PRESION_EXTENDED = 0x00040000, 428 GRAPHIC_BT601_SMPTE170M_FULL = GRAPHIC_GAMUT_BT601 | GRAPHIC_TRANSFORM_FUNC_SMPTE_170M | GRAPHIC_PRECISION_FULL, 429 GRAPHIC_BT601_SMPTE170M_LIMITED = GRAPHIC_GAMUT_BT601 | GRAPHIC_TRANSFORM_FUNC_SMPTE_170M | 430 GRAPHIC_PRESION_LIMITED, 431 GRAPHIC_BT709_LINEAR_FULL = GRAPHIC_GAMUT_BT709 | GRAPHIC_TRANSFORM_FUNC_LINEAR | GRAPHIC_PRECISION_FULL, 432 GRAPHIC_BT709_LINEAR_EXTENDED = GRAPHIC_GAMUT_BT709 | GRAPHIC_TRANSFORM_FUNC_LINEAR | GRAPHIC_PRESION_EXTENDED, 433 GRAPHIC_BT709_SRGB_FULL = GRAPHIC_GAMUT_BT709 | GRAPHIC_TRANSFORM_FUNC_SRGB | GRAPHIC_PRECISION_FULL, 434 GRAPHIC_BT709_SRGB_EXTENDED = GRAPHIC_GAMUT_BT709 | GRAPHIC_TRANSFORM_FUNC_SRGB | GRAPHIC_PRESION_EXTENDED, 435 GRAPHIC_BT709_SMPTE170M_LIMITED = GRAPHIC_GAMUT_BT709 | GRAPHIC_TRANSFORM_FUNC_SMPTE_170M | 436 GRAPHIC_PRESION_LIMITED, 437 GRAPHIC_DCI_P3_LINEAR_FULL = GRAPHIC_GAMUT_DCI_P3 | GRAPHIC_TRANSFORM_FUNC_LINEAR | GRAPHIC_PRECISION_FULL, 438 GRAPHIC_DCI_P3_GAMMA26_FULL = GRAPHIC_GAMUT_DCI_P3 | GRAPHIC_TRANSFORM_FUNC_GM2_6 | GRAPHIC_PRECISION_FULL, 439 GRAPHIC_DISPLAY_P3_LINEAR_FULL = GRAPHIC_GAMUT_DISPLAY_P3 | GRAPHIC_TRANSFORM_FUNC_LINEAR | GRAPHIC_PRECISION_FULL, 440 GRAPHIC_DCI_P3_SRGB_FULL = GRAPHIC_GAMUT_DCI_P3 | GRAPHIC_TRANSFORM_FUNC_SRGB | GRAPHIC_PRECISION_FULL, 441 GRAPHIC_ADOBE_RGB_GAMMA22_FULL = GRAPHIC_GAMUT_ADOBE_RGB | GRAPHIC_TRANSFORM_FUNC_GM2_2 | GRAPHIC_PRECISION_FULL, 442 GRAPHIC_BT2020_LINEAR_FULL = GRAPHIC_GAMUT_BT2020 | GRAPHIC_TRANSFORM_FUNC_LINEAR | GRAPHIC_PRECISION_FULL, 443 GRAPHIC_BT2020_SRGB_FULL = GRAPHIC_GAMUT_BT2020 | GRAPHIC_TRANSFORM_FUNC_SRGB | GRAPHIC_PRECISION_FULL, 444 GRAPHIC_BT2020_SMPTE170M_FULL = GRAPHIC_GAMUT_BT2020 | GRAPHIC_TRANSFORM_FUNC_SMPTE_170M | GRAPHIC_PRECISION_FULL, 445 GRAPHIC_BT2020_ST2084_FULL = GRAPHIC_GAMUT_BT2020 | GRAPHIC_TRANSFORM_FUNC_ST2084 | GRAPHIC_PRECISION_FULL, 446 GRAPHIC_BT2020_HLG_FULL = GRAPHIC_GAMUT_BT2020 | GRAPHIC_TRANSFORM_FUNC_HLG | GRAPHIC_PRECISION_FULL, 447 GRAPHIC_BT2020_ST2084_LIMITED = GRAPHIC_GAMUT_BT2020 | GRAPHIC_TRANSFORM_FUNC_ST2084 | GRAPHIC_PRESION_LIMITED, 448 }; 449 450 using GraphicTransformType = enum { 451 GRAPHIC_ROTATE_NONE = 0, /**< No rotation */ 452 GRAPHIC_ROTATE_90, /**< Rotation by 90 degrees */ 453 GRAPHIC_ROTATE_180, /**< Rotation by 180 degrees */ 454 GRAPHIC_ROTATE_270, /**< Rotation by 270 degrees */ 455 GRAPHIC_FLIP_H, /**< Flip horizontally */ 456 GRAPHIC_FLIP_V, /**< Flip vertically */ 457 GRAPHIC_FLIP_H_ROT90, /**< Flip horizontally and rotate 90 degrees */ 458 GRAPHIC_FLIP_V_ROT90, /**< Flip vertically and rotate 90 degrees */ 459 GRAPHIC_FLIP_H_ROT180, /**< Flip horizontally and rotate 180 degrees */ 460 GRAPHIC_FLIP_V_ROT180, /**< Flip vertically and rotate 180 degrees */ 461 GRAPHIC_FLIP_H_ROT270, /**< Flip horizontally and rotate 270 degrees */ 462 GRAPHIC_FLIP_V_ROT270, /**< Flip vertically and rotate 270 degrees */ 463 GRAPHIC_ROTATE_BUTT /**< Invalid operation */ 464 }; 465 466 using BufferRequestConfig = struct BufferRequestConfig { 467 int32_t width; 468 int32_t height; 469 int32_t strideAlignment; // output parameter, system components can ignore it 470 int32_t format; // GraphicPixelFormat 471 uint64_t usage; 472 int32_t timeout; 473 GraphicColorGamut colorGamut = GraphicColorGamut::GRAPHIC_COLOR_GAMUT_SRGB; 474 GraphicTransformType transform = GraphicTransformType::GRAPHIC_ROTATE_NONE; 475 bool operator ==(const struct BufferRequestConfig &config) const 476 { 477 return width == config.width && height == config.height && 478 format == config.format && usage == config.usage; 479 } 480 bool operator != (const struct BufferRequestConfig &config) const 481 { 482 return !(*this == config); 483 } 484 }; 485 486 using BufferFlushConfig = struct { 487 Rect damage; 488 int64_t timestamp; 489 int64_t desiredPresentTimestamp; 490 }; 491 492 using BufferFlushConfigWithDamages = struct BufferFlushConfigWithDamages { 493 std::vector<Rect> damages = {}; 494 int64_t timestamp; 495 int64_t desiredPresentTimestamp; 496 }; 497 498 using SceneType = enum { 499 SURFACE_SCENE_TYPE_EGL = 0, 500 SURFACE_SCENE_TYPE_MEDIA, 501 SURFACE_SCENE_TYPE_CAMERA, 502 SURFACE_SCENE_TYPE_CPU, 503 }; 504 505 using GraphicExtDataHandle = struct { 506 /**< Handle fd, -1 if not supported */ 507 int32_t fd; 508 /**< the number of reserved integer value */ 509 uint32_t reserveInts; 510 /**< the reserved data */ 511 int32_t reserve[0]; 512 }; 513 } // namespace OHOS 514 515 #endif // INTERFACES_INNERKITS_SURFACE_SURFACE_TYPE_H 516