• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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&lt;OHOS::Surface&gt;。 |
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&lt;OHOS::SurfaceBuffer&gt;。 |
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