1# NativeWindow 2 3 4## 概述 5 6NativeWindow模块提供图像buffer轮转功能,可用来和egl对接。开发者作为图像buffer的生产者,生产buffer并通过NativeWindow传递buffer供消费端去读取。 7 8**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 9 10**起始版本:** 8 11 12 13## 汇总 14 15 16### 文件 17 18| 名称 | 描述 | 19| -------- | -------- | 20| [external_window.h](external__window_8h.md) | 定义获取和使用NativeWindow的相关函数。 | 21 22 23### 结构体 24 25| 名称 | 描述 | 26| -------- | -------- | 27| struct [Region](_region.md) | 表示本地窗口OHNativeWindow需要更新内容的矩形区域(脏区)。 | 28| struct [OHHDRMetaData](_o_h_h_d_r_meta_data.md) | HDR元数据结构体定义。<br/>**弃用:** 从API version 10开始废弃,不再提供替代接口。 | 29| struct [OHExtDataHandle](_o_h_ext_data_handle.md) | 扩展数据句柄结构体定义。<br/>**弃用:** 从API version 10开始废弃,不再提供替代接口。 | 30 31 32### 类型定义 33 34| 名称 | 描述 | 35| -------- | -------- | 36| typedef struct [OHIPCParcel](#ohipcparcel) [OHIPCParcel](#ohipcparcel) | 提供对IPC序列化对象的访问功能。 | 37| typedef struct NativeWindow [OHNativeWindow](#ohnativewindow) | 提供对OHNativeWindow的访问功能。 | 38| typedef struct NativeWindowBuffer [OHNativeWindowBuffer](#ohnativewindowbuffer) | 提供对OHNativeWindowBuffer的访问功能。 | 39| typedef struct [Region](_region.md) [Region](#region) | 表示本地窗口OHNativeWindow需要更新内容的矩形区域(脏区)。 | 40| typedef enum [OHNativeErrorCode](#ohnativeerrorcode) [OHNativeErrorCode](#ohnativeerrorcode) | 接口错误码说明(仅用于查询)。 | 41| typedef enum [NativeWindowOperation](#nativewindowoperation) [NativeWindowOperation](#nativewindowoperation) | OH_NativeWindow_NativeWindowHandleOpt函数中的操作码。 | 42| typedef enum [OHScalingModeV2](#ohscalingmodev2) [OHScalingModeV2](#ohscalingmodev2) | 渲染缩放模式枚举。 | 43| typedef enum [OHSurfaceSource](#ohsurfacesource) [OHSurfaceSource](#ohsurfacesource) | 本地窗口内容来源类型枚举。 | 44 45### 枚举 46 47| 名称 | 描述 | 48| -------- | -------- | 49| [NativeWindowOperation](#nativewindowoperation-1) {<br/>SET_BUFFER_GEOMETRY, GET_BUFFER_GEOMETRY, GET_FORMAT, SET_FORMAT,<br/>GET_USAGE, SET_USAGE, SET_STRIDE, GET_STRIDE,<br/>SET_SWAP_INTERVAL, GET_SWAP_INTERVAL, SET_TIMEOUT, GET_TIMEOUT,<br/>SET_COLOR_GAMUT, GET_COLOR_GAMUT, SET_TRANSFORM, GET_TRANSFORM,<br/>SET_UI_TIMESTAMP, GET_BUFFERQUEUE_SIZE, SET_SOURCE_TYPE, GET_SOURCE_TYPE,<br/>SET_APP_FRAMEWORK_TYPE, GET_APP_FRAMEWORK_TYPE, SET_HDR_WHITE_POINT_BRIGHTNESS, SET_SDR_WHITE_POINT_BRIGHTNESS,<br/>SET_DESIRED_PRESENT_TIMESTAMP = 24<br/>} | OH_NativeWindow_NativeWindowHandleOpt函数中的操作码。 | 50| [OHScalingMode](#ohscalingmode) { OH_SCALING_MODE_FREEZE = 0, OH_SCALING_MODE_SCALE_TO_WINDOW, OH_SCALING_MODE_SCALE_CROP, OH_SCALING_MODE_NO_SCALE_CROP } | 缩放模式Scaling Mode。<br/>**弃用:** 从API version 10开始废弃,不再提供替代接口。 | 51| [OHScalingModeV2](#ohscalingmodev2-1) {<br/>OH_SCALING_MODE_FREEZE_V2 = 0, OH_SCALING_MODE_SCALE_TO_WINDOW_V2, OH_SCALING_MODE_SCALE_CROP_V2, OH_SCALING_MODE_NO_SCALE_CROP_V2,<br/>OH_SCALING_MODE_SCALE_FIT_V2<br/>} | 渲染缩放模式枚举。 | 52| [OHHDRMetadataKey](#ohhdrmetadatakey) {<br/>OH_METAKEY_RED_PRIMARY_X = 0, OH_METAKEY_RED_PRIMARY_Y = 1, OH_METAKEY_GREEN_PRIMARY_X = 2, OH_METAKEY_GREEN_PRIMARY_Y = 3,<br/>OH_METAKEY_BLUE_PRIMARY_X = 4, OH_METAKEY_BLUE_PRIMARY_Y = 5, OH_METAKEY_WHITE_PRIMARY_X = 6, OH_METAKEY_WHITE_PRIMARY_Y = 7,<br/>OH_METAKEY_MAX_LUMINANCE = 8, OH_METAKEY_MIN_LUMINANCE = 9, OH_METAKEY_MAX_CONTENT_LIGHT_LEVEL = 10, OH_METAKEY_MAX_FRAME_AVERAGE_LIGHT_LEVEL = 11,<br/>OH_METAKEY_HDR10_PLUS = 12, OH_METAKEY_HDR_VIVID = 13<br/>} | 枚举HDR元数据关键字。<br/>**弃用:** 从API version 10开始废弃,不再提供替代接口。 | 53| [OHNativeErrorCode](#ohnativeerrorcode-1) {<br/>NATIVE_ERROR_OK = 0, NATIVE_ERROR_INVALID_ARGUMENTS = 40001000, NATIVE_ERROR_NO_PERMISSION = 40301000, NATIVE_ERROR_NO_BUFFER = 40601000,<br/>NATIVE_ERROR_NO_CONSUMER = 41202000, NATIVE_ERROR_NOT_INIT = 41203000, NATIVE_ERROR_CONSUMER_CONNECTED = 41206000, NATIVE_ERROR_BUFFER_STATE_INVALID = 41207000,<br/>NATIVE_ERROR_BUFFER_IN_CACHE = 41208000, NATIVE_ERROR_BUFFER_QUEUE_FULL = 41209000, NATIVE_ERROR_BUFFER_NOT_IN_CACHE = 41210000,NATIVE_ERROR_CONSUMER_DISCONNECTED = 41211000,NATIVE_ERROR_CONSUMER_NO_LISTENER_REGISTERED = 41212000, NATIVE_ERROR_UNSUPPORTED = 50102000,<br/>NATIVE_ERROR_UNKNOWN = 50002000, NATIVE_ERROR_HDI_ERROR = 50007000,NATIVE_ERROR_BINDER_ERROR = 50401000,NATIVE_ERROR_EGL_STATE_UNKNOWN = 60001000, NATIVE_ERROR_EGL_API_FAILED = 60002000<br/>} | 接口错误码说明(仅用于查询)。 | 54| [OHSurfaceSource](#ohsurfacesource-1) {<br/>OH_SURFACE_SOURCE_DEFAULT = 0, OH_SURFACE_SOURCE_UI, OH_SURFACE_SOURCE_GAME, OH_SURFACE_SOURCE_CAMERA,OH_SURFACE_SOURCE_VIDEO<br/>} | 本地窗口内容来源类型枚举。 | 55 56### 函数 57 58| 名称 | 描述 | 59| -------- | -------- | 60| [OHNativeWindow](#ohnativewindow) \* [OH_NativeWindow_CreateNativeWindow](#oh_nativewindow_createnativewindow) (void \*pSurface) | 创建OHNativeWindow实例,每次调用都会产生一个新的OHNativeWindow实例。 说明:此接口不可用,可通过**OH_NativeImage_AcquireNativeWindow**创建,或通过XComponent创建。 | 61| void [OH_NativeWindow_DestroyNativeWindow](#oh_nativewindow_destroynativewindow) ([OHNativeWindow](#ohnativewindow) \*window) | 将OHNativeWindow对象的引用计数减1,当引用计数为0的时候,该OHNativeWindow对象会被析构掉。 | 62| [OHNativeWindowBuffer](#ohnativewindowbuffer) \* [OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer](#oh_nativewindow_createnativewindowbufferfromsurfacebuffer) (void \*pSurfaceBuffer) | 创建OHNativeWindowBuffer实例,每次调用都会产生一个新的OHNativeWindowBuffer实例。 此接口从API version 12开始废弃,使用[OH_NativeWindow_CreateNativeWindowBufferFromNativeBuffer](#oh_nativewindow_createnativewindowbufferfromnativebuffer)替代。 | 63| [OHNativeWindowBuffer](#ohnativewindowbuffer) \* [OH_NativeWindow_CreateNativeWindowBufferFromNativeBuffer](#oh_nativewindow_createnativewindowbufferfromnativebuffer) (OH_NativeBuffer \*nativeBuffer) | 创建OHNativeWindowBuffer实例,每次调用都会产生一个新的OHNativeWindowBuffer实例。 | 64| void [OH_NativeWindow_DestroyNativeWindowBuffer](#oh_nativewindow_destroynativewindowbuffer) ([OHNativeWindowBuffer](#ohnativewindowbuffer) \*buffer) | 将OHNativeWindowBuffer对象的引用计数减1,当引用计数为0的时候,该OHNativeWindowBuffer对象会被析构掉。 | 65| int32_t [OH_NativeWindow_NativeWindowRequestBuffer](#oh_nativewindow_nativewindowrequestbuffer) ([OHNativeWindow](#ohnativewindow) \*window, [OHNativeWindowBuffer](#ohnativewindowbuffer) \*\*buffer, int \*fenceFd) | 通过OHNativeWindow对象申请一块OHNativeWindowBuffer,用以内容生产。 | 66| int32_t [OH_NativeWindow_NativeWindowFlushBuffer](#oh_nativewindow_nativewindowflushbuffer) ([OHNativeWindow](#ohnativewindow) \*window, [OHNativeWindowBuffer](#ohnativewindowbuffer) \*buffer, int fenceFd, [Region](_region.md) region) | 通过OHNativeWindow将生产好内容的OHNativeWindowBuffer放回到Buffer队列中,用以内容消费。 | 67| int32_t [OH_NativeWindow_GetLastFlushedBuffer](#oh_nativewindow_getlastflushedbuffer) ([OHNativeWindow](#ohnativewindow) \*window, [OHNativeWindowBuffer](#ohnativewindowbuffer) \*\*buffer, int \*fenceFd, float matrix[16]) | 从OHNativeWindow获取上次送回到buffer队列中的OHNativeWindowBuffer。 | 68| int32_t [OH_NativeWindow_NativeWindowAbortBuffer](#oh_nativewindow_nativewindowabortbuffer) ([OHNativeWindow](#ohnativewindow) \*window, [OHNativeWindowBuffer](#ohnativewindowbuffer) \*buffer) | 通过OHNativeWindow将之前申请出来的OHNativeWindowBuffer返还到Buffer队列中,供下次再申请。 | 69| int32_t [OH_NativeWindow_NativeWindowHandleOpt](#oh_nativewindow_nativewindowhandleopt) ([OHNativeWindow](#ohnativewindow) \*window, int code,...) | 设置/获取OHNativeWindow的属性,包括设置/获取宽高、内容格式等。 | 70| BufferHandle \* [OH_NativeWindow_GetBufferHandleFromNative](#oh_nativewindow_getbufferhandlefromnative) ([OHNativeWindowBuffer](#ohnativewindowbuffer) \*buffer) | 通过OHNativeWindowBuffer获取该buffer的BufferHandle指针。 | 71| int32_t [OH_NativeWindow_NativeObjectReference](#oh_nativewindow_nativeobjectreference) (void \*obj) | 增加一个NativeObject的引用计数。 | 72| int32_t [OH_NativeWindow_NativeObjectUnreference](#oh_nativewindow_nativeobjectunreference) (void \*obj) | 减少一个NativeObject的引用计数,当引用计数减少为0时,该NativeObject将被析构掉。 | 73| int32_t [OH_NativeWindow_GetNativeObjectMagic](#oh_nativewindow_getnativeobjectmagic) (void \*obj) | 获取NativeObject的MagicId。 | 74| int32_t [OH_NativeWindow_NativeWindowSetScalingMode](#oh_nativewindow_nativewindowsetscalingmode) ([OHNativeWindow](#ohnativewindow) \*window, uint32_t sequence, [OHScalingMode](#ohscalingmode) scalingMode) | 设置OHNativeWindow的ScalingMode。<br/>**弃用:** 从API version 10开始废弃,不再提供替代接口。 | 75| int32_t [OH_NativeWindow_NativeWindowSetMetaData](#oh_nativewindow_nativewindowsetmetadata) ([OHNativeWindow](#ohnativewindow) \*window, uint32_t sequence, int32_t size, const [OHHDRMetaData](_o_h_h_d_r_meta_data.md) \*metaData) | 设置OHNativeWindow的元数据。<br/>**弃用:** 从API version 10开始废弃,不再提供替代接口。 | 76| int32_t [OH_NativeWindow_NativeWindowSetMetaDataSet](#oh_nativewindow_nativewindowsetmetadataset) ([OHNativeWindow](#ohnativewindow) \*window, uint32_t sequence, [OHHDRMetadataKey](#ohhdrmetadatakey) key, int32_t size, const uint8_t \*metaData) | 设置OHNativeWindow的元数据集。<br/>**弃用:** 从API version 10开始废弃,不再提供替代接口。 | 77| int32_t [OH_NativeWindow_NativeWindowSetTunnelHandle](#oh_nativewindow_nativewindowsettunnelhandle) ([OHNativeWindow](#ohnativewindow) \*window, const [OHExtDataHandle](_o_h_ext_data_handle.md) \*handle) | 设置OHNativeWindow的TunnelHandle。<br/>**弃用:** 从API version 10开始废弃,不再提供替代接口。 | 78| int32_t [OH_NativeWindow_NativeWindowAttachBuffer](#oh_nativewindow_nativewindowattachbuffer) ([OHNativeWindow](#ohnativewindow) \*window, [OHNativeWindowBuffer](#ohnativewindowbuffer) \*buffer) | 将OHNativeWindowBuffer添加进OHNativeWindow中。 | 79| int32_t [OH_NativeWindow_NativeWindowDetachBuffer](#oh_nativewindow_nativewindowdetachbuffer) ([OHNativeWindow](#ohnativewindow) \*window, [OHNativeWindowBuffer](#ohnativewindowbuffer) \*buffer) | 将OHNativeWindowBuffer从OHNativeWindow中分离。 | 80| int32_t [OH_NativeWindow_GetSurfaceId](#oh_nativewindow_getsurfaceid) ([OHNativeWindow](#ohnativewindow) \*window, uint64_t \*surfaceId) | 通过OHNativeWindow获取对应的surfaceId。 | 81| int32_t [OH_NativeWindow_CreateNativeWindowFromSurfaceId](#oh_nativewindow_createnativewindowfromsurfaceid) (uint64_t surfaceId, [OHNativeWindow](#ohnativewindow) \*\*window) | 通过surfaceId创建对应的OHNativeWindow。 | 82| int32_t [OH_NativeWindow_NativeWindowSetScalingModeV2](#oh_nativewindow_nativewindowsetscalingmodev2) ([OHNativeWindow](#ohnativewindow) \*window, [OHScalingModeV2](#ohscalingmodev2) scalingMode) | 设置OHNativeWindow的渲染缩放模式。 | 83| int32_t [OH_NativeWindow_GetLastFlushedBufferV2](#oh_nativewindow_getlastflushedbufferv2) ([OHNativeWindow](#ohnativewindow) \*window, [OHNativeWindowBuffer](#ohnativewindowbuffer) \*\*buffer, int \*fenceFd, float matrix[16]) | 从OHNativeWindow获取上次送回到buffer队列中的OHNativeWindowBuffer, 与OH_NativeWindow_GetLastFlushedBuffer的差异在于matrix不同。 | 84| void [OH_NativeWindow_SetBufferHold](#oh_nativewindow_setbufferhold) ([OHNativeWindow](#ohnativewindow) \*window) | 提前缓存一帧buffer,且缓存的这一帧延迟一帧上屏显示,以此抵消后续一次超长帧丢帧。 | 85| int32_t [OH_NativeWindow_WriteToParcel](#oh_nativewindow_writetoparcel) ([OHNativeWindow](#ohnativewindow) \*window, [OHIPCParcel](#ohipcparcel) \*parcel) | 将窗口对象写入IPC序列化对象中。 | 86| int32_t [OH_NativeWindow_ReadFromParcel](#oh_nativewindow_readfromparcel) ([OHIPCParcel](#ohipcparcel) \*parcel, [OHNativeWindow](#ohnativewindow) \*\*window) | 从IPC序列化对象中读取窗口对象。 | 87| int32_t [OH_NativeWindow_SetColorSpace](#oh_nativewindow_setcolorspace) ([OHNativeWindow](#ohnativewindow) \*window, [OH_NativeBuffer_ColorSpace](_o_h___native_buffer.md#oh_nativebuffer_colorspace) colorSpace) | 为OHNativeWindow设置颜色空间属性。 | 88| int32_t [OH_NativeWindow_GetColorSpace](#oh_nativewindow_getcolorspace) ([OHNativeWindow](#ohnativewindow) \*window, [OH_NativeBuffer_ColorSpace](_o_h___native_buffer.md#oh_nativebuffer_colorspace) \*colorSpace) | 获取OHNativeWindow颜色空间属性。 | 89| int32_t [OH_NativeWindow_SetMetadataValue](#oh_nativewindow_setmetadatavalue) ([OHNativeWindow](#ohnativewindow) \*window, [OH_NativeBuffer_MetadataKey](_o_h___native_buffer.md#oh_nativebuffer_metadatakey) metadataKey, int32_t size, uint8_t \*metaData) | 为OHNativeWindow设置元数据属性值。 | 90| int32_t [OH_NativeWindow_GetMetadataValue](#oh_nativewindow_getmetadatavalue) ([OHNativeWindow](#ohnativewindow) \*window, [OH_NativeBuffer_MetadataKey](_o_h___native_buffer.md#oh_nativebuffer_metadatakey) metadataKey, int32_t \*size, uint8_t \*\*metaData) | 获取OHNativeWindow元数据属性值。 | 91 92## 类型定义说明 93 94### OHSurfaceSource 95 96``` 97typedef enum OHSurfaceSource OHSurfaceSource 98``` 99 100**描述** 101 102本地窗口内容来源类型枚举。 103 104**起始版本:** 12 105 106### OHIPCParcel 107 108``` 109typedef struct OHIPCParcel OHIPCParcel 110``` 111 112**描述** 113 114提供对IPC序列化对象的访问功能。 115 116**起始版本:** 12 117 118### NativeWindowOperation 119 120``` 121typedef enum NativeWindowOperation NativeWindowOperation 122``` 123 124**描述** 125 126OH_NativeWindow_NativeWindowHandleOpt函数中的操作码。 127 128**起始版本:** 8 129 130### OHNativeErrorCode 131 132``` 133typedef enum OHNativeErrorCode OHNativeErrorCode 134``` 135 136**描述** 137 138接口错误码说明(仅用于查询)。 139 140**起始版本:** 12 141 142 143### OHNativeWindow 144 145``` 146typedef struct NativeWindow OHNativeWindow 147``` 148 149**描述** 150 151提供对OHNativeWindow的访问功能。 152 153**起始版本:** 8 154 155 156### OHNativeWindowBuffer 157 158``` 159typedef struct NativeWindowBuffer OHNativeWindowBuffer 160``` 161 162**描述** 163 164提供对OHNativeWindowBuffer的访问功能。 165 166**起始版本:** 8 167 168### OHScalingModeV2 169 170``` 171typedef enum OHScalingModeV2 OHScalingModeV2 172``` 173**描述** 174 175渲染缩放模式枚举。 176 177**起始版本:** 12 178 179 180 181### Region 182 183``` 184typedef struct Region Region 185``` 186 187**描述** 188 189表示本地窗口OHNativeWindow需要更新内容的矩形区域(脏区)。 190 191**起始版本:** 8 192 193 194## 枚举类型说明 195 196### OHSurfaceSource 197 198``` 199enum OHSurfaceSource 200``` 201 202**描述** 203 204本地窗口内容来源类型枚举。 205 206**起始版本:** 12 207 208| 枚举值 | 描述 | 209| -------- | -------- | 210| OH_SURFACE_SOURCE_DEFAULT | 窗口内容默认来源。 | 211| OH_SURFACE_SOURCE_UI | 窗口内容来自于UI。 | 212| OH_SURFACE_SOURCE_GAME | 窗口内容来自于游戏。 | 213| OH_SURFACE_SOURCE_CAMERA | 窗口内容来自于相机。 | 214| OH_SURFACE_SOURCE_VIDEO | 窗口内容来自于视频。 | 215 216### OHNativeErrorCode 217 218``` 219enum OHNativeErrorCode 220``` 221**描述** 222 223接口错误码说明(仅用于查询)。 224 225**起始版本:** 12 226 227| 枚举值 | 描述 | 228| -------- | -------- | 229| NATIVE_ERROR_OK | 成功 | 230| NATIVE_ERROR_INVALID_ARGUMENTS | 入参无效 | 231| NATIVE_ERROR_NO_PERMISSION | 无权限操作 | 232| NATIVE_ERROR_NO_BUFFER | 无空闲可用的buffer | 233| NATIVE_ERROR_NO_CONSUMER | 消费端不存在 | 234| NATIVE_ERROR_NOT_INIT | 未初始化 | 235| NATIVE_ERROR_CONSUMER_CONNECTED | 消费端已经被连接 | 236| NATIVE_ERROR_BUFFER_STATE_INVALID | buffer状态不符合预期 | 237| NATIVE_ERROR_BUFFER_IN_CACHE | buffer已在缓存队列中 | 238| NATIVE_ERROR_BUFFER_QUEUE_FULL | 队列已满 | 239| NATIVE_ERROR_BUFFER_NOT_IN_CACHE | buffer不在缓存队列中 | 240| NATIVE_ERROR_CONSUMER_DISCONNECTED | 消费端已经被断开连接 | 241| NATIVE_ERROR_CONSUMER_NO_LISTENER_REGISTERED | 消费端未注册listener回调函数 | 242| NATIVE_ERROR_UNSUPPORTED | 当前设备或平台不支持 | 243| NATIVE_ERROR_UNKNOWN | 未知错误,请查看日志 | 244| NATIVE_ERROR_HDI_ERROR | HDI接口调用失败 | 245| NATIVE_ERROR_BINDER_ERROR | 跨进程通信失败 | 246| NATIVE_ERROR_EGL_STATE_UNKNOWN | egl环境状态异常 | 247| NATIVE_ERROR_EGL_API_FAILED | egl接口调用失败 | 248 249 250### NativeWindowOperation 251 252``` 253enum NativeWindowOperation 254``` 255 256**描述** 257 258OH_NativeWindow_NativeWindowHandleOpt函数中的操作码。 259 260**起始版本:** 8 261 262| 枚举值 | 描述 | 263| -------- | -------- | 264| SET_BUFFER_GEOMETRY | 设置本地窗口缓冲区几何图形, 函数中的可变参数是 [输入] int32_t width,[输入] int32_t height。 | 265| GET_BUFFER_GEOMETRY | 获取本地窗口缓冲区几何图形, 函数中的可变参数是 [输出] int32_t \*height, [输出] int32_t \*width。 | 266| GET_FORMAT | 获取本地窗口缓冲区格式, 函数中的可变参数是 [输出] int32_t \*format,取值具体可见[OH_NativeBuffer_Format](_o_h___native_buffer.md#oh_nativebuffer_format-1)枚举值。 | 267| SET_FORMAT | 设置本地窗口缓冲区格式, 函数中的可变参数是 [输入] int32_t format,取值具体可见[OH_NativeBuffer_Format](_o_h___native_buffer.md#oh_nativebuffer_format-1)枚举值。 | 268| GET_USAGE | 获取本地窗口读写方式, 函数中的可变参数是 [输出] uint64_t \*usage,取值具体可见[OH_NativeBuffer_Usage](_o_h___native_buffer.md#oh_nativebuffer_usage-1)枚举值。 | 269| SET_USAGE | 设置本地窗口缓冲区读写方式, 函数中的可变参数是 [输入] uint64_t usage,取值具体可见[OH_NativeBuffer_Usage](_o_h___native_buffer.md#oh_nativebuffer_usage-1)枚举值。 | 270| SET_STRIDE | 设置本地窗口缓冲区步幅, 函数中的可变参数是 [输入] int32_t stride,单位为Byte。 | 271| GET_STRIDE | 获取本地窗口缓冲区步幅, 函数中的可变参数是 [输出] int32_t \*stride,单位为Byte。 | 272| SET_SWAP_INTERVAL | 设置本地窗口缓冲区交换间隔, 函数中的可变参数是 [输入] int32_t interval。 | 273| GET_SWAP_INTERVAL | 获取本地窗口缓冲区交换间隔, 函数中的可变参数是 [输出] int32_t \*interval。 | 274| SET_TIMEOUT | 设置请求本地窗口请求缓冲区的超时等待时间,未手动设置时默认值为3000毫秒,函数中的可变参数是 [输入] int32_t timeout,单位为毫秒。 | 275| GET_TIMEOUT | 获取请求本地窗口请求缓冲区的超时等待时间,未手动设置时默认值为3000毫秒,函数中的可变参数是 [输出] int32_t \*timeout,单位为毫秒。 | 276| SET_COLOR_GAMUT | 设置本地窗口缓冲区色彩空间, 函数中的可变参数是 [输入] int32_t colorGamut,取值具体可见[OH_NativeBuffer_ColorGamut](_o_h___native_buffer.md#oh_nativebuffer_colorgamut-1)枚举值。 | 277| GET_COLOR_GAMUT | 获取本地窗口缓冲区色彩空间, 函数中的可变参数是 [输出] int32_t \*colorGamut,取值具体可见[OH_NativeBuffer_ColorGamut](_o_h___native_buffer.md#oh_nativebuffer_colorgamut-1)枚举值。 | 278| SET_TRANSFORM | 设置本地窗口缓冲区变换, 函数中的可变参数是 [输入] int32_t transform,取值具体可见[OH_NativeBuffer_TransformType](_o_h___native_buffer.md#oh_nativebuffer_transformtype-1)枚举值。 | 279| GET_TRANSFORM | 获取本地窗口缓冲区变换, 函数中的可变参数是 [输出] int32_t \*transform,取值具体可见[OH_NativeBuffer_TransformType](_o_h___native_buffer.md#oh_nativebuffer_transformtype-1)枚举值。 | 280| SET_UI_TIMESTAMP | 设置本地窗口缓冲区UI时间戳, 函数中的可变参数是 [输入] uint64_t uiTimestamp。 | 281| GET_BUFFERQUEUE_SIZE<sup>12+</sup> | 获取内存队列大小, 函数中的可变参数是 [输出] int32_t \*size. | 282| SET_SOURCE_TYPE<sup>12+</sup> | 设置本地窗口内容来源, 函数中的可变参数是 [输入] int32_t sourceType, 取值具体可见[OHSurfaceSource](#ohsurfacesource)枚举值。 | 283| GET_SOURCE_TYPE<sup>12+</sup> | 获取本地窗口内容来源, 函数中的可变参数是 [输出] int32_t \*sourceType, 取值具体可见[OHSurfaceSource](#ohsurfacesource)枚举值。 | 284| SET_APP_FRAMEWORK_TYPE<sup>12+</sup> | 设置本地窗口应用框架名称, 函数中的可变参数是 [输入] char\* frameworkType, 最大支持64字节。 | 285| GET_APP_FRAMEWORK_TYPE<sup>12+</sup> | 获取本地窗口应用框架名称, 函数中的可变参数是 [输出] char\* frameworkType。 | 286| SET_HDR_WHITE_POINT_BRIGHTNESS<sup>12+</sup> | 设置HDR白点亮度, 函数中的可变参数是 [输入] float brightness. 取值范围为[0.0f, 1.0f]。 | 287| SET_SDR_WHITE_POINT_BRIGHTNESS<sup>12+</sup> | 设置SDR白点亮度, 函数中的可变参数是 [输入] float brightness. 取值范围为[0.0f, 1.0f]。 | 288| SET_DESIRED_PRESENT_TIMESTAMP<sup>13+</sup> | 设置本地窗口缓冲区期望上屏时间的时间戳。 当且仅当RenderService为本地窗口的消费者时,该时间戳生效。 本操作执行后需要配合调用[OH_NativeWindow_NativeWindowFlushBuffer](#oh_nativewindow_nativewindowflushbuffer)生效。 生产者下一次放入队列的buffer,达到该期望上屏时间后,才会被RenderService消费并上屏。 如果buffer队列中存在多个生产者放入的buffer,都设置了desiredPresentTimestamp并已达到期望上屏时间,则较早入队的buffer将被消费者丢弃回队列。 如果期望上屏时间大于消费者提供的时间 1 秒以上,则该期望上屏时间戳将被忽略。 函数中的可变参数是 [输入] int64_t desiredPresentTimestamp,取值范围大于0,应由std::chrono::steady_clock标准库时钟生成,且单位为纳秒。 | 289 290### OHHDRMetadataKey 291 292``` 293enum OHHDRMetadataKey 294``` 295 296**描述** 297 298枚举HDR元数据关键字。 299 300**起始版本:** 9 301 302**弃用:** 从API version 10开始废弃,不再提供替代接口。 303 304| 枚举值 | 描述 | 305| -------- | -------- | 306| OH_METAKEY_RED_PRIMARY_X | 红基色X坐标。 | 307| OH_METAKEY_RED_PRIMARY_Y | 红基色Y坐标。 | 308| OH_METAKEY_GREEN_PRIMARY_X | 绿基色X坐标。 | 309| OH_METAKEY_GREEN_PRIMARY_Y | 绿基色Y坐标。 | 310| OH_METAKEY_BLUE_PRIMARY_X | 蓝基色X坐标。 | 311| OH_METAKEY_BLUE_PRIMARY_Y | 蓝基色Y坐标。 | 312| OH_METAKEY_WHITE_PRIMARY_X | 白点X坐标。 | 313| OH_METAKEY_WHITE_PRIMARY_Y | 白点Y坐标。 | 314| OH_METAKEY_MAX_LUMINANCE | 最大的光亮度。 | 315| OH_METAKEY_MIN_LUMINANCE | 最小的光亮度。 | 316| OH_METAKEY_MAX_CONTENT_LIGHT_LEVEL | 最大的内容亮度水平。 | 317| OH_METAKEY_MAX_FRAME_AVERAGE_LIGHT_LEVEL | 最大的帧平均亮度水平。 | 318| OH_METAKEY_HDR10_PLUS | HDR10 Plus。 | 319| OH_METAKEY_HDR_VIVID | Vivid。 | 320 321 322### OHScalingMode 323 324``` 325enum OHScalingMode 326``` 327 328**描述** 329 330缩放模式 Scaling Mode。 331 332**起始版本:** 9 333 334**弃用:** 从API version 10开始废弃,不再提供替代接口。 335 336| 枚举值 | 描述 | 337| -------- | -------- | 338| OH_SCALING_MODE_FREEZE | 在接收到窗口大小的缓冲区之前,不可以更新窗口内容。 | 339| OH_SCALING_MODE_SCALE_TO_WINDOW | 缓冲区在二维中缩放以匹配窗口大小。 | 340| OH_SCALING_MODE_SCALE_CROP | 缓冲区被统一缩放,使得缓冲区的较小尺寸与窗口大小匹配。 | 341| OH_SCALING_MODE_NO_SCALE_CROP | 窗口被裁剪为缓冲区裁剪矩形的大小,裁剪矩形之外的像素被视为完全透明。 | 342 343 344### OHScalingModeV2 345 346``` 347enum OHScalingModeV2 348``` 349**描述** 350渲染缩放模式枚举。 351 352**起始版本:** 12 353 354| 枚举值 | 描述 | 355| -------- | -------- | 356| OH_SCALING_MODE_FREEZE_V2 | 冻结窗口,在接收到和窗口大小相等的缓冲区之前,窗口内容不进行更新。 | 357| OH_SCALING_MODE_SCALE_TO_WINDOW_V2 | 缓冲区进行拉伸缩放以匹配窗口大小。| 358| OH_SCALING_MODE_SCALE_CROP_V2 | 缓冲区按原比例缩放,使得缓冲区的较小边与窗口匹配, 较长边超出窗口部分被视为透明。 | 359| OH_SCALING_MODE_NO_SCALE_CROP_V2 | 按窗口大小将缓冲区裁剪,裁剪矩形之外的像素被视为完全透明。 | 360| OH_SCALING_MODE_SCALE_FIT_V2 | 缓冲区按原比例缩放。优先显示所有缓冲区内容。 如果比例与窗口比例不同,用背景颜色填充窗口的未填充区域。<!--Del-->开发板和<!--DelEnd-->模拟器不支持该模式。| 361 362 363## 函数说明 364 365### OH_NativeWindow_SetColorSpace() 366 367``` 368int32_t OH_NativeWindow_SetColorSpace (OHNativeWindow *window, OH_NativeBuffer_ColorSpace colorSpace ) 369``` 370 371**描述** 372 373为OHNativeWindow设置颜色空间属性。 374本接口为非线程安全类型接口。 375 376**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 377 378**起始版本:** 12 379 380**参数:** 381 382| 名称 | 描述 | 383| -------- | -------- | 384| window | 一个指向[OHNativeWindow](#ohnativewindow)的结构体实例的指针。 | 385| colorSpace | 为OHNativeWindow设置的颜色空间,其值从[OH_NativeBuffer_ColorSpace](_o_h___native_buffer.md#oh_nativebuffer_colorspace)获取。 | 386 387**返回:** 388 389返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](_o_h___native_buffer.md#ohnativeerrorcode)。 390 391 392### OH_NativeWindow_SetMetadataValue() 393 394``` 395int32_t OH_NativeWindow_SetMetadataValue (OHNativeWindow *window, OH_NativeBuffer_MetadataKey metadataKey, int32_t size, uint8_t * metaData ) 396``` 397 398**描述** 399 400为OHNativeWindow设置元数据属性值。 401本接口为非线程安全类型接口。 402 403**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 404 405**起始版本:** 12 406 407**参数:** 408 409| 名称 | 描述 | 410| -------- | -------- | 411| window | 一个指向[OHNativeWindow](#ohnativewindow)的结构体实例的指针。 | 412| metadataKey | OHNativeWindow的元数据类型,其值从[OH_NativeBuffer_MetadataKey](_o_h___native_buffer.md#oh_nativebuffer_metadatakey)获取。 | 413| size | uint8_t向量的大小,其取值范围见[OH_NativeBuffer_MetadataKey](_o_h___native_buffer.md#oh_nativebuffer_metadatakey)。 | 414| metaDate | 指向uint8_t向量的指针。 | 415 416**返回:** 417 418返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](_o_h___native_buffer.md#ohnativeerrorcode)。 419 420### OH_NativeWindow_GetColorSpace() 421 422``` 423int32_t OH_NativeWindow_GetColorSpace (OHNativeWindow *window, OH_NativeBuffer_ColorSpace *colorSpace ) 424``` 425 426**描述** 427 428获取OHNativeWindow颜色空间属性。 429本接口为非线程安全类型接口。 430 431**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 432 433**起始版本:** 12 434 435**参数:** 436 437| 名称 | 描述 | 438| -------- | -------- | 439| window | 一个指向[OHNativeWindow](#ohnativewindow)的结构体实例的指针。 | 440| colorSpace | 为OHNativeWindow设置的颜色空间,其值从[OH_NativeBuffer_ColorSpace](_o_h___native_buffer.md#oh_nativebuffer_colorspace)获取。 | 441 442**返回:** 443 444返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](_o_h___native_buffer.md#ohnativeerrorcode)。 445 446 447### OH_NativeWindow_GetMetadataValue() 448 449``` 450int32_t OH_NativeWindow_GetMetadataValue (OHNativeWindow *window, OH_NativeBuffer_MetadataKey metadataKey, int32_t *size, uint8_t **metaData ) 451``` 452 453**描述** 454 455获取OHNativeWindow元数据属性值。 456本接口为非线程安全类型接口。 457 458**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 459 460**起始版本:** 12 461 462**参数:** 463 464| 名称 | 描述 | 465| -------- | -------- | 466| window | 一个指向[OHNativeWindow](#ohnativewindow)的结构体实例的指针。 | 467| metadataKey | OHNativeWindow的元数据类型,其值从[OH_NativeBuffer_MetadataKey](_o_h___native_buffer.md#oh_nativebuffer_metadatakey)获取。 | 468| size | uint8_t向量的大小,其取值范围见[OH_NativeBuffer_MetadataKey](_o_h___native_buffer.md#oh_nativebuffer_metadatakey)。 | 469| metaDate | 指向uint8_t向量的二级指针。 | 470 471**返回:** 472 473返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](_o_h___native_buffer.md#ohnativeerrorcode)。 474 475 476### OH_NativeWindow_WriteToParcel() 477 478``` 479int32_t OH_NativeWindow_WriteToParcel (OHNativeWindow *window, OHIPCParcel *parcel ) 480``` 481 482**描述** 483 484将窗口对象写入IPC序列化对象中。 485本接口为非线程安全类型接口。 486 487**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 488 489**起始版本:** 12 490 491**参数:** 492 493| 名称 | 描述 | 494| -------- | -------- | 495| window | 一个指向[OHNativeWindow](#ohnativewindow)的结构体实例的指针。 | 496| parcel | 一个指向[OHIPCParcel](#ohipcparcel)的结构体实例的指针。 | 497 498**返回:** 499 500返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 501 502 503### OH_NativeWindow_ReadFromParcel() 504 505``` 506int32_t OH_NativeWindow_ReadFromParcel (OHIPCParcel *parcel, OHNativeWindow **window ) 507``` 508 509**描述** 510 511从IPC序列化对象中读取窗口对象。 512本接口为非线程安全类型接口。 513 514**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 515 516**起始版本:** 12 517 518**参数:** 519 520| 名称 | 描述 | 521| -------- | -------- | 522| parcel | 一个指向[OHIPCParcel](#ohipcparcel)的结构体实例的指针。 | 523| window | 一个指向[OHNativeWindow](#ohnativewindow)的结构体实例的二级指针。 | 524 525**返回:** 526 527返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 528 529 530 531### OH_NativeWindow_GetLastFlushedBufferV2() 532 533``` 534int32_t OH_NativeWindow_GetLastFlushedBufferV2 (OHNativeWindow *window, OHNativeWindowBuffer **buffer, int *fenceFd, float matrix[16] ) 535``` 536 537**描述** 538 539从OHNativeWindow获取上次送回到buffer队列中的OHNativeWindowBuffer, 与OH_NativeWindow_GetLastFlushedBuffer的差异在于matrix不同。 540本接口需要与OH_NativeWindow_NativeObjectUnreference接口配合使用,否则会存在内存泄露。 541本接口为非线程安全类型接口。 542 543**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 544 545**起始版本:** 12 546 547**参数:** 548 549| 名称 | 描述 | 550| -------- | -------- | 551| window | 一个OHNativeWindow的结构体实例的指针。 | 552| buffer | 一个OHNativeWindowBuffer结构体指针的指针。 | 553| fenceFd | 一个文件描述符的指针。 | 554| matrix | 表示检索到的4\*4变换矩阵。 | 555 556**返回:** 557 558返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 559 560 561 562### OH_NativeWindow_SetBufferHold() 563 564``` 565void OH_NativeWindow_SetBufferHold (OHNativeWindow *window) 566``` 567**描述** 568提前缓存一帧buffer,且缓存的这一帧延迟一帧上屏显示,以此抵消后续一次超长帧丢帧。 569本接口为非线程安全类型接口。 570 571**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 572 573**起始版本:** 12 574 575**参数:** 576 577| 名称 | 描述 | 578| -------- | -------- | 579| window | 一个[OHNativeWindow](_o_h___native_image.md#ohnativewindow)的结构体实例的指针。 | 580 581 582 583### OH_NativeWindow_CreateNativeWindow() 584 585``` 586OHNativeWindow* OH_NativeWindow_CreateNativeWindow (void* pSurface) 587``` 588 589**描述** 590 591创建OHNativeWindow实例,每次调用都会产生一个新的OHNativeWindow实例。 说明:此接口不可用,可通过**OH_NativeImage_AcquireNativeWindow**创建,或通过XComponent创建。 592 593**废弃版本:** 12 594 595**替代接口:** 不再提供替代接口。 596 597**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 598 599**起始版本:** 8 600 601**参数:** 602 603| 名称 | 描述 | 604| -------- | -------- | 605| pSurface | 一个指向生产者ProduceSurface的指针,类型为sptr<OHOS::Surface>。 | 606 607**返回:** 608 609返回一个指针,指向OHNativeWindow的结构体实例。 610 611 612### OH_NativeWindow_CreateNativeWindowBufferFromNativeBuffer() 613 614``` 615OHNativeWindowBuffer* OH_NativeWindow_CreateNativeWindowBufferFromNativeBuffer (OH_NativeBuffer* nativeBuffer) 616``` 617 618**描述** 619 620创建OHNativeWindowBuffer实例,每次调用都会产生一个新的OHNativeWindowBuffer实例。 621本接口需要与OH_NativeWindow_DestroyNativeWindowBuffer接口配合使用,否则会存在内存泄露。 622本接口为非线程安全类型接口。 623 624**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 625 626**起始版本:** 11 627 628**参数:** 629 630| 名称 | 描述 | 631| -------- | -------- | 632| nativeBuffer | 一个指向OH_NativeBuffer的指针。 | 633 634**返回:** 635 636返回一个指针,指向OHNativeWindowBuffer的结构体实例。 637 638 639### OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer() 640 641``` 642OHNativeWindowBuffer* OH_NativeWindow_CreateNativeWindowBufferFromSurfaceBuffer (void* pSurfaceBuffer) 643``` 644 645**描述** 646 647创建OHNativeWindowBuffer实例,每次调用都会产生一个新的OHNativeWindowBuffer实例。 648 649**废弃版本:** 12 650 651**替代接口:** [OH_NativeWindow_CreateNativeWindowBufferFromNativeBuffer](#oh_nativewindow_createnativewindowbufferfromnativebuffer) 652 653**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 654 655**起始版本:** 8 656 657**参数:** 658 659| 名称 | 描述 | 660| -------- | -------- | 661| pSurfaceBuffer | 一个指向生产者buffer的指针,类型为sptr<OHOS::SurfaceBuffer>。 | 662 663**返回:** 664 665返回一个指针,指向OHNativeWindowBuffer的结构体实例。 666 667 668### OH_NativeWindow_CreateNativeWindowFromSurfaceId() 669 670``` 671int32_t OH_NativeWindow_CreateNativeWindowFromSurfaceId (uint64_t surfaceId, OHNativeWindow **window ) 672``` 673 674**描述** 675 676通过surfaceId创建对应的OHNativeWindow。 677本接口需要与OH_NativeWindow_DestroyNativeWindow接口配合使用,否则会存在内存泄露。 678如果存在并发释放OHNativeWindow的情况,需要通过OH_NativeWindow_NativeObjectReference和 679OH_NativeWindow_NativeObjectUnreference对OHNativeWindow进行引用计数加一和减一。 680通过surfaceId获取的surface需要是在本进程中创建的,不能跨进程获取surface。 681本接口为非线程安全类型接口。 682 683**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 684 685**起始版本:** 12 686 687**参数:** 688 689| 名称 | 描述 | 690| -------- | -------- | 691| surfaceId | 一个surface对应的ID。 | 692| window | 一个OHNativeWindow的结构体实例的二级指针。 | 693 694**返回:** 695 696返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 697 698 699### OH_NativeWindow_DestroyNativeWindow() 700 701``` 702void OH_NativeWindow_DestroyNativeWindow (OHNativeWindow* window) 703``` 704 705**描述** 706 707将OHNativeWindow对象的引用计数减1,当引用计数为0的时候,该OHNativeWindow对象会被析构掉。 708本接口为非线程安全类型接口。 709 710**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 711 712**起始版本:** 8 713 714**参数:** 715 716| 名称 | 描述 | 717| -------- | -------- | 718| window | 一个OHNativeWindow的结构体实例的指针。 | 719 720 721### OH_NativeWindow_DestroyNativeWindowBuffer() 722 723``` 724void OH_NativeWindow_DestroyNativeWindowBuffer (OHNativeWindowBuffer* buffer) 725``` 726 727**描述** 728 729将OHNativeWindowBuffer对象的引用计数减1,当引用计数为0的时候,该OHNativeWindowBuffer对象会被析构掉。 730本接口为非线程安全类型接口。 731 732**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 733 734**起始版本:** 8 735 736**参数:** 737 738| 名称 | 描述 | 739| -------- | -------- | 740| buffer | 一个OHNativeWindowBuffer的结构体实例的指针。 | 741 742 743### OH_NativeWindow_GetBufferHandleFromNative() 744 745``` 746BufferHandle* OH_NativeWindow_GetBufferHandleFromNative (OHNativeWindowBuffer* buffer) 747``` 748 749**描述** 750 751通过OHNativeWindowBuffer获取该buffer的BufferHandle指针。 752本接口为非线程安全类型接口。 753 754**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 755 756**起始版本:** 8 757 758**参数:** 759 760| 名称 | 描述 | 761| -------- | -------- | 762| buffer | 一个OHNativeWindowBuffer的结构体实例的指针。 | 763 764**返回:** 765 766BufferHandle 返回一个指针,指向BufferHandle的结构体实例。 767 768 769### OH_NativeWindow_GetLastFlushedBuffer() 770 771``` 772int32_t OH_NativeWindow_GetLastFlushedBuffer (OHNativeWindow *window, OHNativeWindowBuffer **buffer, int *fenceFd, float matrix[16] ) 773``` 774 775**描述** 776 777从OHNativeWindow获取上次送回到buffer队列中的OHNativeWindowBuffer。 778 779**废弃版本:** 12 780 781**替代接口:** [OH_NativeWindow_GetLastFlushedBufferV2](#oh_nativewindow_getlastflushedbufferv2) 782 783**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 784 785**起始版本:** 11 786 787**参数:** 788 789| 名称 | 描述 | 790| -------- | -------- | 791| window | 一个OHNativeWindow的结构体实例的指针。 | 792| buffer | 一个OHNativeWindowBuffer结构体指针的指针。 | 793| fenceFd | 一个文件描述符的指针。 | 794| matrix | 表示检索到的4\*4变换矩阵。 | 795 796**返回:** 797 798返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 799 800 801### OH_NativeWindow_GetNativeObjectMagic() 802 803``` 804int32_t OH_NativeWindow_GetNativeObjectMagic (void *obj) 805``` 806 807**描述** 808 809获取NativeObject的MagicId。 810本接口为非线程安全类型接口。 811 812**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 813 814**起始版本:** 8 815 816**参数:** 817 818| 名称 | 描述 | 819| -------- | -------- | 820| obj | 一个OHNativeWindow或者OHNativeWindowBuffer的结构体实例的指针。 | 821 822**返回:** 823 824MagicId 返回值为魔鬼数字,每个NativeObject唯一。 825 826 827### OH_NativeWindow_GetSurfaceId() 828 829``` 830int32_t OH_NativeWindow_GetSurfaceId (OHNativeWindow *window, uint64_t *surfaceId ) 831``` 832 833**描述** 834 835通过OHNativeWindow获取对应的surfaceId。 836本接口为非线程安全类型接口。 837 838**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 839 840**起始版本:** 12 841 842**参数:** 843 844| 名称 | 描述 | 845| -------- | -------- | 846| window | 一个OHNativeWindow的结构体实例的指针。 | 847| surfaceId | 一个surface对应ID的指针。 | 848 849**返回:** 850 851返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 852 853 854### OH_NativeWindow_NativeObjectReference() 855 856``` 857int32_t OH_NativeWindow_NativeObjectReference (void *obj) 858``` 859 860**描述** 861 862增加一个NativeObject的引用计数。 863本接口需要与OH_NativeWindow_NativeObjectUnreference接口配合使用,否则会存在内存泄露。 864本接口为非线程安全类型接口。 865 866**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 867 868**起始版本:** 8 869 870**参数:** 871 872| 名称 | 描述 | 873| -------- | -------- | 874| obj | 一个OHNativeWindow或者OHNativeWindowBuffer的结构体实例的指针。 | 875 876**返回:** 877 878返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 879 880 881### OH_NativeWindow_NativeObjectUnreference() 882 883``` 884int32_t OH_NativeWindow_NativeObjectUnreference (void *obj) 885``` 886 887**描述** 888 889减少一个NativeObject的引用计数,当引用计数减少为0时,该NativeObject将被析构掉。 890本接口为非线程安全类型接口。 891 892**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 893 894**起始版本:** 8 895 896**参数:** 897 898| 名称 | 描述 | 899| -------- | -------- | 900| obj | 一个OHNativeWindow或者OHNativeWindowBuffer的结构体实例的指针。 | 901 902**返回:** 903 904返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 905 906 907### OH_NativeWindow_NativeWindowAbortBuffer() 908 909``` 910int32_t OH_NativeWindow_NativeWindowAbortBuffer (OHNativeWindow *window, OHNativeWindowBuffer *buffer ) 911``` 912 913**描述** 914 915通过OHNativeWindow将之前申请出来的OHNativeWindowBuffer返还到Buffer队列中,供下次再申请。 916本接口为非线程安全类型接口。 917 918**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 919 920**起始版本:** 8 921 922**参数:** 923 924| 名称 | 描述 | 925| -------- | -------- | 926| window | 一个OHNativeWindow的结构体实例的指针。 | 927| buffer | 一个OHNativeWindowBuffer的结构体实例的指针。 | 928 929**返回:** 930 931返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 932 933### OH_NativeWindow_NativeWindowAttachBuffer() 934 935``` 936int32_t OH_NativeWindow_NativeWindowAttachBuffer (OHNativeWindow *window, OHNativeWindowBuffer *buffer ) 937``` 938 939**描述** 940 941将OHNativeWindowBuffer添加进OHNativeWindow中。 942本接口需要与OH_NativeWindow_NativeWindowDetachBuffer接口配合使用,否则会存在内存管理混乱问题。 943本接口为非线程安全类型接口 944 945**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 946 947**起始版本:** 12 948 949**参数:** 950 951| 名称 | 描述 | 952| -------- | -------- | 953| window | 一个OHNativeWindow的结构体实例的指针。 | 954| buffer | 一个OHNativeWindowBuffer的结构体实例的指针。 | 955 956**返回:** 957 958返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 959 960 961### OH_NativeWindow_NativeWindowDetachBuffer() 962 963``` 964int32_t OH_NativeWindow_NativeWindowDetachBuffer (OHNativeWindow *window, OHNativeWindowBuffer *buffer ) 965``` 966 967**描述** 968 969将OHNativeWindowBuffer从OHNativeWindow中分离。 970本接口为非线程安全类型接口。 971 972**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 973 974**起始版本:** 12 975 976**参数:** 977 978| 名称 | 描述 | 979| -------- | -------- | 980| window | 一个OHNativeWindow的结构体实例的指针。 | 981| buffer | 一个OHNativeWindowBuffer的结构体实例的指针。 | 982 983**返回:** 984 985返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 986 987 988### OH_NativeWindow_NativeWindowFlushBuffer() 989 990``` 991int32_t OH_NativeWindow_NativeWindowFlushBuffer (OHNativeWindow *window, OHNativeWindowBuffer *buffer, int fenceFd, Region region ) 992``` 993 994**描述** 995 996通过OHNativeWindow将生产好内容的OHNativeWindowBuffer放回到Buffer队列中,用以内容消费。 997系统会将fenFd关闭,无需用户close。 998本接口为非线程安全类型接口。 999 1000**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 1001 1002**起始版本:** 8 1003 1004**参数:** 1005 1006| 名称 | 描述 | 1007| -------- | -------- | 1008| window | 一个OHNativeWindow的结构体实例的指针。 | 1009| buffer | 一个OHNativeWindowBuffer的结构体实例的指针。 | 1010| fenceFd | 一个文件描述符句柄,用以同步时序。 | 1011| region | 表示一块脏区域,该区域有内容更新。 | 1012 1013**返回:** 1014 1015返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 1016 1017 1018### OH_NativeWindow_NativeWindowHandleOpt() 1019 1020``` 1021int32_t OH_NativeWindow_NativeWindowHandleOpt (OHNativeWindow *window, int code, ... ) 1022``` 1023 1024**描述** 1025 1026设置/获取OHNativeWindow的属性,包括设置/获取宽高、内容格式等。 1027本接口为非线程安全类型接口。 1028 1029**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 1030 1031**起始版本:** 8 1032 1033**参数:** 1034 1035| 名称 | 描述 | 1036| -------- | -------- | 1037| window | 一个OHNativeWindow的结构体实例的指针。 | 1038| code | 表示操作码,详见[NativeWindowOperation](#nativewindowoperation)。 | 1039| ... | 可变参数,必须与操作码对应的数据类型保持一致,且入参数量严格按照操作码提示传入,否则会存在未定义行为。 | 1040 1041**返回:** 1042 1043返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 1044 1045 1046### OH_NativeWindow_NativeWindowRequestBuffer() 1047 1048``` 1049int32_t OH_NativeWindow_NativeWindowRequestBuffer (OHNativeWindow *window, OHNativeWindowBuffer **buffer, int *fenceFd ) 1050``` 1051 1052**描述** 1053 1054通过OHNativeWindow对象申请一块OHNativeWindowBuffer,用以内容生产。 1055在调用本接口前,需要通过SET_BUFFER_GEOMETRY对OHNativeWindow设置宽高。 1056本接口需要与OH_NativeWindow_NativeWindowFlushBuffer接口配合使用,否则内存会耗尽。 1057当fenceFd使用完,用户需要将其close。 1058本接口为非线程安全类型接口。 1059 1060**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 1061 1062**起始版本:** 8 1063 1064**参数:** 1065 1066| 名称 | 描述 | 1067| -------- | -------- | 1068| window | 一个OHNativeWindow的结构体实例的指针。 | 1069| buffer | 一个OHNativeWindowBuffer的结构体实例的二级指针。 | 1070| fenceFd | 一个文件描述符句柄。 | 1071 1072**返回:** 1073 1074返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 1075 1076 1077### OH_NativeWindow_NativeWindowSetMetaData() 1078 1079``` 1080int32_t OH_NativeWindow_NativeWindowSetMetaData (OHNativeWindow *window, uint32_t sequence, int32_t size, const OHHDRMetaData *metaData ) 1081``` 1082 1083**描述** 1084 1085设置OHNativeWindow的元数据。 1086 1087**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 1088 1089**起始版本:** 9 1090 1091**弃用:** 从API version 10开始废弃,不再提供替代接口。 1092 1093**参数:** 1094 1095| 名称 | 描述 | 1096| -------- | -------- | 1097| window | 一个OHNativeWindow的结构体实例的指针。 | 1098| sequence | 生产缓冲区的序列。 | 1099| size | OHHDRMetaData数组的大小。 | 1100| metaDate | 指向OHHDRMetaData数组的指针。 | 1101 1102**返回:** 1103 1104返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 1105 1106 1107### OH_NativeWindow_NativeWindowSetMetaDataSet() 1108 1109``` 1110int32_t OH_NativeWindow_NativeWindowSetMetaDataSet (OHNativeWindow *window, uint32_t sequence, OHHDRMetadataKey key, int32_t size, const uint8_t *metaData ) 1111``` 1112 1113**描述** 1114 1115设置OHNativeWindow的元数据集。 1116 1117**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 1118 1119**起始版本:** 9 1120 1121**弃用:** 从API version 10开始废弃,不再提供替代接口。 1122 1123**参数:** 1124 1125| 名称 | 描述 | 1126| -------- | -------- | 1127| window | 一个OHNativeWindow的结构体实例的指针。 | 1128| sequence | 生产缓冲区的序列。 | 1129| key | 枚举值OHHDRMetadataKey。 | 1130| size | uint8_t向量的大小。 | 1131| metaDate | 指向uint8_t向量的指针。 | 1132 1133**返回:** 1134 1135返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 1136 1137 1138### OH_NativeWindow_NativeWindowSetScalingMode() 1139 1140``` 1141int32_t OH_NativeWindow_NativeWindowSetScalingMode (OHNativeWindow *window, uint32_t sequence, OHScalingMode scalingMode ) 1142``` 1143 1144**描述** 1145 1146设置OHNativeWindow的ScalingMode。 1147 1148**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 1149 1150**起始版本:** 9 1151 1152**废弃版本:** 10 1153 1154**替代接口:** [OH_NativeWindow_NativeWindowSetScalingModeV2](#oh_nativewindow_nativewindowsetscalingmodev2) 1155 1156**参数:** 1157 1158| 名称 | 描述 | 1159| -------- | -------- | 1160| window | 一个OHNativeWindow的结构体实例的指针。 | 1161| sequence | 生产缓冲区的序列。 | 1162| scalingMode | 枚举值OHScalingMode。 | 1163 1164**返回:** 1165 1166返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 1167 1168 1169### OH_NativeWindow_NativeWindowSetScalingModeV2() 1170 1171``` 1172int32_t OH_NativeWindow_NativeWindowSetScalingModeV2 (OHNativeWindow* window, OHScalingModeV2 scalingMode ) 1173``` 1174**描述** 1175设置OHNativeWindow的渲染缩放模式。 1176本接口为非线程安全类型接口。 1177 1178**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 1179 1180**起始版本:** 12 1181 1182**参数:** 1183 1184| 名称 | 描述 | 1185| -------- | -------- | 1186| window | 一个OHNativeWindow的结构体实例的指针。 | 1187| scalingMode | 一个OHScalingModeV2类型的枚举值。 | 1188 1189**返回:** 1190 1191返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 1192 1193### OH_NativeWindow_NativeWindowSetTunnelHandle() 1194 1195``` 1196int32_t OH_NativeWindow_NativeWindowSetTunnelHandle (OHNativeWindow *window, const OHExtDataHandle *handle ) 1197``` 1198 1199**描述** 1200 1201设置OHNativeWindow的TunnelHandle。 1202 1203**系统能力:** SystemCapability.Graphic.Graphic2D.NativeWindow 1204 1205**起始版本:** 9 1206 1207**弃用:** 从API version 10开始废弃,不再提供替代接口。 1208 1209**参数:** 1210 1211| 名称 | 描述 | 1212| -------- | -------- | 1213| window | 一个OHNativeWindow的结构体实例的指针。 | 1214| handle | 指向OHExtDataHandle的指针。 | 1215 1216**返回:** 1217 1218返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 1219