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