# native_image.h ## 概述 定义获å–和使用NativeImage的相关函数 **库:** libnative_image.so **起始版本:** 9 **相关模å—:**[OH_NativeImage](_o_h___native_image.md) ## 汇总 ### 结构体 | åç§° | æè¿° | | -------- | -------- | | [OH_OnFrameAvailableListener](_o_h___on_frame_available_listener.md) | 一个OH_NativeImage的监å¬è€…,通过OH_NativeImage_SetOnFrameAvailableListeneræŽ¥å£æ³¨å†Œï¼Œ 该监å¬ç»“构体当有帧å¯ç”¨æ—¶ï¼Œå°†è§¦å‘回调 | ### 类型定义 | åç§° | æè¿° | | -------- | -------- | | typedef struct [OH_NativeImage](_o_h___native_image.md#oh_nativeimage) [OH_NativeImage](_o_h___native_image.md#oh_nativeimage) | æä¾›OH_NativeImage结构体声明。 | | typedef struct NativeWindow [OHNativeWindow](_o_h___native_image.md#ohnativewindow) | æä¾›å¯¹NativeWindow的访问功能。 | | typedef struct NativeWindowBuffer [OHNativeWindowBuffer](_o_h___native_image.md#ohnativewindowbuffer) | æä¾›NativeWindowBuffer结构体声明。 | | typedef void(\* [OH_OnFrameAvailable](_o_h___native_image.md#oh_onframeavailable)) (void \*context) | 有bufferå¯èŽ·å–æ—¶è§¦å‘的回调函数。 | | typedef struct [OH_OnFrameAvailableListener](_o_h___on_frame_available_listener.md) [OH_OnFrameAvailableListener](_o_h___native_image.md#oh_onframeavailablelistener) | 一个OH_NativeImage的监å¬è€…,通过{\@Link OH_NativeImage_SetOnFrameAvailableListener}æŽ¥å£æ³¨å†Œ 该监å¬ç»“构体,当有bufferå¯èŽ·å–æ—¶ï¼Œå°†è§¦å‘回调给用户。 | | typedef enum [OHNativeErrorCode](_o_h___native_image.md#ohnativeerrorcode) [OHNativeErrorCode](_o_h___native_image.md#ohnativeerrorcode) | 接å£é”™è¯¯ç 说明(仅用于查询)。 | ### 枚举 | åç§° | æè¿° | | -------- | -------- | | [OHNativeErrorCode](_o_h___native_image.md#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/>} | 接å£é”™è¯¯ç 说明(仅用于查询)。 | ### 函数 | åç§° | æè¿° | | -------- | -------- | | [OH_NativeImage](_o_h___native_image.md#oh_nativeimage) \* [OH_NativeImage_Create](_o_h___native_image.md#oh_nativeimage_create) (uint32_t textureId, uint32_t textureTarget) | 创建一个**OH_NativeImage**实例,该实例与OpenGL ES的纹ç†ID和纹ç†ç›®æ ‡ç›¸å…³è”。<br/>本接å£éœ€è¦ä¸Ž[OH_NativeImage_Destroy](_o_h___native_image.md#oh_nativeimage_destroy)接å£é…åˆä½¿ç”¨ï¼Œå¦åˆ™ä¼šå˜åœ¨å†…å˜æ³„露。<br/>本接å£ä¸ºéžçº¿ç¨‹å®‰å…¨ç±»åž‹æŽ¥å£ã€‚ | | [OHNativeWindow](_native_window.md#ohnativewindow) \* [OH_NativeImage_AcquireNativeWindow](_o_h___native_image.md#oh_nativeimage_acquirenativewindow) ([OH_NativeImage](_o_h___native_image.md#oh_nativeimage) \*image) | 获å–与OH_NativeImage相关è”çš„OHNativeWindow指针。<br/>本接å£ä¸ºéžçº¿ç¨‹å®‰å…¨ç±»åž‹æŽ¥å£ã€‚<br/>OH_NativeImageæžæž„时会将对应的OHNativeWindow实例释放。若从本接å£èŽ·å–OHNativeWindow指针, 当OH_NativeImage实例释放时,请将获å–到的OHNativeWindow指针置空,防æ¢åŽç»äº§ç”Ÿé‡ŽæŒ‡é’ˆã€‚ | | int32_t [OH_NativeImage_AttachContext](_o_h___native_image.md#oh_nativeimage_attachcontext) ([OH_NativeImage](_o_h___native_image.md#oh_nativeimage) \*image, uint32_t textureId) | å°†OH_NativeImageå®žä¾‹é™„åŠ åˆ°å½“å‰OpenGL ES上下文, 且该OpenGL ES纹ç†ä¼šç»‘定到 GL_TEXTURE_EXTERNAL_OES, 并通过OH_NativeImage进行更新。<br/>本接å£ä¸ºéžçº¿ç¨‹å®‰å…¨ç±»åž‹æŽ¥å£ã€‚ | | int32_t [OH_NativeImage_DetachContext](_o_h___native_image.md#oh_nativeimage_detachcontext) ([OH_NativeImage](_o_h___native_image.md#oh_nativeimage) \*image) | å°†OH_NativeImage实例从当å‰OpenGL ES上下文分离。<br/>本接å£ä¸ºéžçº¿ç¨‹å®‰å…¨ç±»åž‹æŽ¥å£ã€‚ | | int32_t [OH_NativeImage_UpdateSurfaceImage](_o_h___native_image.md#oh_nativeimage_updatesurfaceimage) ([OH_NativeImage](_o_h___native_image.md#oh_nativeimage) \*image) | 通过OH_NativeImageèŽ·å–æœ€æ–°å¸§æ›´æ–°ç›¸å…³è”çš„OpenGL ES纹ç†ã€‚<br/>本接å£éœ€è¦åœ¨Opengl ES环境上下文的线程ä¸è°ƒç”¨ã€‚<br/>本接å£éœ€è¦åœ¨æŽ¥æ”¶åˆ°[OH_OnFrameAvailableListener](_o_h___on_frame_available_listener.md)回调åŽè°ƒç”¨ã€‚<br/>本接å£ä¸ºéžçº¿ç¨‹å®‰å…¨ç±»åž‹æŽ¥å£ã€‚ | | int64_t [OH_NativeImage_GetTimestamp](_o_h___native_image.md#oh_nativeimage_gettimestamp) ([OH_NativeImage](_o_h___native_image.md#oh_nativeimage) \*image) | èŽ·å–æœ€è¿‘调用OH_NativeImage_UpdateSurfaceImage的纹ç†å›¾åƒçš„相关时间戳。<br/>本接å£ä¸ºéžçº¿ç¨‹å®‰å…¨ç±»åž‹æŽ¥å£ã€‚ | | int32_t [OH_NativeImage_GetTransformMatrix](_o_h___native_image.md#oh_nativeimage_gettransformmatrix) ([OH_NativeImage](_o_h___native_image.md#oh_nativeimage) \*image, float matrix[16]) | èŽ·å–æœ€è¿‘调用OH_NativeImage_UpdateSurfaceImage的纹ç†å›¾åƒçš„å˜åŒ–矩阵。 | | int32_t [OH_NativeImage_GetSurfaceId](_o_h___native_image.md#oh_nativeimage_getsurfaceid) ([OH_NativeImage](_o_h___native_image.md#oh_nativeimage) \*image, uint64_t \*surfaceId) | 获å–OH_NativeImageçš„surfaceç¼–å·ã€‚<br/>本接å£ä¸ºéžçº¿ç¨‹å®‰å…¨ç±»åž‹æŽ¥å£ã€‚ | | int32_t [OH_NativeImage_SetOnFrameAvailableListener](_o_h___native_image.md#oh_nativeimage_setonframeavailablelistener) ([OH_NativeImage](_o_h___native_image.md#oh_nativeimage) \*image, [OH_OnFrameAvailableListener](_o_h___on_frame_available_listener.md) listener) | 设置帧å¯ç”¨å›žè°ƒã€‚<br/>ä¸å…许在回调函数ä¸è°ƒç”¨æœ¬æ¨¡å—的其他接å£ã€‚<br/>本接å£ä¸ºéžçº¿ç¨‹å®‰å…¨ç±»åž‹æŽ¥å£ã€‚ | | int32_t [OH_NativeImage_UnsetOnFrameAvailableListener](_o_h___native_image.md#oh_nativeimage_unsetonframeavailablelistener) ([OH_NativeImage](_o_h___native_image.md#oh_nativeimage) \*image) | å–æ¶ˆè®¾ç½®å¸§å¯ç”¨å›žè°ƒã€‚<br/>本接å£ä¸ºéžçº¿ç¨‹å®‰å…¨ç±»åž‹æŽ¥å£ã€‚ | | void [OH_NativeImage_Destroy](_o_h___native_image.md#oh_nativeimage_destroy) ([OH_NativeImage](_o_h___native_image.md#oh_nativeimage) \*\*image) | 销æ¯é€šè¿‡OH_NativeImage_Create创建的**OH_NativeImage**实例, 销æ¯åŽè¯¥<br/>**OH_NativeImage**指针会被赋值为空。<br/>本接å£ä¸ºéžçº¿ç¨‹å®‰å…¨ç±»åž‹æŽ¥å£ã€‚ | | int32_t [OH_NativeImage_GetTransformMatrixV2](_o_h___native_image.md#oh_nativeimage_gettransformmatrixv2) ([OH_NativeImage](_o_h___native_image.md#oh_nativeimage) \*image, float matrix[16]) | æ ¹æ®ç”Ÿäº§ç«¯è®¾ç½®çš„æ—‹è½¬è§’åº¦ï¼ŒèŽ·å–æœ€è¿‘调用OH_NativeImage_UpdateSurfaceImage的纹ç†å›¾åƒçš„å˜åŒ–矩阵。<br/>matrix在[OH_NativeImage_UpdateSurfaceImage](_o_h___native_image.md#oh_nativeimage_updatesurfaceimage)接å£è°ƒç”¨åŽï¼Œæ‰ä¼šæ›´æ–°ã€‚<br/>本接å£ä¸ºéžçº¿ç¨‹å®‰å…¨ç±»åž‹æŽ¥å£ã€‚ | | int32_t [OH_NativeImage_AcquireNativeWindowBuffer](_o_h___native_image.md#oh_nativeimage_acquirenativewindowbuffer) ([OH_NativeImage](_o_h___native_image.md#oh_nativeimage) \*image, [OHNativeWindowBuffer](_native_window.md#ohnativewindowbuffer) \*\*nativeWindowBuffer, int \*fenceFd) | 通过消费端的**OH_NativeImage**获å–一个**OHNativeWindowBuffer**。<br/>本接å£ä¸èƒ½ä¸Ž[OH_NativeImage_UpdateSurfaceImage](_o_h___native_image.md#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](_o_h___native_image.md#oh_nativeimage_releasenativewindowbuffer)接å£é…åˆä½¿ç”¨ï¼Œå¦åˆ™ä¼šå˜åœ¨å†…å˜æ³„露。<br/>当fenceFd使用完,用户需è¦å°†å…¶close。<br/>本接å£ä¸ºéžçº¿ç¨‹å®‰å…¨ç±»åž‹æŽ¥å£ã€‚ | | int32_t [OH_NativeImage_ReleaseNativeWindowBuffer](_o_h___native_image.md#oh_nativeimage_releasenativewindowbuffer) ([OH_NativeImage](_o_h___native_image.md#oh_nativeimage) \*image, [OHNativeWindowBuffer](_native_window.md#ohnativewindowbuffer) \*nativeWindowBuffer, int fenceFd) | 通过**OH_NativeImage**实例将**OHNativeWindowBuffer**归还到buffer队列ä¸ã€‚<br/>系统会将fenFdå…³é—ï¼Œæ— éœ€ç”¨æˆ·close。<br/>本接å£ä¸ºéžçº¿ç¨‹å®‰å…¨ç±»åž‹æŽ¥å£ã€‚ | | [OH_NativeImage](_o_h___native_image.md#oh_nativeimage) \* [OH_ConsumerSurface_Create](_o_h___native_image.md#oh_consumersurface_create) () | 创建一个**OH_NativeImage**实例,作为surface的消费端。<br/>本接å£ä»…用于surface消费端的内å˜è½®è½¬ï¼Œåˆ›å»ºçš„OH_NativeImage内部ä¸ä¼šä¸»åŠ¨è¿›è¡Œå†…å˜æ¸²æŸ“处ç†ã€‚<br/>本接å£ä¸èƒ½ä¸Ž[OH_NativeImage_UpdateSurfaceImage](_o_h___native_image.md#oh_nativeimage_updatesurfaceimage)接å£åŒæ—¶ä½¿ç”¨ã€‚<br/>本接å£ä¸ŽOH_NativeImage_AcquireNativeWindowBufferå’ŒOH_NativeImage_ReleaseNativeWindowBufferé…åˆä½¿ç”¨ã€‚<br/>本接å£éœ€è¦å’Œ[OH_NativeImage_Destroy](_o_h___native_image.md#oh_nativeimage_destroy)接å£é…åˆä½¿ç”¨ï¼Œå¦åˆ™ä¼šå˜åœ¨å†…å˜æ³„露。<br/>本接å£ä¸ºéžçº¿ç¨‹å®‰å…¨ç±»åž‹æŽ¥å£ã€‚ | | int32_t [OH_ConsumerSurface_SetDefaultUsage](_o_h___native_image.md#oh_consumersurface_setdefaultusage) ([OH_NativeImage](_o_h___native_image.md#oh_nativeimage) \*image, uint64_t usage) | 设置默认读写方å¼ã€‚ 本接å£ä¸ºéžçº¿ç¨‹å®‰å…¨ç±»åž‹æŽ¥å£ã€‚ | | int32_t [OH_ConsumerSurface_SetDefaultSize](_o_h___native_image.md#oh_consumersurface_setdefaultsize) ([OH_NativeImage](_o_h___native_image.md#oh_nativeimage) \*image, int32_t width, int32_t height) | è®¾ç½®å‡ ä½•å›¾å½¢é»˜è®¤å°ºå¯¸ã€‚ 本接å£ä¸ºéžçº¿ç¨‹å®‰å…¨ç±»åž‹æŽ¥å£ã€‚ |