1# OH_NativeImage 2 3 4## 概述 5 6提供NativeImage功能,作为数据消费者,主要用来将数据和OpenGL纹理对接,需在OpenGL环境下使用。 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 196### OH_ConsumerSurface_SetDefaultUsage() 197 198``` 199int32_t OH_ConsumerSurface_SetDefaultUsage (OH_NativeImage* image, uint64_t usage ) 200``` 201 202**描述** 203 204设置默认读写方式。 本接口为非线程安全类型接口。 205 206**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 207 208**起始版本:** 13 209 210**参数:** 211 212| 名称 | 描述 | 213| -------- | -------- | 214| image | 指向**OH_NativeImage**实例的指针。 | 215| usage | 表示读写方式。枚举值参考**OH_NativeBuffer_Usage**。 | 216 217**返回:** 218 219执行成功时返回NATIVE_ERROR_OK。 220 221image是空指针时返回NATIVE_ERROR_INVALID_ARGUMENTS。 222 223 224### OH_ConsumerSurface_SetDefaultSize() 225 226``` 227int32_t OH_ConsumerSurface_SetDefaultSize (OH_NativeImage* image, int32_t width, int32_t height ) 228``` 229 230**描述** 231 232设置几何图形默认尺寸。 本接口为非线程安全类型接口。 233 234**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 235 236**起始版本:** 13 237 238**参数:** 239 240| 名称 | 描述 | 241| -------- | -------- | 242| image | 指向**OH_NativeImage**实例的指针。 | 243| width | 表示几何图形宽度,取值范围大于0,单位为像素。 | 244| height | 表示几何图形高度,取值范围大于0,单位为像素。 | 245 246**返回:** 247 248执行成功时返回NATIVE_ERROR_OK。 249 250image是空指针时,或width、height小于等于0时返回NATIVE_ERROR_INVALID_ARGUMENTS。 251 252 253 254### OH_ConsumerSurface_Create() 255 256``` 257OH_NativeImage* OH_ConsumerSurface_Create () 258``` 259 260**描述** 261 262创建一个**OH_NativeImage**实例,作为surface的消费端。 263 264本接口仅用于surface消费端的内存轮转,创建的OH_NativeImage内部不会主动进行内存渲染处理。 265 266本接口不能与[OH_NativeImage_UpdateSurfaceImage](#oh_nativeimage_updatesurfaceimage)接口同时使用。 267 268本接口与 OH_NativeImage_AcquireNativeWindowBuffer和OH_NativeImage_ReleaseNativeWindowBuffer配合使用。 269 270本接口需要和[OH_NativeImage_Destroy](#oh_nativeimage_destroy)接口配合使用,否则会存在内存泄露。 271 272本接口为非线程安全类型接口。 273 274**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 275 276**起始版本:** 12 277 278**返回:** 279 280成功则返回一个指向**OH_NativeImage**实例的指针,否则返回**NULL**。 281 282 283### OH_NativeImage_AcquireNativeWindowBuffer() 284 285``` 286int32_t OH_NativeImage_AcquireNativeWindowBuffer (OH_NativeImage* image, OHNativeWindowBuffer** nativeWindowBuffer, int* fenceFd ) 287``` 288 289**描述** 290 291通过消费端的**OH_NativeImage**获取一个**OHNativeWindowBuffer**。 292 293本接口不能与[OH_NativeImage_UpdateSurfaceImage](#oh_nativeimage_updatesurfaceimage)接口同时使用。 294 295本接口将会创建一个**OHNativeWindowBuffer**。 296 297当使用**OHNativeWindowBuffer**时,用户需要通过**OH_NativeWindow_NativeObjectReference**接口将其引用计数加一。 298 299当**OHNativeWindowBuffer**使用完,用户需要通过**OH_NativeWindow_NativeObjectUnreference**接口将其引用计数减一。 300 301本接口需要和[OH_NativeImage_ReleaseNativeWindowBuffer](#oh_nativeimage_releasenativewindowbuffer)接口配合使用,否则会存在内存泄露。 302 303当fenceFd使用完,用户需要将其close。 304本接口为非线程安全类型接口。 305 306**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 307 308**起始版本:** 12 309 310**参数:** 311 312| 名称 | 描述 | 313| -------- | -------- | 314| image | 指向**OH_NativeImage**实例的指针。 | 315| nativeWindowBuffer | 指向**OHNativeWindowBuffer**指针的指针。 | 316| fenceFd | 指向文件描述符句柄的指针。 | 317 318**返回:** 319 320执行成功时返回NATIVE_ERROR_OK。 321 322image, nativeWindowBuffer, fenceFd是空指针时返回NATIVE_ERROR_INVALID_ARGUMENTS。 323 324没有buffer可以消费时返回NATIVE_ERROR_NO_BUFFER。 325 326 327### OH_NativeImage_ReleaseNativeWindowBuffer() 328 329``` 330int32_t OH_NativeImage_ReleaseNativeWindowBuffer (OH_NativeImage* image, OHNativeWindowBuffer* nativeWindowBuffer, int fenceFd ) 331``` 332 333**描述** 334 335通过**OH_NativeImage**实例将**OHNativeWindowBuffer**归还到buffer队列中。 336 337系统会将fenFd关闭,无需用户close。 338本接口为非线程安全类型接口。 339 340**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 341 342**起始版本:** 12 343 344**参数:** 345 346| 名称 | 描述 | 347| -------- | -------- | 348| image | 指向**OH_NativeImage**实例的指针。 | 349| nativeWindowBuffer | 指向**OHNativeWindowBuffer**实例的指针。 | 350| fenceFd | 指向文件描述符句柄, 用于并发同步控制。 | 351 352**返回:** 353 354执行成功时返回NATIVE_ERROR_OK。 355 356image或nativeWindowBuffer是空指针时返回NATIVE_ERROR_INVALID_ARGUMENTS。 357 358nativeWindowBuffer为状态非法时返回NATIVE_ERROR_BUFFER_STATE_INVALID。 359 360nativeWindowBuffer不在缓存中返回NATIVE_ERROR_BUFFER_NOT_IN_CACHE。 361 362 363 364### OH_NativeImage_AcquireNativeWindow() 365 366``` 367OHNativeWindow* OH_NativeImage_AcquireNativeWindow (OH_NativeImage * image) 368``` 369 370**描述** 371 372获取与OH_NativeImage相关联的OHNativeWindow指针。 373 374本接口为非线程安全类型接口。 375 376OH_NativeImage析构时会将对应的OHNativeWindow实例释放。若从本接口获取OHNativeWindow指针,当OH_NativeImage实例释放时,请将获取到的OHNativeWindow指针置空,防止后续产生野指针。 377 378 379**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 380 381**起始版本:** 9 382 383**参数:** 384 385| 名称 | 描述 | 386| -------- | -------- | 387| image | 是指向**OH_NativeImage**实例的指针。 | 388 389**返回:** 390 391成功则返回一个指向OHNativeWindow实例的指针,否则返回**NULL**。 392 393 394### OH_NativeImage_AttachContext() 395 396``` 397int32_t OH_NativeImage_AttachContext (OH_NativeImage * image, uint32_t textureId ) 398``` 399 400**描述** 401 402将OH_NativeImage实例附加到当前OpenGL ES上下文, 且该OpenGL ES纹理会绑定到 403 404GL_TEXTURE_EXTERNAL_OES, 并通过OH_NativeImage进行更新。 405本接口为非线程安全类型接口。 406 407**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 408 409**起始版本:** 9 410 411**参数:** 412 413| 名称 | 描述 | 414| -------- | -------- | 415| image | 是指向**OH_NativeImage**实例的指针。 | 416| textureId | 是OH_NativeImage要附加到的OpenGL ES纹理的id。 | 417 418**返回:** 419 420返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 421 422 423### OH_NativeImage_Create() 424 425``` 426OH_NativeImage* OH_NativeImage_Create (uint32_t textureId, uint32_t textureTarget ) 427``` 428 429**描述** 430 431创建一个**OH_NativeImage**实例,该实例与OpenGL ES的纹理ID和纹理目标相关联。 432本接口需要与OH_NativeImage_Destroy接口配合使用,否则会存在内存泄露。 433本接口为非线程安全类型接口。 434 435**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 436 437**起始版本:** 9 438 439**参数:** 440 441| 名称 | 描述 | 442| -------- | -------- | 443| textureId | OpenGL ES的纹理ID,OH_NativeImage实例会与之相关联。 | 444| textureTarget | OpenGL ES的纹理目标。 | 445 446**返回:** 447 448返回一个指向**OH_NativeImage**实例的指针 returns **NULL** otherwise。 449 450 451### OH_NativeImage_Destroy() 452 453``` 454void OH_NativeImage_Destroy (OH_NativeImage ** image) 455``` 456 457**描述** 458 459销毁通过OH_NativeImage_Create创建的**OH_NativeImage**实例, 销毁后该 460 461**OH_NativeImage**指针会被赋值为空。 462本接口为非线程安全类型接口。 463 464**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 465 466**起始版本:** 9 467 468**参数:** 469 470| 名称 | 描述 | 471| -------- | -------- | 472| image | 是指向**OH_NativeImage**实例的指针。 | 473 474 475### OH_NativeImage_DetachContext() 476 477``` 478int32_t OH_NativeImage_DetachContext (OH_NativeImage * image) 479``` 480 481**描述** 482 483将OH_NativeImage实例从当前OpenGL ES上下文分离。 484本接口为非线程安全类型接口。 485 486**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 487 488**起始版本:** 9 489 490**参数:** 491 492| 名称 | 描述 | 493| -------- | -------- | 494| image | 是指向**OH_NativeImage**实例的指针。 | 495 496**返回:** 497 498返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 499 500 501### OH_NativeImage_GetSurfaceId() 502 503``` 504int32_t OH_NativeImage_GetSurfaceId (OH_NativeImage * image, uint64_t * surfaceId ) 505``` 506 507**描述** 508 509获取OH_NativeImage的surface编号。 510本接口为非线程安全类型接口。 511 512**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 513 514**起始版本:** 11 515 516**参数:** 517 518| 名称 | 描述 | 519| -------- | -------- | 520| image | 是指向**OH_NativeImage**实例的指针。 | 521| surfaceId | 是指向surface编号的指针。 | 522 523**返回:** 524 525返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 526 527 528### OH_NativeImage_GetTimestamp() 529 530``` 531int64_t OH_NativeImage_GetTimestamp (OH_NativeImage * image) 532``` 533 534**描述** 535 536获取最近调用OH_NativeImage_UpdateSurfaceImage的纹理图像的相关时间戳。 537本接口为非线程安全类型接口。 538 539**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 540 541**起始版本:** 9 542 543**参数:** 544 545| 名称 | 描述 | 546| -------- | -------- | 547| image | 是指向**OH_NativeImage**实例的指针。 | 548 549**返回:** 550 551返回纹理图像的相关时间戳。 552 553 554### OH_NativeImage_GetTransformMatrix() 555 556``` 557int32_t OH_NativeImage_GetTransformMatrix (OH_NativeImage * image, float matrix[16] ) 558``` 559 560**描述** 561 562获取最近调用OH_NativeImage_UpdateSurfaceImage的纹理图像的变化矩阵。 563 564**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 565 566**废弃版本:** 12 567 568**替代接口:** [OH_NativeImage_GetTransformMatrixV2](#oh_nativeimage_gettransformmatrixv2) 569 570**起始版本:** 9 571 572**参数:** 573 574| 名称 | 描述 | 575| -------- | -------- | 576| image | 是指向**OH_NativeImage**实例的指针。 | 577| matrix | 用来存储要获取的4\*4的变化矩阵。 | 578 579**返回:** 580 581返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 582 583### OH_NativeImage_GetTransformMatrixV2() 584 585``` 586int32_t OH_NativeImage_GetTransformMatrixV2 (OH_NativeImage* image, float matrix[16] ) 587``` 588**描述** 589根据生产端设置的旋转角度,获取最近调用OH_NativeImage_UpdateSurfaceImage的纹理图像的变化矩阵。 590matrix在OH_NativeImage_UpdateSurfaceImage接口调用后,才会更新。 591本接口为非线程安全类型接口。 592 593**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 594 595**起始版本:** 12 596 597**参数:** 598 599| 名称 | 描述 | 600| -------- | -------- | 601| image | 是指向**OH_NativeImage**实例的指针。 | 602| matrix | 用来存储要获取的4\*4的变化矩阵。 | 603 604**返回:** 605 606返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 607 608### OH_NativeImage_SetOnFrameAvailableListener() 609 610``` 611int32_t OH_NativeImage_SetOnFrameAvailableListener (OH_NativeImage * image, OH_OnFrameAvailableListener listener ) 612``` 613 614**描述** 615 616设置帧可用回调。 617不允许在回调函数中调用本模块的其他接口。 618本接口为非线程安全类型接口。 619 620**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 621 622**起始版本:** 11 623 624**参数:** 625 626| 名称 | 描述 | 627| -------- | -------- | 628| image | 是指向**OH_NativeImage**实例的指针。 | 629| listener | 表示回调监听者。 | 630 631**返回:** 632 633返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 634 635 636### OH_NativeImage_UnsetOnFrameAvailableListener() 637 638``` 639int32_t OH_NativeImage_UnsetOnFrameAvailableListener (OH_NativeImage * image) 640``` 641 642**描述** 643 644取消设置帧可用回调。 645本接口为非线程安全类型接口。 646 647**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 648 649**起始版本:** 11 650 651**参数:** 652 653| 名称 | 描述 | 654| -------- | -------- | 655| image | 是指向**OH_NativeImage**实例的指针。 | 656 657**返回:** 658 659返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 660 661 662### OH_NativeImage_UpdateSurfaceImage() 663 664``` 665int32_t OH_NativeImage_UpdateSurfaceImage (OH_NativeImage * image) 666``` 667 668**描述** 669 670通过OH_NativeImage获取最新帧更新相关联的OpenGL ES纹理。 671本接口需要在Opengl ES环境上下文的线程中调用。 672本接口需要在接收到OH_OnFrameAvailableListener回调后调用。 673本接口为非线程安全类型接口。 674 675**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 676 677**起始版本:** 9 678 679**参数:** 680 681| 名称 | 描述 | 682| -------- | -------- | 683| image | 是指向**OH_NativeImage**实例的指针。 | 684 685**返回:** 686 687返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](#ohnativeerrorcode)。 688