• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# OH_NativeImage
2
3
4## 概述
5
6提供NativeImage功能,作为数据消费者,其中一种用法是将数据和OpenGL纹理对接,需在OpenGL环境下使用,另外一种用法是开发者自行获取buffer进行渲染处理。
7
8**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage
9
10**起始版本:** 9
11
12
13## 汇总
14
15
16### 文件
17
18| 名称 | 描述 |
19| -------- | -------- |
20| [native_image.h](native__image_8h.md) | 定义获取和使用NativeImage的相关函数。 |
21
22
23### 结构体
24
25| 名称 | 描述 |
26| -------- | -------- |
27| [OH_OnFrameAvailableListener](_o_h___on_frame_available_listener.md) | 一个OH_NativeImage的监听者,通过OH_NativeImage_SetOnFrameAvailableListener接口注册,该监听结构体当有帧可用时,将触发回调。 |
28
29
30### 类型定义
31
32| 名称 | 描述 |
33| -------- | -------- |
34| typedef struct [OH_NativeImage](#oh_nativeimage-1)  [OH_NativeImage](#oh_nativeimage-1) | 提供OH_NativeImage结构体声明。  |
35| typedef struct NativeWindow [OHNativeWindow](#ohnativewindow) | 提供对NativeWindow的访问功能。  |
36| typedef struct NativeWindowBuffer [OHNativeWindowBuffer](#ohnativewindowbuffer) | 提供NativeWindowBuffer结构体声明。 |
37| typedef void(\* [OH_OnFrameAvailable](#oh_onframeavailable)) (void \*context) | 有buffer可获取时触发的回调函数。  |
38| typedef struct [OH_OnFrameAvailableListener](_o_h___on_frame_available_listener.md)  [OH_OnFrameAvailableListener](#oh_onframeavailablelistener) | 一个OH_NativeImage的监听者,通过[OH_NativeImage_SetOnFrameAvailableListener](#oh_nativeimage_setonframeavailablelistener)接口注册 该监听结构体,当有buffer可获取时,将触发回调给用户。 |
39| typedef enum [OHNativeErrorCode](#ohnativeerrorcode)  [OHNativeErrorCode](#ohnativeerrorcode) | 接口错误码说明(仅用于查询)。  |
40
41### 枚举
42
43| 名称 | 描述 |
44| -------- | -------- |
45| [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/>} | 接口错误码说明(仅用于查询)。  |
46
47### 函数
48
49| 名称 | 描述 |
50| -------- | -------- |
51| int32_t [OH_NativeImage_SetDropBufferMode](#oh_nativeimage_setdropbuffermode) ([OH_NativeImage](#oh_nativeimage) \*image, bool isOpen) | 设置OH_NativeImage是否为渲染丢帧模式。<br/>处于此模式时,大部分生产端生产的buffer将会被丢弃,最新的buffer会及时上屏渲染。<br/>此模式不能同时保证帧率高的要求。<br/>此接口建议在[OH_NativeImage_Create](#oh_nativeimage_create)接口调用后立即调用。<br/>此接口在与[OH_NativeImage_UpdateSurfaceImage](#oh_nativeimage_updatesurfaceimage)接口一起使用的场景下才会生效。<br/>本接口为非线程安全类型接口。 |
52| [OH_NativeImage](#oh_nativeimage-1) \* [OH_NativeImage_Create](#oh_nativeimage_create) (uint32_t textureId, uint32_t textureTarget) | 创建一个**OH_NativeImage**实例,该实例与OpenGL ES的纹理ID和纹理目标相关联。<br/>本接口需要与[OH_NativeImage_Destroy](#oh_nativeimage_destroy)接口配合使用,否则会存在内存泄露。<br/>本接口为非线程安全类型接口。 |
53| [OHNativeWindow](_native_window.md#ohnativewindow) \* [OH_NativeImage_AcquireNativeWindow](#oh_nativeimage_acquirenativewindow) ([OH_NativeImage](#oh_nativeimage-1) \*image) | 获取与OH_NativeImage相关联的OHNativeWindow指针。<br/>本接口为非线程安全类型接口。<br/>OH_NativeImage析构时会将对应的OHNativeWindow实例释放。若从本接口获取OHNativeWindow指针,当OH_NativeImage实例释放时,请将获取到的OHNativeWindow指针置空,防止后续产生野指针。 |
54| int32_t [OH_NativeImage_AttachContext](#oh_nativeimage_attachcontext) ([OH_NativeImage](#oh_nativeimage-1) \*image, uint32_t textureId) | 将OH_NativeImage实例附加到当前OpenGL ES上下文,且该OpenGL ES纹理会绑定到GL_TEXTURE_EXTERNAL_OES,并通过OH_NativeImage进行更新。<br>本接口为非线程安全类型接口。 |
55| int32_t [OH_NativeImage_DetachContext](#oh_nativeimage_detachcontext) ([OH_NativeImage](#oh_nativeimage-1) \*image) | 将OH_NativeImage实例从当前OpenGL ES上下文分离。<br/>本接口为非线程安全类型接口。 |
56| int32_t [OH_NativeImage_UpdateSurfaceImage](#oh_nativeimage_updatesurfaceimage) ([OH_NativeImage](#oh_nativeimage-1) \*image) | 通过OH_NativeImage获取最新帧更新相关联的OpenGL ES纹理。<br/>本接口需要在Opengl ES环境上下文的线程中调用。<br/>本接口需要在接收到[OH_OnFrameAvailableListener](_o_h___on_frame_available_listener.md)回调后调用。<br/>本接口为非线程安全类型接口。 |
57| int64_t [OH_NativeImage_GetTimestamp](#oh_nativeimage_gettimestamp) ([OH_NativeImage](#oh_nativeimage-1) \*image) | 获取最近调用OH_NativeImage_UpdateSurfaceImage的纹理图像的相关时间戳。<br/>本接口为非线程安全类型接口。 |
58| int32_t [OH_NativeImage_GetTransformMatrix](#oh_nativeimage_gettransformmatrix) ([OH_NativeImage](#oh_nativeimage-1) \*image, float matrix[16]) | 获取最近调用OH_NativeImage_UpdateSurfaceImage的纹理图像的变化矩阵。 |
59| int32_t [OH_NativeImage_GetSurfaceId](#oh_nativeimage_getsurfaceid) ([OH_NativeImage](#oh_nativeimage-1) \*image, uint64_t \*surfaceId) | 获取OH_NativeImage的surface编号。<br/>本接口为非线程安全类型接口。 |
60| int32_t [OH_NativeImage_SetOnFrameAvailableListener](#oh_nativeimage_setonframeavailablelistener) ([OH_NativeImage](#oh_nativeimage-1) \*image, [OH_OnFrameAvailableListener](_o_h___on_frame_available_listener.md) listener) | 设置帧可用回调。<br/>不允许在回调函数中调用本模块的其他接口。<br/>本接口为非线程安全类型接口。 |
61| int32_t [OH_NativeImage_UnsetOnFrameAvailableListener](#oh_nativeimage_unsetonframeavailablelistener) ([OH_NativeImage](#oh_nativeimage-1) \*image) | 取消设置帧可用回调。<br/>本接口为非线程安全类型接口。 |
62| void [OH_NativeImage_Destroy](#oh_nativeimage_destroy) ([OH_NativeImage](#oh_nativeimage-1) \*\*image) | 销毁通过OH_NativeImage_Create创建的**OH_NativeImage**实例,销毁后该<br/>**OH_NativeImage**指针会被赋值为空。<br/>本接口为非线程安全类型接口。 |
63| int32_t [OH_NativeImage_GetTransformMatrixV2](#oh_nativeimage_gettransformmatrixv2) ([OH_NativeImage](#oh_nativeimage-1) \*image, float matrix[16]) | 根据生产端设置的旋转角度,获取最近调用OH_NativeImage_UpdateSurfaceImage的纹理图像的变化矩阵。<br/>matrix在[OH_NativeImage_UpdateSurfaceImage](#oh_nativeimage_updatesurfaceimage)接口调用后,才会更新。<br/>本接口为非线程安全类型接口。 |
64| int32_t [OH_NativeImage_GetBufferMatrix](#oh_nativeimage_getbuffermatrix) ([OH_NativeImage](#oh_nativeimage-1) \*image, float matrix[16]) | 获取根据生产端设置的旋转角度和buffer实际有效内容区域计算出的变换矩阵。 |
65| int32_t [OH_NativeImage_AcquireNativeWindowBuffer](#oh_nativeimage_acquirenativewindowbuffer) ([OH_NativeImage](#oh_nativeimage-1) \*image, [OHNativeWindowBuffer](_native_window.md#ohnativewindowbuffer) \*\*nativeWindowBuffer, int \*fenceFd) | 通过消费端的**OH_NativeImage**获取一个**OHNativeWindowBuffer**。<br/>本接口不能与[OH_NativeImage_UpdateSurfaceImage](#oh_nativeimage_updatesurfaceimage)接口同时使用。<br/>本接口将会创建一个**OHNativeWindowBuffer**。<br/>当使用**OHNativeWindowBuffer**时,用户需要通过[OH_NativeWindow_NativeObjectReference](_native_window.md#oh_nativewindow_nativeobjectreference)接口将其引用计数加一。<br/>当**OHNativeWindowBuffer**使用完,用户需要通过[OH_NativeWindow_NativeObjectUnreference](_native_window.md#oh_nativewindow_nativeobjectunreference)接口将其引用计数减一。<br/>本接口需要和[OH_NativeImage_ReleaseNativeWindowBuffer](#oh_nativeimage_releasenativewindowbuffer)接口配合使用,否则会存在内存泄露。<br/>当fenceFd使用完,用户需要将其close。<br/>本接口为非线程安全类型接口。 |
66| int32_t [OH_NativeImage_ReleaseNativeWindowBuffer](#oh_nativeimage_releasenativewindowbuffer) ([OH_NativeImage](#oh_nativeimage-1) \*image, [OHNativeWindowBuffer](_native_window.md#ohnativewindowbuffer) \*nativeWindowBuffer, int fenceFd) | 通过**OH_NativeImage**实例将**OHNativeWindowBuffer**归还到buffer队列中。<br/>系统会将fenFd关闭,无需用户close。<br/>本接口为非线程安全类型接口。 |
67| [OH_NativeImage](#oh_nativeimage-1) \* [OH_ConsumerSurface_Create](#oh_consumersurface_create) () | 创建一个**OH_NativeImage**实例,作为surface的消费端。<br/>本接口仅用于surface消费端的内存轮转,创建的OH_NativeImage内部不会主动进行内存渲染处理。<br/>本接口不能与[OH_NativeImage_UpdateSurfaceImage](#oh_nativeimage_updatesurfaceimage)接口同时使用。<br/>本接口与 OH_NativeImage_AcquireNativeWindowBuffer和OH_NativeImage_ReleaseNativeWindowBuffer配合使用。<br/>本接口需要和[OH_NativeImage_Destroy](#oh_nativeimage_destroy)接口配合使用,否则会存在内存泄露。<br/>本接口为非线程安全类型接口。 |
68| int32_t [OH_ConsumerSurface_SetDefaultUsage](#oh_consumersurface_setdefaultusage) ([OH_NativeImage](#oh_nativeimage-1) \*image, uint64_t usage) | 设置默认读写方式。 本接口为非线程安全类型接口。 |
69| int32_t [OH_ConsumerSurface_SetDefaultSize](#oh_consumersurface_setdefaultsize) ([OH_NativeImage](#oh_nativeimage-1) \*image, int32_t width, int32_t height) | 设置几何图形默认尺寸。 本接口为非线程安全类型接口。 |
70
71## 类型定义说明
72
73
74### OH_NativeImage
75
76```
77typedef struct OH_NativeImage OH_NativeImage
78```
79
80**描述:**
81
82提供OH_NativeImage结构体声明。
83
84**起始版本:** 9
85
86
87### OH_OnFrameAvailable
88
89```
90typedef void(* OH_OnFrameAvailable) (void *context)
91```
92
93**描述:**
94
95有buffer可获取时触发的回调函数。
96
97**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage
98
99**起始版本:** 11
100
101**参数:**
102
103| 名称 | 描述 |
104| -------- | -------- |
105| context | 用户自定义的上下文信息,会在回调触发时返回给用户。 |
106
107
108### OH_OnFrameAvailableListener
109
110```
111typedef struct OH_OnFrameAvailableListener OH_OnFrameAvailableListener
112```
113
114**描述:**
115
116一个OH_NativeImage的监听者,通过[OH_NativeImage_SetOnFrameAvailableListener](#oh_nativeimage_setonframeavailablelistener)接口注册,该监听结构体,当有buffer可获取时,将触发回调给用户。
117
118**起始版本:** 11
119
120
121### OHNativeErrorCode
122
123```
124typedef enum OHNativeErrorCode OHNativeErrorCode
125```
126**描述:**
127
128接口错误码说明(仅用于查询)。
129
130**起始版本:** 12
131
132
133### OHNativeWindow
134
135```
136typedef struct NativeWindow OHNativeWindow
137```
138
139**描述:**
140
141提供对NativeWindow的访问功能。
142
143**起始版本:** 9
144
145### OHNativeWindowBuffer
146
147```
148typedef struct NativeWindowBuffer OHNativeWindowBuffer
149```
150
151**描述:**
152
153提供NativeWindowBuffer结构体声明。
154
155**起始版本:** 12
156
157
158## 枚举类型说明
159
160
161### OHNativeErrorCode
162
163```
164enum OHNativeErrorCode
165```
166**描述:**
167
168接口错误码说明(仅用于查询)。
169
170**起始版本:** 12
171
172| 枚举值 | 描述 |
173| -------- | -------- |
174| NATIVE_ERROR_OK  | 成功。   |
175| NATIVE_ERROR_MEM_OPERATION_ERROR<sup>15+</sup> | 内存操作错误。 |
176| NATIVE_ERROR_INVALID_ARGUMENTS  | 入参无效。   |
177| NATIVE_ERROR_NO_PERMISSION  | 无权限操作。   |
178| NATIVE_ERROR_NO_BUFFER  | 无空闲可用的buffer。   |
179| NATIVE_ERROR_NO_CONSUMER  | 消费端不存在。   |
180| NATIVE_ERROR_NOT_INIT  | 未初始化。   |
181| NATIVE_ERROR_CONSUMER_CONNECTED  | 消费端已经被连接。   |
182| NATIVE_ERROR_BUFFER_STATE_INVALID  | buffer状态不符合预期。   |
183| NATIVE_ERROR_BUFFER_IN_CACHE  | buffer已在缓存队列中。   |
184| NATIVE_ERROR_BUFFER_QUEUE_FULL  | 队列已满。   |
185| NATIVE_ERROR_BUFFER_NOT_IN_CACHE  | buffer不在缓存队列中。   |
186| NATIVE_ERROR_CONSUMER_DISCONNECTED | 消费端已经被断开连接。 |
187| NATIVE_ERROR_CONSUMER_NO_LISTENER_REGISTERED | 消费端未注册listener回调函数。 |
188| NATIVE_ERROR_UNSUPPORTED  | 当前设备或平台不支持。   |
189| NATIVE_ERROR_UNKNOWN  | 未知错误,请查看日志。   |
190| NATIVE_ERROR_HDI_ERROR  | HDI接口调用失败。   |
191| NATIVE_ERROR_BINDER_ERROR  | 跨进程通信失败。   |
192| NATIVE_ERROR_EGL_STATE_UNKNOWN  | egl环境状态异常。   |
193| NATIVE_ERROR_EGL_API_FAILED  | egl接口调用失败。   |
194
195
196## 函数说明
197
198### OH_NativeImage_SetDropBufferMode()
199
200```
201int32_t OH_NativeImage_SetDropBufferMode (OH_NativeImage* image, bool isOpen )
202```
203
204**描述**
205
206设置OH_NativeImage是否为渲染丢帧模式。
207
208处于此模式时,大部分生产端生产的buffer将会被丢弃,最新的buffer会及时上屏渲染。
209
210此模式不能同时保证帧率高的要求。
211
212此接口建议在[OH_NativeImage_Create](#oh_nativeimage_create)接口调用后立即调用。
213
214此接口在与[OH_NativeImage_UpdateSurfaceImage](#oh_nativeimage_updatesurfaceimage)接口一起使用的场景下才会生效。
215
216本接口为非线程安全类型接口。
217
218**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage
219
220**起始版本:** 17
221
222**参数:**
223
224| 名称 | 描述 |
225| -------- | -------- |
226| image | 指向OH_NativeImage实例的指针。  |
227| isOpen | 是否设置渲染丢帧。true表示设置为渲染丢帧模式,false表示不设置。  |
228
229**返回:**
230
231执行成功时返回NATIVE_ERROR_OK。
232
233image是空指针时返回NATIVE_ERROR_INVALID_ARGUMENTS。
234
235### OH_NativeImage_GetBufferMatrix()
236
237```
238int32_t OH_NativeImage_GetBufferMatrix (OH_NativeImage* image, float matrix[16] )
239```
240
241**描述:**
242
243获取根据生产端设置的旋转角度和buffer实际有效内容区域计算出的变换矩阵。
244
245本接口返回一个变换矩阵,该矩阵是[OH_NativeImage](#oh_nativeimage-1)在消费buffer,即调用[OH_NativeImage_UpdateSurfaceImage](#oh_nativeimage_updatesurfaceimage) 或者[OH_NativeImage_AcquireNativeWindowBuffer](#oh_nativeimage_acquirenativewindowbuffer)时,根据buffer的旋转角度和实际有效内容区域计算所得。
246
247本接口为非线程安全类型接口。
248
249**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage
250
251**起始版本:** 15
252
253**参数:**
254
255| 名称 | 描述 |
256| -------- | -------- |
257| image | 指向[OH_NativeImage](#oh_nativeimage-1)实例的指针。 |
258| matrix | 用于存储获取的4\*4变换矩阵。 |
259
260**返回:**
261
262返回接口执行结果。NATIVE_ERROR_OK,表示接口执行成功。
263
264返回NATIVE_ERROR_INVALID_ARGUMENTS,对应错误码为40001000,表示image参数为空。
265
266返回NATIVE_ERROR_MEM_OPERATION_ERROR,对应错误码为30001000,表示内存操作错误,获取变换矩阵失败。
267
268### OH_ConsumerSurface_SetDefaultUsage()
269
270```
271int32_t OH_ConsumerSurface_SetDefaultUsage (OH_NativeImage* image, uint64_t usage )
272```
273
274**描述:**
275
276设置默认读写方式。 本接口为非线程安全类型接口。
277
278**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage
279
280**起始版本:** 13
281
282**参数:**
283
284| 名称 | 描述 |
285| -------- | -------- |
286| image | 指向**OH_NativeImage**实例的指针。 |
287| usage | 表示读写方式。枚举值参考**OH_NativeBuffer_Usage**。 |
288
289**返回:**
290
291执行成功时返回NATIVE_ERROR_OK。
292
293image是空指针时返回NATIVE_ERROR_INVALID_ARGUMENTS。
294
295
296### OH_ConsumerSurface_SetDefaultSize()
297
298```
299int32_t OH_ConsumerSurface_SetDefaultSize (OH_NativeImage* image, int32_t width, int32_t height )
300```
301
302**描述:**
303
304设置几何图形默认尺寸。 本接口为非线程安全类型接口。
305
306**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage
307
308**起始版本:** 13
309
310**参数:**
311
312| 名称 | 描述 |
313| -------- | -------- |
314| image | 指向**OH_NativeImage**实例的指针。 |
315| width | 表示几何图形宽度,取值范围大于0,单位为像素。 |
316| height | 表示几何图形高度,取值范围大于0,单位为像素。 |
317
318**返回:**
319
320执行成功时返回NATIVE_ERROR_OK。
321
322image是空指针时,或width、height小于等于0时返回NATIVE_ERROR_INVALID_ARGUMENTS。
323
324
325
326### OH_ConsumerSurface_Create()
327
328```
329OH_NativeImage* OH_ConsumerSurface_Create ()
330```
331
332**描述:**
333
334创建一个**OH_NativeImage**实例,作为surface的消费端。
335
336本接口仅用于surface消费端的内存轮转,创建的OH_NativeImage内部不会主动进行内存渲染处理。
337
338本接口不能与[OH_NativeImage_UpdateSurfaceImage](#oh_nativeimage_updatesurfaceimage)接口同时使用。
339
340本接口与 OH_NativeImage_AcquireNativeWindowBuffer和OH_NativeImage_ReleaseNativeWindowBuffer配合使用。
341
342本接口需要和[OH_NativeImage_Destroy](#oh_nativeimage_destroy)接口配合使用,否则会存在内存泄露。
343
344本接口为非线程安全类型接口。
345
346**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage
347
348**起始版本:** 12
349
350**返回:**
351
352成功则返回一个指向**OH_NativeImage**实例的指针,否则返回**NULL**。
353
354
355### OH_NativeImage_AcquireNativeWindowBuffer()
356
357```
358int32_t OH_NativeImage_AcquireNativeWindowBuffer (OH_NativeImage* image, OHNativeWindowBuffer** nativeWindowBuffer, int* fenceFd )
359```
360
361**描述:**
362
363通过消费端的**OH_NativeImage**获取一个**OHNativeWindowBuffer**。
364
365本接口不能与[OH_NativeImage_UpdateSurfaceImage](#oh_nativeimage_updatesurfaceimage)接口同时使用。
366
367本接口将会创建一个**OHNativeWindowBuffer**。
368
369当使用**OHNativeWindowBuffer**时,用户需要通过**OH_NativeWindow_NativeObjectReference**接口将其引用计数加一。
370
371当**OHNativeWindowBuffer**使用完,用户需要通过**OH_NativeWindow_NativeObjectUnreference**接口将其引用计数减一。
372
373本接口需要和[OH_NativeImage_ReleaseNativeWindowBuffer](#oh_nativeimage_releasenativewindowbuffer)接口配合使用,否则会存在内存泄露。
374
375当fenceFd使用完,用户需要将其close。
376本接口为非线程安全类型接口。
377
378**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage
379
380**起始版本:** 12
381
382**参数:**
383
384| 名称 | 描述 |
385| -------- | -------- |
386| image | 指向**OH_NativeImage**实例的指针。 |
387| nativeWindowBuffer | 指向**OHNativeWindowBuffer**指针的指针。 |
388| fenceFd | 指向文件描述符句柄的指针。 |
389
390**返回:**
391
392执行成功时返回NATIVE_ERROR_OK。
393
394image,nativeWindowBuffer,fenceFd是空指针时返回NATIVE_ERROR_INVALID_ARGUMENTS。
395
396没有buffer可以消费时返回NATIVE_ERROR_NO_BUFFER。
397
398
399### OH_NativeImage_ReleaseNativeWindowBuffer()
400
401```
402int32_t OH_NativeImage_ReleaseNativeWindowBuffer (OH_NativeImage* image, OHNativeWindowBuffer* nativeWindowBuffer, int fenceFd )
403```
404
405**描述:**
406
407通过**OH_NativeImage**实例将**OHNativeWindowBuffer**归还到buffer队列中。
408
409系统会将fenFd关闭,无需用户close。
410本接口为非线程安全类型接口。
411
412**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage
413
414**起始版本:** 12
415
416**参数:**
417
418| 名称 | 描述 |
419| -------- | -------- |
420| image | 指向**OH_NativeImage**实例的指针。 |
421| nativeWindowBuffer | 指向**OHNativeWindowBuffer**实例的指针。 |
422| fenceFd | 指向文件描述符句柄,用于并发同步控制。 |
423
424**返回:**
425
426执行成功时返回NATIVE_ERROR_OK。
427
428image或nativeWindowBuffer是空指针时返回NATIVE_ERROR_INVALID_ARGUMENTS。
429
430nativeWindowBuffer为状态非法时返回NATIVE_ERROR_BUFFER_STATE_INVALID。
431
432nativeWindowBuffer不在缓存中返回NATIVE_ERROR_BUFFER_NOT_IN_CACHE。
433
434
435
436### OH_NativeImage_AcquireNativeWindow()
437
438```
439OHNativeWindow* OH_NativeImage_AcquireNativeWindow (OH_NativeImage * image)
440```
441
442**描述:**
443
444获取与OH_NativeImage相关联的OHNativeWindow指针。
445
446本接口为非线程安全类型接口。
447
448OH_NativeImage析构时会将对应的OHNativeWindow实例释放。若从本接口获取OHNativeWindow指针,当OH_NativeImage实例释放时,请将获取到的OHNativeWindow指针置空,防止后续产生野指针。
449
450
451**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage
452
453**起始版本:** 9
454
455**参数:**
456
457| 名称 | 描述 |
458| -------- | -------- |
459| image | 是指向**OH_NativeImage**实例的指针。 |
460
461**返回:**
462
463成功则返回一个指向OHNativeWindow实例的指针,否则返回**NULL**。
464
465
466### OH_NativeImage_AttachContext()
467
468```
469int32_t OH_NativeImage_AttachContext (OH_NativeImage * image, uint32_t textureId )
470```
471
472**描述:**
473
474将OH_NativeImage实例附加到当前OpenGL ES上下文,且该OpenGL ES纹理会绑定到
475
476GL_TEXTURE_EXTERNAL_OES,并通过OH_NativeImage进行更新。
477本接口为非线程安全类型接口。
478
479**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage
480
481**起始版本:** 9
482
483**参数:**
484
485| 名称 | 描述 |
486| -------- | -------- |
487| image | 是指向**OH_NativeImage**实例的指针。 |
488| textureId | 是OH_NativeImage要附加到的OpenGL ES纹理的id。 |
489
490**返回:**
491
492返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。
493
494
495### OH_NativeImage_Create()
496
497```
498OH_NativeImage* OH_NativeImage_Create (uint32_t textureId, uint32_t textureTarget )
499```
500
501**描述:**
502
503创建一个**OH_NativeImage**实例,该实例与OpenGL ES的纹理ID和纹理目标相关联。
504本接口需要与OH_NativeImage_Destroy接口配合使用,否则会存在内存泄露。
505本接口为非线程安全类型接口。
506
507**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage
508
509**起始版本:** 9
510
511**参数:**
512
513| 名称 | 描述 |
514| -------- | -------- |
515| textureId | OpenGL ES的纹理ID,OH_NativeImage实例会与之相关联。 |
516| textureTarget | OpenGL ES的纹理目标。 |
517
518**返回:**
519
520创建成功则返回一个指向**OH_NativeImage**实例的指针实例的指针,否则返回**NULL**。
521
522
523### OH_NativeImage_Destroy()
524
525```
526void OH_NativeImage_Destroy (OH_NativeImage ** image)
527```
528
529**描述:**
530
531销毁通过OH_NativeImage_Create创建的**OH_NativeImage**实例,销毁后该
532
533**OH_NativeImage**指针会被赋值为空。
534本接口为非线程安全类型接口。
535
536**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage
537
538**起始版本:** 9
539
540**参数:**
541
542| 名称 | 描述 |
543| -------- | -------- |
544| image | 是指向**OH_NativeImage**实例的指针。 |
545
546
547### OH_NativeImage_DetachContext()
548
549```
550int32_t OH_NativeImage_DetachContext (OH_NativeImage * image)
551```
552
553**描述:**
554
555将OH_NativeImage实例从当前OpenGL ES上下文分离。
556本接口为非线程安全类型接口。
557
558**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage
559
560**起始版本:** 9
561
562**参数:**
563
564| 名称 | 描述 |
565| -------- | -------- |
566| image | 是指向**OH_NativeImage**实例的指针。 |
567
568**返回:**
569
570返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。
571
572
573### OH_NativeImage_GetSurfaceId()
574
575```
576int32_t OH_NativeImage_GetSurfaceId (OH_NativeImage * image, uint64_t * surfaceId )
577```
578
579**描述:**
580
581获取OH_NativeImage的surface编号。
582本接口为非线程安全类型接口。
583
584**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage
585
586**起始版本:** 11
587
588**参数:**
589
590| 名称 | 描述 |
591| -------- | -------- |
592| image | 是指向**OH_NativeImage**实例的指针。 |
593| surfaceId | 是指向surface编号的指针。 |
594
595**返回:**
596
597返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。
598
599
600### OH_NativeImage_GetTimestamp()
601
602```
603int64_t OH_NativeImage_GetTimestamp (OH_NativeImage * image)
604```
605
606**描述:**
607
608获取最近调用OH_NativeImage_UpdateSurfaceImage的纹理图像的相关时间戳。
609本接口为非线程安全类型接口。
610
611**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage
612
613**起始版本:** 9
614
615**参数:**
616
617| 名称 | 描述 |
618| -------- | -------- |
619| image | 是指向**OH_NativeImage**实例的指针。 |
620
621**返回:**
622
623返回纹理图像的相关时间戳。
624
625
626### OH_NativeImage_GetTransformMatrix()
627
628```
629int32_t OH_NativeImage_GetTransformMatrix (OH_NativeImage * image, float matrix[16] )
630```
631
632**描述:**
633
634获取最近调用OH_NativeImage_UpdateSurfaceImage的纹理图像的变化矩阵。
635
636**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage
637
638**废弃版本:** 12
639
640**替代接口:** [OH_NativeImage_GetTransformMatrixV2](#oh_nativeimage_gettransformmatrixv2)
641
642**起始版本:** 9
643
644**参数:**
645
646| 名称 | 描述 |
647| -------- | -------- |
648| image | 是指向**OH_NativeImage**实例的指针。 |
649| matrix | 用来存储要获取的4\*4的变化矩阵。 |
650
651**返回:**
652
653返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。
654
655### OH_NativeImage_GetTransformMatrixV2()
656
657```
658int32_t OH_NativeImage_GetTransformMatrixV2 (OH_NativeImage* image, float matrix[16] )
659```
660**描述:**
661
662根据生产端设置的旋转角度,获取最近调用OH_NativeImage_UpdateSurfaceImage的纹理图像的变化矩阵。
663matrix在OH_NativeImage_UpdateSurfaceImage接口调用后,才会更新。
664本接口为非线程安全类型接口。
665
666**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage
667
668**起始版本:** 12
669
670**参数:**
671
672| 名称 | 描述 |
673| -------- | -------- |
674| image | 是指向**OH_NativeImage**实例的指针。  |
675| matrix | 用来存储要获取的4\*4的变化矩阵。  |
676
677**返回:**
678
679返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。
680
681### OH_NativeImage_SetOnFrameAvailableListener()
682
683```
684int32_t OH_NativeImage_SetOnFrameAvailableListener (OH_NativeImage * image, OH_OnFrameAvailableListener listener )
685```
686
687**描述:**
688
689设置帧可用回调。
690不允许在回调函数中调用本模块的其他接口。
691本接口为非线程安全类型接口。
692
693**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage
694
695**起始版本:** 11
696
697**参数:**
698
699| 名称 | 描述 |
700| -------- | -------- |
701| image | 是指向**OH_NativeImage**实例的指针。 |
702| listener | 表示回调监听者。 |
703
704**返回:**
705
706返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。
707
708
709### OH_NativeImage_UnsetOnFrameAvailableListener()
710
711```
712int32_t OH_NativeImage_UnsetOnFrameAvailableListener (OH_NativeImage * image)
713```
714
715**描述:**
716
717取消设置帧可用回调。
718本接口为非线程安全类型接口。
719
720**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage
721
722**起始版本:** 11
723
724**参数:**
725
726| 名称 | 描述 |
727| -------- | -------- |
728| image | 是指向**OH_NativeImage**实例的指针。 |
729
730**返回:**
731
732返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。
733
734
735### OH_NativeImage_UpdateSurfaceImage()
736
737```
738int32_t OH_NativeImage_UpdateSurfaceImage (OH_NativeImage * image)
739```
740
741**描述:**
742
743通过OH_NativeImage获取最新帧更新相关联的OpenGL ES纹理。
744本接口需要在Opengl ES环境上下文的线程中调用。
745本接口需要在接收到OH_OnFrameAvailableListener回调后调用。
746本接口为非线程安全类型接口。
747
748**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage
749
750**起始版本:** 9
751
752**参数:**
753
754| 名称 | 描述 |
755| -------- | -------- |
756| image | 是指向**OH_NativeImage**实例的指针。 |
757
758**返回:**
759
760返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。
761