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