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