# OH_NativeImage ## Overview The **OH_NativeImage** module provides the capabilities of **NativeImage**. Functioning as a data consumer, it is used to associate data with the OpenGL texture. It is used in the OpenGL environment. **System capability**: SystemCapability.Graphic.Graphic2D.NativeImage **Since**: 9 ## Summary ### Files | Name| Description| | -------- | -------- | | [native_image.h](native__image_8h.md) | Defines the functions for obtaining and using **NativeImage**.| ### Structs | Name| Description| | -------- | -------- | | [OH_OnFrameAvailableListener](_o_h___on_frame_available_listener.md) | Defines an **OH_NativeImage** listener, which is registered through **OH_NativeImage_SetOnFrameAvailableListener**. The listener triggers a callback when a frame is available.| ### Types | Name| Description| | -------- | -------- | | typedef struct [OH_NativeImage](#oh_nativeimage) [OH_NativeImage](#oh_nativeimage) | Provides the declaration of an **OH_NativeImage** struct. | | typedef struct NativeWindow [OHNativeWindow](#ohnativewindow) | Provides the capability of accessing the **NativeWindow**. | | typedef struct NativeWindowBuffer [OHNativeWindowBuffer](#ohnativewindowbuffer) | Provides the declaration of a **NativeWindowBuffer** struct.| | typedef void(\* [OH_OnFrameAvailable](#oh_onframeavailable)) (void \*context) | Defines the callback function triggered when a frame is available. | | typedef struct [OH_OnFrameAvailableListener](_o_h___on_frame_available_listener.md) [OH_OnFrameAvailableListener](#oh_onframeavailablelistener) | Defines an **OH_NativeImage** listener, which is registered through **OH_NativeImage_SetOnFrameAvailableListener**. The listener triggers a callback when a frame is available. | | typedef enum [OHNativeErrorCode](#ohnativeerrorcode) [OHNativeErrorCode](#ohnativeerrorcode) | Defines an enum for the error codes. | ### Enums | Name| Description| | -------- | -------- | | [OHNativeErrorCode](#ohnativeerrorcode-1) {
NATIVE_ERROR_OK = 0, NATIVE_ERROR_INVALID_ARGUMENTS = 40001000, NATIVE_ERROR_NO_PERMISSION = 40301000, NATIVE_ERROR_NO_BUFFER = 40601000,
NATIVE_ERROR_NO_CONSUMER = 41202000, NATIVE_ERROR_NOT_INIT = 41203000, NATIVE_ERROR_CONSUMER_CONNECTED = 41206000, NATIVE_ERROR_BUFFER_STATE_INVALID = 41207000,
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,
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
} | Enumerates the error codes. | ### Functions | Name| Description| | -------- | -------- | | [OH_NativeImage](#oh_nativeimage) \* [OH_NativeImage_Create](#oh_nativeimage_create) (uint32_t textureId, uint32_t textureTarget) | Creates an **OH_NativeImage** instance to be associated with the OpenGL ES texture ID and target.
This function must be used in pair with [OH_NativeImage_Destroy](#oh_nativeimage_destroy). Otherwise, memory leak occurs.
This function is not thread-safe.| | [OHNativeWindow](_native_window.md#ohnativewindow) \* [OH_NativeImage_AcquireNativeWindow](#oh_nativeimage_acquirenativewindow) ([OH_NativeImage](#oh_nativeimage) \*image) | Obtains an **OHNativeWindow** instance associated with an **OH_NativeImage** instance.
This function is not thread-safe.
When **OH_NativeImage** is being destructed, the corresponding **OHNativeWindow** instance is released. If the **OHNativeWindow** pointer is obtained by using this function, set the pointer to null when releasing the **OH_NativeImage** instance, so as to prevent subsequent wild pointers.| | int32_t [OH_NativeImage_AttachContext](#oh_nativeimage_attachcontext) ([OH_NativeImage](#oh_nativeimage) \*image, uint32_t textureId) | Attaches an **OH_NativeImage** instance to the current OpenGL ES context. The OpenGL ES texture will be bound to an **GL_TEXTURE_EXTERNAL_OES** instance and updated through the **OH_NativeImage** instance.
This function is not thread-safe.| | int32_t [OH_NativeImage_DetachContext](#oh_nativeimage_detachcontext) ([OH_NativeImage](#oh_nativeimage) \*image) | Detaches an **OH_NativeImage** instance from the current OpenGL ES context.
This function is not thread-safe.| | int32_t [OH_NativeImage_UpdateSurfaceImage](#oh_nativeimage_updatesurfaceimage) ([OH_NativeImage](#oh_nativeimage) \*image) | Updates the OpenGL ES texture associated with the latest frame through an **OH_NativeImage** instance.
This function must be called in a thread of the OpenGL ES context.
This function must be called after the [OH_OnFrameAvailableListener](_o_h___on_frame_available_listener.md) callback is triggered.
This function is not thread-safe.| | int64_t [OH_NativeImage_GetTimestamp](#oh_nativeimage_gettimestamp) ([OH_NativeImage](#oh_nativeimage) \*image) | Obtains the timestamp of the texture image that recently called the **OH_NativeImage_UpdateSurfaceImage** function.
This function is not thread-safe.| | int32_t [OH_NativeImage_GetTransformMatrix](#oh_nativeimage_gettransformmatrix) ([OH_NativeImage](#oh_nativeimage) \*image, float matrix[16]) | Obtains the transformation matrix of the texture image that recently called the **OH_NativeImage_UpdateSurfaceImage** function.| | int32_t [OH_NativeImage_GetSurfaceId](#oh_nativeimage_getsurfaceid) ([OH_NativeImage](#oh_nativeimage) \*image, uint64_t \*surfaceId) | Obtains the surface ID of an **OH_NativeImage** instance.
This function is not thread-safe.| | int32_t [OH_NativeImage_SetOnFrameAvailableListener](#oh_nativeimage_setonframeavailablelistener) ([OH_NativeImage](#oh_nativeimage) \*image, [OH_OnFrameAvailableListener](_o_h___on_frame_available_listener.md) listener) | Registers a listener to listen for frame availability events.
Do not call other functions of this module in the callback.
This function is not thread-safe.| | int32_t [OH_NativeImage_UnsetOnFrameAvailableListener](#oh_nativeimage_unsetonframeavailablelistener) ([OH_NativeImage](#oh_nativeimage) \*image) | Deregisters the listener used to listen for frame availability events.
This function is not thread-safe.| | void [OH_NativeImage_Destroy](#oh_nativeimage_destroy) ([OH_NativeImage](#oh_nativeimage) \*\*image) | Destroys an **OH_NativeImage** instance created by calling **OH_NativeImage_Create**. After the instance is destroyed,
the pointer to the **OH_NativeImage** instance is assigned **NULL**.
This function is not thread-safe.| | int32_t [OH_NativeImage_GetTransformMatrixV2](#oh_nativeimage_gettransformmatrixv2) ([OH_NativeImage](#oh_nativeimage) \*image, float matrix[16]) | Obtains, based on the rotation angle set by the producer, the transform matrix of the texture image that recently called the **OH_NativeImage_UpdateSurfaceImage** function.
The matrix is updated only after [OH_NativeImage_UpdateSurfaceImage](#oh_nativeimage_updatesurfaceimage) is called.
This function is not thread-safe.| | int32_t [OH_NativeImage_AcquireNativeWindowBuffer](#oh_nativeimage_acquirenativewindowbuffer) ([OH_NativeImage](#oh_nativeimage) \*image, [OHNativeWindowBuffer](_native_window.md#ohnativewindowbuffer) \*\*nativeWindowBuffer, int \*fenceFd) | Obtains an **OHNativeWindowBuffer** instance through an **OH_NativeImage** instance on the consumer side.
This function cannot be used together with [OH_NativeImage_UpdateSurfaceImage](#oh_nativeimage_updatesurfaceimage).
This function creates an **OHNativeWindowBuffer**.
When using the **OHNativeWindowBuffer**, call [OH_NativeWindow_NativeObjectReference](_native_window.md#oh_nativewindow_nativeobjectreference) to increase its reference count by one.
When finishing using the **OHNativeWindowBuffer**, call [OH_NativeWindow_NativeObjectUnreference](_native_window.md#oh_nativewindow_nativeobjectunreference) to decrease the reference count by one.
This function must be used in pair with [OH_NativeImage_ReleaseNativeWindowBuffer](#oh_nativeimage_releasenativewindowbuffer). Otherwise, memory leak occurs.
When **fenceFd** is used up, you must close it.
This function is not thread-safe.| | int32_t [OH_NativeImage_ReleaseNativeWindowBuffer](#oh_nativeimage_releasenativewindowbuffer) ([OH_NativeImage](#oh_nativeimage) \*image, [OHNativeWindowBuffer](_native_window.md#ohnativewindowbuffer) \*nativeWindowBuffer, int fenceFd) | Releases an **OHNativeWindowBuffer** instance through an **OH_NativeImage** instance.
The system will close **fenFd**. You do not need to close it.
This function is not thread-safe.| | [OH_NativeImage](#oh_nativeimage) \* [OH_ConsumerSurface_Create](#oh_consumersurface_create) () | Creates an **OH_NativeImage** instance as the consumer of the surface.
This function is used only for memory cycling of the surface consumer. Memory rendering is not proactively performed in the created **OH_NativeImage** instance.
This function cannot be used together with [OH_NativeImage_UpdateSurfaceImage](#oh_nativeimage_updatesurfaceimage).
This function must be used in pair with **OH_NativeImage_AcquireNativeWindowBuffer** and **OH_NativeImage_ReleaseNativeWindowBuffer**.
This function must be used in pair with [OH_NativeImage_Destroy](#oh_nativeimage_destroy). Otherwise, memory leak occurs.
This function is not thread-safe.| | int32_t [OH_ConsumerSurface_SetDefaultUsage](#oh_consumersurface_setdefaultusage) ([OH_NativeImage](#oh_nativeimage) \*image, uint64_t usage) | Sets the default read/write mode. This function is not thread-safe.| | int32_t [OH_ConsumerSurface_SetDefaultSize](#oh_consumersurface_setdefaultsize) ([OH_NativeImage](#oh_nativeimage) \*image, int32_t width, int32_t height) | Sets the default size of a geometric shape. This function is not thread-safe.| ## Type Description ### OH_NativeImage ``` typedef struct OH_NativeImage OH_NativeImage ``` **Description** Provides the declaration of an **OH_NativeImage** struct. **Since**: 9 ### OH_OnFrameAvailable ``` typedef void(* OH_OnFrameAvailable) (void *context) ``` **Description** Defines the callback function triggered when a frame is available. **System capability**: SystemCapability.Graphic.Graphic2D.NativeImage **Since**: 11 **Parameters** | Name| Description| | -------- | -------- | | context | User-defined context information, which is returned when the callback is triggered.| ### OH_OnFrameAvailableListener ``` typedef struct OH_OnFrameAvailableListener OH_OnFrameAvailableListener ``` **Description** Defines an **OH_NativeImage** listener, which is registered through [OH_NativeImage_SetOnFrameAvailableListener](#oh_nativeimage_setonframeavailablelistener). The listener triggers a callback when a frame is available. **Since**: 11 ### OHNativeErrorCode ``` typedef enum OHNativeErrorCode OHNativeErrorCode ``` **Description** Defines an enum for the error codes. **Since**: 12 ### OHNativeWindow ``` typedef struct NativeWindow OHNativeWindow ``` **Description** Provides the capability of accessing the **NativeWindow**. **Since**: 9 ### OHNativeWindowBuffer ``` typedef struct NativeWindowBuffer OHNativeWindowBuffer ``` **Description** Provides the declaration of a **NativeWindowBuffer** struct. **Since**: 12 ## Enum Description ### OHNativeErrorCode ``` enum OHNativeErrorCode ``` **Description** Enumerates the error codes. **Since**: 12 | Value| Description| | -------- | -------- | | NATIVE_ERROR_OK | The operation is successful. | | NATIVE_ERROR_INVALID_ARGUMENTS | An input parameter is invalid. | | NATIVE_ERROR_NO_PERMISSION | You do not have the permission to perform the operation. | | NATIVE_ERROR_NO_BUFFER | No buffer is available. | | NATIVE_ERROR_NO_CONSUMER | The consumer does not exist. | | NATIVE_ERROR_NOT_INIT | Not initialized. | | NATIVE_ERROR_CONSUMER_CONNECTED | The consumer is connected. | | NATIVE_ERROR_BUFFER_STATE_INVALID | The buffer status does not meet the expectation. | | NATIVE_ERROR_BUFFER_IN_CACHE | The buffer is already in the buffer queue. | | NATIVE_ERROR_BUFFER_QUEUE_FULL | The queue is full. | | NATIVE_ERROR_BUFFER_NOT_IN_CACHE | The buffer is not in the buffer queue. | | NATIVE_ERROR_CONSUMER_DISCONNECTED | The consumer is disconnected.| | NATIVE_ERROR_CONSUMER_NO_LISTENER_REGISTERED | No listener is registered on the consumer side.| | NATIVE_ERROR_UNSUPPORTED | The device or platform does not support the operation. | | NATIVE_ERROR_UNKNOWN | Unknown error. Check the log. | | NATIVE_ERROR_HDI_ERROR | Failed to call the HDI. | | NATIVE_ERROR_BINDER_ERROR | Cross-process communication failed. | | NATIVE_ERROR_EGL_STATE_UNKNOWN | The EGL environment is abnormal. | | NATIVE_ERROR_EGL_API_FAILED | Failed to call the EGL APIs. | ## Function Description ### OH_ConsumerSurface_SetDefaultUsage() ``` int32_t OH_ConsumerSurface_SetDefaultUsage (OH_NativeImage* image, uint64_t usage ) ``` **Description** Sets the default read/write mode. This function is not thread-safe. **System capability**: SystemCapability.Graphic.Graphic2D.NativeImage **Since**: 13 **Parameters** | Name| Description| | -------- | -------- | | image | Pointer to an **OH_NativeImage** instance.| | usage | Read/write mode. For details about the available options, see **OH_NativeBuffer_Usage**.| **Returns** Returns **NATIVE_ERROR_OK** if the operation is successful. Returns **NATIVE_ERROR_INVALID_ARGUMENTS** if **image** is a null pointer. ### OH_ConsumerSurface_SetDefaultSize() ``` int32_t OH_ConsumerSurface_SetDefaultSize (OH_NativeImage* image, int32_t width, int32_t height ) ``` **Description** Sets the default size of a geometric shape. This function is not thread-safe. **System capability**: SystemCapability.Graphic.Graphic2D.NativeImage **Since**: 13 **Parameters** | Name| Description| | -------- | -------- | | image | Pointer to an **OH_NativeImage** instance.| | width | Width of the geometric shape. The value is greater than 0, in pixels.| | height | Height of the geometric shape. The value is greater than 0, in pixels.| **Returns** Returns **NATIVE_ERROR_OK** if the operation is successful. Returns **NATIVE_ERROR_INVALID_ARGUMENTS** if **image** is a null pointer or **width** or **height** is less than 0. ### OH_ConsumerSurface_Create() ``` OH_NativeImage* OH_ConsumerSurface_Create () ``` **Description** Creates an **OH_NativeImage** instance as the consumer of the surface. This function is used only for memory cycling of the surface consumer. Memory rendering is not proactively performed in the created **OH_NativeImage** instance. This function cannot be used together with [OH_NativeImage_UpdateSurfaceImage](#oh_nativeimage_updatesurfaceimage). This function must be used in pair with **OH_NativeImage_AcquireNativeWindowBuffer** and **OH_NativeImage_ReleaseNativeWindowBuffer**. This function must be used in pair with [OH_NativeImage_Destroy](#oh_nativeimage_destroy). Otherwise, memory leak occurs. This function is not thread-safe. **System capability**: SystemCapability.Graphic.Graphic2D.NativeImage **Since**: 12 **Returns** Returns a pointer to the **OH_NativeImage** instance if the operation is successful; returns **NULL** otherwise. ### OH_NativeImage_AcquireNativeWindowBuffer() ``` int32_t OH_NativeImage_AcquireNativeWindowBuffer (OH_NativeImage* image, OHNativeWindowBuffer** nativeWindowBuffer, int* fenceFd ) ``` **Description** Obtains an **OHNativeWindowBuffer** instance through an **OH_NativeImage** instance on the consumer side. This function cannot be used together with [OH_NativeImage_UpdateSurfaceImage](#oh_nativeimage_updatesurfaceimage). This function creates an **OHNativeWindowBuffer**. When using the **OHNativeWindowBuffer**, call **OH_NativeWindow_NativeObjectReference** to increase its reference count by one. When finishing using the **OHNativeWindowBuffer**, call **OH_NativeWindow_NativeObjectUnreference** to decrease the reference count by one. This function must be used in pair with [OH_NativeImage_ReleaseNativeWindowBuffer](#oh_nativeimage_releasenativewindowbuffer). Otherwise, memory leak occurs. When **fenceFd** is used up, you must close it. This function is not thread-safe. **System capability**: SystemCapability.Graphic.Graphic2D.NativeImage **Since**: 12 **Parameters** | Name| Description| | -------- | -------- | | image | Pointer to an **OH_NativeImage** instance.| | nativeWindowBuffer | Double pointer to the **OHNativeWindowBuffer** instance obtained.| | fenceFd | Pointer to the file descriptor handle.| **Returns** Returns **NATIVE_ERROR_OK** if the operation is successful. Returns **NATIVE_ERROR_INVALID_ARGUMENTS** if **image**, **nativeWindowBuffer**, or **fenceFd** is a null pointer. Returns **NATIVE_ERROR_NO_BUFFER** if no buffer is available for consumption. ### OH_NativeImage_ReleaseNativeWindowBuffer() ``` int32_t OH_NativeImage_ReleaseNativeWindowBuffer (OH_NativeImage* image, OHNativeWindowBuffer* nativeWindowBuffer, int fenceFd ) ``` **Description** Releases an **OHNativeWindowBuffer** instance through an **OH_NativeImage** instance. The system will close **fenFd**. You do not need to close it. This function is not thread-safe. **System capability**: SystemCapability.Graphic.Graphic2D.NativeImage **Since**: 12 **Parameters** | Name| Description| | -------- | -------- | | image | Pointer to an **OH_NativeImage** instance.| | nativeWindowBuffer | Pointer to an **OHNativeWindowBuffer** instance.| | fenceFd | File descriptor handle, which is used for concurrent synchronization control.| **Returns** Returns **NATIVE_ERROR_OK** if the operation is successful. Returns **NATIVE_ERROR_INVALID_ARGUMENTS** if **image** or **nativeWindowBuffer** is a null pointer. Returns **NATIVE_ERROR_BUFFER_STATE_INVALID** if the status of **nativeWindowBuffer** is invalid. Returns **NATIVE_ERROR_BUFFER_NOT_IN_CACHE** if **nativeWindowBuffer** is not in the cache. ### OH_NativeImage_AcquireNativeWindow() ``` OHNativeWindow* OH_NativeImage_AcquireNativeWindow (OH_NativeImage * image) ``` **Description** Obtains an **OHNativeWindow** instance associated with an **OH_NativeImage** instance. This function is not thread-safe. When **OH_NativeImage** is being destructed, the corresponding **OHNativeWindow** instance is released. If the **OHNativeWindow** pointer is obtained by using this function, set the pointer to null when releasing the **OH_NativeImage** instance, so as to prevent subsequent wild pointers. **System capability**: SystemCapability.Graphic.Graphic2D.NativeImage **Since**: 9 **Parameters** | Name| Description| | -------- | -------- | | image | Pointer to an **OH_NativeImage** instance.| **Returns** Returns a pointer to the **OHNativeWindow** instance if the operation is successful; returns **NULL** otherwise. ### OH_NativeImage_AttachContext() ``` int32_t OH_NativeImage_AttachContext (OH_NativeImage * image, uint32_t textureId ) ``` **Description** Attaches an **OH_NativeImage** instance to the current OpenGL ES context. The OpenGL ES texture will be bound to an **GL_TEXTURE_EXTERNAL_OES** instance and updated through the **OH_NativeImage** instance. This function is not thread-safe. **System capability**: SystemCapability.Graphic.Graphic2D.NativeImage **Since**: 9 **Parameters** | Name| Description| | -------- | -------- | | image | Pointer to an **OH_NativeImage** instance.| | textureId | ID of the OpenGL ES texture to which the **OH_NativeImage** instance is to be attached.| **Returns** Returns **0** if the operation is successful; returns an error code defined in [OHNativeErrorCode](#ohnativeerrorcode) otherwise. ### OH_NativeImage_Create() ``` OH_NativeImage* OH_NativeImage_Create (uint32_t textureId, uint32_t textureTarget ) ``` **Description** Creates an **OH_NativeImage** instance to be associated with the OpenGL ES texture ID and target. This function must be used in pair with **OH_NativeImage_Destroy**. Otherwise, memory leak occurs. This function is not thread-safe. **System capability**: SystemCapability.Graphic.Graphic2D.NativeImage **Since**: 9 **Parameters** | Name| Description| | -------- | -------- | | textureId | OpenGL ES texture ID.| | textureTarget | OpenGL ES texture target.| **Returns** Returns a pointer to the **OH_NativeImage** instance if the operation is successful; returns **NULL** otherwise. ### OH_NativeImage_Destroy() ``` void OH_NativeImage_Destroy (OH_NativeImage ** image) ``` **Description** Destroys an **OH_NativeImage** instance created by calling **OH_NativeImage_Create**. After the instance is destroyed, the pointer to the **OH_NativeImage** instance is assigned **NULL**. This function is not thread-safe. **System capability**: SystemCapability.Graphic.Graphic2D.NativeImage **Since**: 9 **Parameters** | Name| Description| | -------- | -------- | | image | Pointer to an **OH_NativeImage** instance.| ### OH_NativeImage_DetachContext() ``` int32_t OH_NativeImage_DetachContext (OH_NativeImage * image) ``` **Description** Detaches an **OH_NativeImage** instance from the current OpenGL ES context. This function is not thread-safe. **System capability**: SystemCapability.Graphic.Graphic2D.NativeImage **Since**: 9 **Parameters** | Name| Description| | -------- | -------- | | image | Pointer to an **OH_NativeImage** instance.| **Returns** Returns **0** if the operation is successful; returns an error code defined in [OHNativeErrorCode](#ohnativeerrorcode) otherwise. ### OH_NativeImage_GetSurfaceId() ``` int32_t OH_NativeImage_GetSurfaceId (OH_NativeImage * image, uint64_t * surfaceId ) ``` **Description** Obtains the surface ID of an **OH_NativeImage** instance. This function is not thread-safe. **System capability**: SystemCapability.Graphic.Graphic2D.NativeImage **Since**: 11 **Parameters** | Name| Description| | -------- | -------- | | image | Pointer to an **OH_NativeImage** instance.| | surfaceId | Pointer to the surface ID.| **Returns** Returns **0** if the operation is successful; returns an error code defined in [OHNativeErrorCode](#ohnativeerrorcode) otherwise. ### OH_NativeImage_GetTimestamp() ``` int64_t OH_NativeImage_GetTimestamp (OH_NativeImage * image) ``` **Description** Obtains the timestamp of the texture image that recently called the **OH_NativeImage_UpdateSurfaceImage** function. This function is not thread-safe. **System capability**: SystemCapability.Graphic.Graphic2D.NativeImage **Since**: 9 **Parameters** | Name| Description| | -------- | -------- | | image | Pointer to an **OH_NativeImage** instance.| **Returns** Returns the timestamp of the texture image. ### OH_NativeImage_GetTransformMatrix() ``` int32_t OH_NativeImage_GetTransformMatrix (OH_NativeImage * image, float matrix[16] ) ``` **Description** Obtains the transformation matrix of the texture image that recently called the **OH_NativeImage_UpdateSurfaceImage** function. **System capability**: SystemCapability.Graphic.Graphic2D.NativeImage **Deprecated from**: 12 **Substitute**: [OH_NativeImage_GetTransformMatrixV2](#oh_nativeimage_gettransformmatrixv2) **Since**: 9 **Parameters** | Name| Description| | -------- | -------- | | image | Pointer to an **OH_NativeImage** instance.| | matrix | Buffer used to store the 4 \* 4 transform matrix obtained.| **Returns** Returns **0** if the operation is successful; returns an error code defined in [OHNativeErrorCode](#ohnativeerrorcode) otherwise. ### OH_NativeImage_GetTransformMatrixV2() ``` int32_t OH_NativeImage_GetTransformMatrixV2 (OH_NativeImage* image, float matrix[16] ) ``` **Description** Obtains, based on the rotation angle set by the producer, the transform matrix of the texture image that recently called the **OH_NativeImage_UpdateSurfaceImage** function. The matrix is updated only after **OH_NativeImage_UpdateSurfaceImage** is called. This function is not thread-safe. **System capability**: SystemCapability.Graphic.Graphic2D.NativeImage **Since**: 12 **Parameters** | Name| Description| | -------- | -------- | | image | Pointer to an **OH_NativeImage** instance. | | matrix | Buffer used to store the 4 \* 4 transform matrix obtained. | **Returns** Returns **0** if the operation is successful; returns an error code defined in [OHNativeErrorCode](#ohnativeerrorcode) otherwise. ### OH_NativeImage_SetOnFrameAvailableListener() ``` int32_t OH_NativeImage_SetOnFrameAvailableListener (OH_NativeImage * image, OH_OnFrameAvailableListener listener ) ``` **Description** Registers a listener to listen for frame availability events. Do not call other functions of this module in the callback. This function is not thread-safe. **System capability**: SystemCapability.Graphic.Graphic2D.NativeImage **Since**: 11 **Parameters** | Name| Description| | -------- | -------- | | image | Pointer to an **OH_NativeImage** instance.| | listener | Listener to register.| **Returns** Returns **0** if the operation is successful; returns an error code defined in [OHNativeErrorCode](#ohnativeerrorcode) otherwise. ### OH_NativeImage_UnsetOnFrameAvailableListener() ``` int32_t OH_NativeImage_UnsetOnFrameAvailableListener (OH_NativeImage * image) ``` **Description** Deregisters the listener used to listen for frame availability events. This function is not thread-safe. **System capability**: SystemCapability.Graphic.Graphic2D.NativeImage **Since**: 11 **Parameters** | Name| Description| | -------- | -------- | | image | Pointer to an **OH_NativeImage** instance.| **Returns** Returns **0** if the operation is successful; returns an error code defined in [OHNativeErrorCode](#ohnativeerrorcode) otherwise. ### OH_NativeImage_UpdateSurfaceImage() ``` int32_t OH_NativeImage_UpdateSurfaceImage (OH_NativeImage * image) ``` **Description** Updates the OpenGL ES texture associated with the latest frame through an **OH_NativeImage** instance. This function must be called in a thread of the OpenGL ES context. This function must be called after the **OH_OnFrameAvailableListener** callback is triggered. This function is not thread-safe. **System capability**: SystemCapability.Graphic.Graphic2D.NativeImage **Since**: 9 **Parameters** | Name| Description| | -------- | -------- | | image | Pointer to an **OH_NativeImage** instance.| **Returns** Returns **0** if the operation is successful; returns an error code defined in [OHNativeErrorCode](#ohnativeerrorcode) otherwise.