1# native_image.h 2<!--Kit: ArkGraphics 2D--> 3<!--Subsystem: Graphics--> 4<!--Owner: @Flix-fangyang; @li_hui180; @ding-panyun--> 5<!--Designer: @conan13234--> 6<!--Tester: @nobuggers--> 7<!--Adviser: @ge-yafang--> 8## 概述 9 10定义获取和使用NativeImage的相关函数。 11 12<!--RP1--> 13相关示例:[NDKNativeImage](https://gitcode.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Native/NdkNativeImage)<!--RP1End--> 14 15**引用文件:** <native_image/native_image.h> 16 17**库:** libnative_image.so 18 19**起始版本:** 9 20 21**相关模块:** [OH_NativeImage](capi-oh-nativeimage.md) 22 23## 汇总 24 25### 结构体 26 27| 名称 | typedef关键字 | 描述 | 28| -- | -- | -- | 29| [OH_OnFrameAvailableListener](capi-oh-nativeimage-oh-onframeavailablelistener.md) | OH_OnFrameAvailableListener | 一个OH_NativeImage的监听者,通过[OH_NativeImage_SetOnFrameAvailableListener](capi-native-image-h.md#oh_nativeimage_setonframeavailablelistener)接口注册该监听结构体,当有buffer可获取时,将触发回调给用户。 | 30| [OH_NativeImage](capi-oh-nativeimage-oh-nativeimage.md) | OH_NativeImage | 提供OH_NativeImage结构体声明。 | 31| [NativeWindow](capi-nativewindow-nativewindow.md) | OHNativeWindow | 提供对NativeWindow的访问功能。 | 32| [NativeWindowBuffer](capi-nativewindow-nativewindowbuffer.md) | OHNativeWindowBuffer | 提供NativeWindowBuffer结构体声明。 | 33 34### 函数 35 36| 名称 | typedef关键字 | 描述 | 37| -- | -- | -- | 38| [typedef void (\*OH_OnFrameAvailable)(void *context)](#oh_onframeavailable) | OH_OnFrameAvailable | 有buffer可获取时触发的回调函数。 | 39| [OH_NativeImage* OH_NativeImage_Create(uint32_t textureId, uint32_t textureTarget)](#oh_nativeimage_create) | - | 创建一个OH_NativeImage实例,该实例与OpenGL ES的纹理ID和纹理目标相关联。<br>本接口需要与[OH_NativeImage_Destroy](capi-native-image-h.md#oh_nativeimage_destroy)接口配合使用,否则会存在内存泄露。<br>本接口为非线程安全类型接口。 | 40| [OHNativeWindow* OH_NativeImage_AcquireNativeWindow(OH_NativeImage* image)](#oh_nativeimage_acquirenativewindow) | - | 获取与OH_NativeImage相关联的OHNativeWindow指针。<br>本接口为非线程安全类型接口。<br>OH_NativeImage析构时会将对应的OHNativeWindow实例释放。若从本接口获取OHNativeWindow指针,当OH_NativeImage实例释放时,请将获取到的OHNativeWindow指针置空,防止后续产生野指针。 | 41| [int32_t OH_NativeImage_AttachContext(OH_NativeImage* image, uint32_t textureId)](#oh_nativeimage_attachcontext) | - | 将OH_NativeImage实例附加到当前OpenGL ES上下文,且该OpenGL ES纹理会绑定到GL_TEXTURE_EXTERNAL_OES, 并通过OH_NativeImage进行更新。<br>本接口为非线程安全类型接口。 | 42| [int32_t OH_NativeImage_DetachContext(OH_NativeImage* image)](#oh_nativeimage_detachcontext) | - | 将OH_NativeImage实例从当前OpenGL ES上下文分离。<br>本接口为非线程安全类型接口。 | 43| [int32_t OH_NativeImage_UpdateSurfaceImage(OH_NativeImage* image)](#oh_nativeimage_updatesurfaceimage) | - | 通过OH_NativeImage获取最新帧更新相关联的OpenGL ES纹理。<br>本接口需要在Opengl ES环境上下文的线程中调用。<br>本接口需要在接收到[OH_OnFrameAvailableListener](capi-oh-nativeimage-oh-onframeavailablelistener.md)回调后调用。<br>本接口为非线程安全类型接口。 | 44| [int64_t OH_NativeImage_GetTimestamp(OH_NativeImage* image)](#oh_nativeimage_gettimestamp) | - | 获取最近调用OH_NativeImage_UpdateSurfaceImage的纹理图像的相关时间戳。<br>本接口为非线程安全类型接口。 | 45| [int32_t OH_NativeImage_GetTransformMatrix(OH_NativeImage* image, float matrix[16])](#oh_nativeimage_gettransformmatrix) | - | 获取最近调用OH_NativeImage_UpdateSurfaceImage的纹理图像的变化矩阵。 | 46| [int32_t OH_NativeImage_GetSurfaceId(OH_NativeImage* image, uint64_t* surfaceId)](#oh_nativeimage_getsurfaceid) | - | 获取OH_NativeImage的surface编号。<br>本接口为非线程安全类型接口。 | 47| [int32_t OH_NativeImage_SetOnFrameAvailableListener(OH_NativeImage* image, OH_OnFrameAvailableListener listener)](#oh_nativeimage_setonframeavailablelistener) | - | 设置帧可用回调。<br>不允许在回调函数中调用本模块的其他接口。<br>本接口为非线程安全类型接口。 | 48| [int32_t OH_NativeImage_UnsetOnFrameAvailableListener(OH_NativeImage* image)](#oh_nativeimage_unsetonframeavailablelistener) | - | 取消设置帧可用回调。<br>本接口为非线程安全类型接口。 | 49| [void OH_NativeImage_Destroy(OH_NativeImage** image)](#oh_nativeimage_destroy) | - | 销毁通过OH_NativeImage_Create创建的OH_NativeImage实例, 销毁后该<br>OH_NativeImage指针会被赋值为空。<br>本接口为非线程安全类型接口。 | 50| [int32_t OH_NativeImage_GetTransformMatrixV2(OH_NativeImage* image, float matrix[16])](#oh_nativeimage_gettransformmatrixv2) | - | 根据生产端设置的旋转角度,获取最近调用OH_NativeImage_UpdateSurfaceImage的纹理图像的变化矩阵。<br>matrix在[OH_NativeImage_UpdateSurfaceImage](capi-native-image-h.md#oh_nativeimage_updatesurfaceimage)接口调用后,才会更新。<br>本接口为非线程安全类型接口。 | 51| [int32_t OH_NativeImage_GetBufferMatrix(OH_NativeImage* image, float matrix[16])](#oh_nativeimage_getbuffermatrix) | - | 获取根据生产端设置的旋转角度和buffer实际有效内容区域计算出的变换矩阵。<br>本接口返回一个变换矩阵,该矩阵是[OH_NativeImage](capi-oh-nativeimage-oh-nativeimage.md)在消费buffer,即调用[OH_NativeImage_UpdateSurfaceImage](capi-native-image-h.md#oh_nativeimage_updatesurfaceimage)或者[OH_NativeImage_AcquireNativeWindowBuffer](capi-native-image-h.md#oh_nativeimage_acquirenativewindowbuffer)时,根据buffer的旋转角度和实际有效内容区域计算所得。<br>本接口为非线程安全类型接口。 | 52| [int32_t OH_NativeImage_AcquireNativeWindowBuffer(OH_NativeImage* image,OHNativeWindowBuffer** nativeWindowBuffer, int* fenceFd)](#oh_nativeimage_acquirenativewindowbuffer) | - | 通过消费端的OH_NativeImage获取一个OHNativeWindowBuffer。<br>本接口不能与[OH_NativeImage_UpdateSurfaceImage](capi-native-image-h.md#oh_nativeimage_updatesurfaceimage)接口同时使用。<br>本接口将会创建一个OHNativeWindowBuffer。<br>当使用OHNativeWindowBuffer时,用户需要通过[OH_NativeWindow_NativeObjectReference](capi-external-window-h.md#oh_nativewindow_nativeobjectreference)接口将其引用计数加一。<br>当OHNativeWindowBuffer使用完,用户需要通过[OH_NativeWindow_NativeObjectUnreference](capi-external-window-h.md#oh_nativewindow_nativeobjectunreference)接口将其引用计数减一。<br>本接口需要和[OH_NativeImage_ReleaseNativeWindowBuffer](capi-native-image-h.md#oh_nativeimage_releasenativewindowbuffer)接口配合使用,否则会存在内存泄露。<br>当fenceFd使用完,用户需要将其close。<br>本接口为非线程安全类型接口。 | 53| [int32_t OH_NativeImage_ReleaseNativeWindowBuffer(OH_NativeImage* image,OHNativeWindowBuffer* nativeWindowBuffer, int fenceFd)](#oh_nativeimage_releasenativewindowbuffer) | - | 通过OH_NativeImage实例将OHNativeWindowBuffer归还到buffer队列中。<br>系统会将fenceFd关闭,无需用户close。<br>本接口为非线程安全类型接口。 | 54| [OH_NativeImage* OH_ConsumerSurface_Create(void)](#oh_consumersurface_create) | - | 创建一个OH_NativeImage实例,作为surface的消费端。<br>本接口仅用于surface消费端的内存轮转,创建的OH_NativeImage内部不会主动进行内存渲染处理。<br>本接口不能与[OH_NativeImage_UpdateSurfaceImage](capi-native-image-h.md#oh_nativeimage_updatesurfaceimage)接口同时使用。<br>本接口与[OH_NativeImage_AcquireNativeWindowBuffer](capi-native-image-h.md#oh_nativeimage_acquirenativewindowbuffer)和[OH_NativeImage_ReleaseNativeWindowBuffer](capi-native-image-h.md#oh_nativeimage_releasenativewindowbuffer)配合使用。<br>本接口需要和[OH_NativeImage_Destroy](capi-native-image-h.md#oh_nativeimage_destroy)接口配合使用,否则会存在内存泄露。<br>本接口为非线程安全类型接口。 | 55| [int32_t OH_ConsumerSurface_SetDefaultUsage(OH_NativeImage* image, uint64_t usage)](#oh_consumersurface_setdefaultusage) | - | 设置默认读写方式。<br>本接口为非线程安全类型接口。 | 56| [int32_t OH_ConsumerSurface_SetDefaultSize(OH_NativeImage* image, int32_t width, int32_t height)](#oh_consumersurface_setdefaultsize) | - | 设置几何图形默认尺寸。<br>本接口为非线程安全类型接口。 | 57| [int32_t OH_NativeImage_SetDropBufferMode(OH_NativeImage* image, bool isOpen)](#oh_nativeimage_setdropbuffermode) | - | 设置OH_NativeImage是否为渲染丢帧模式。<br>处于此模式时,大部分生产端生产的buffer将会被丢弃,最新的buffer会及时上屏渲染。<br>此模式不能同时保证帧率高的要求。<br>此接口建议在[OH_NativeImage_Create](capi-native-image-h.md#oh_nativeimage_create)接口调用后立即调用。<br>此接口在与[OH_NativeImage_UpdateSurfaceImage](capi-native-image-h.md#oh_nativeimage_updatesurfaceimage)接口一起使用的场景下才会生效。<br>本接口为非线程安全类型接口。<br> | 58 59## 函数说明 60 61### OH_OnFrameAvailable() 62 63``` 64typedef void (*OH_OnFrameAvailable)(void *context) 65``` 66 67**描述** 68 69有buffer可获取时触发的回调函数。 70 71**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 72 73**起始版本:** 11 74 75 76**参数:** 77 78| 参数项 | 描述 | 79| -- | -- | 80| void *context | 用户自定义的上下文信息,会在回调触发时返回给用户。 | 81 82### OH_NativeImage_Create() 83 84``` 85OH_NativeImage* OH_NativeImage_Create(uint32_t textureId, uint32_t textureTarget) 86``` 87 88**描述** 89 90创建一个OH_NativeImage实例,该实例与OpenGL ES的纹理ID和纹理目标相关联。<br>本接口需要与[OH_NativeImage_Destroy](capi-native-image-h.md#oh_nativeimage_destroy)接口配合使用,否则会存在内存泄露。<br>本接口为非线程安全类型接口。 91 92**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 93 94**起始版本:** 9 95 96 97**参数:** 98 99| 参数项 | 描述 | 100| -- | -- | 101| uint32_t textureId | OpenGL ES的纹理ID,OH_NativeImage实例会与之相关联。 | 102| uint32_t textureTarget | OpenGL ES的纹理目标。 | 103 104**返回:** 105 106| 类型 | 说明 | 107| -- | -- | 108| OH_NativeImage* | 创建成功则返回一个指向OH_NativeImage实例的指针,否则返回NULL。 | 109 110### OH_NativeImage_AcquireNativeWindow() 111 112``` 113OHNativeWindow* OH_NativeImage_AcquireNativeWindow(OH_NativeImage* image) 114``` 115 116**描述** 117 118获取与OH_NativeImage相关联的OHNativeWindow指针。<br>本接口为非线程安全类型接口。<br>OH_NativeImage析构时会将对应的OHNativeWindow实例释放。若从本接口获取OHNativeWindow指针,当OH_NativeImage实例释放时,请将获取到的OHNativeWindow指针置空,防止后续产生野指针。 119 120**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 121 122**起始版本:** 9 123 124 125**参数:** 126 127| 参数项 | 描述 | 128| -- | -- | 129| [OH_NativeImage](capi-oh-nativeimage-oh-nativeimage.md)* image | 指向OH_NativeImage实例的指针。 | 130 131**返回:** 132 133| 类型 | 说明 | 134| -- | -- | 135| [OHNativeWindow](capi-nativewindow-nativewindow.md)* | 成功则返回一个指向OHNativeWindow实例的指针,否则返回NULL。 | 136 137### OH_NativeImage_AttachContext() 138 139``` 140int32_t OH_NativeImage_AttachContext(OH_NativeImage* image, uint32_t textureId) 141``` 142 143**描述** 144 145将OH_NativeImage实例附加到当前OpenGL ES上下文,且该OpenGL ES纹理会绑定到GL_TEXTURE_EXTERNAL_OES, 并通过OH_NativeImage进行更新。<br>本接口为非线程安全类型接口。 146 147**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 148 149**起始版本:** 9 150 151 152**参数:** 153 154| 参数项 | 描述 | 155| -- | -- | 156| [OH_NativeImage](capi-oh-nativeimage-oh-nativeimage.md)* image | 指向OH_NativeImage实例的指针。 | 157| uint32_t textureId | 是OH_NativeImage要附加到的OpenGL ES纹理的id。 | 158 159**返回:** 160 161| 类型 | 说明 | 162| -- | -- | 163| int32_t | 返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](capi-graphic-error-code-h.md#ohnativeerrorcode)。 | 164 165### OH_NativeImage_DetachContext() 166 167``` 168int32_t OH_NativeImage_DetachContext(OH_NativeImage* image) 169``` 170 171**描述** 172 173将OH_NativeImage实例从当前OpenGL ES上下文分离。<br>本接口为非线程安全类型接口。 174 175**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 176 177**起始版本:** 9 178 179 180**参数:** 181 182| 参数项 | 描述 | 183| -- | -- | 184| [OH_NativeImage](capi-oh-nativeimage-oh-nativeimage.md)* image | 指向OH_NativeImage实例的指针。 | 185 186**返回:** 187 188| 类型 | 说明 | 189| -- | -- | 190| int32_t | 返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](capi-graphic-error-code-h.md#ohnativeerrorcode)。 | 191 192### OH_NativeImage_UpdateSurfaceImage() 193 194``` 195int32_t OH_NativeImage_UpdateSurfaceImage(OH_NativeImage* image) 196``` 197 198**描述** 199 200通过OH_NativeImage获取最新帧更新相关联的OpenGL ES纹理。<br>本接口需要在Opengl ES环境上下文的线程中调用。<br>本接口需要在接收到[OH_OnFrameAvailableListener](capi-oh-nativeimage-oh-onframeavailablelistener.md)回调后调用。<br>本接口为非线程安全类型接口。 201 202**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 203 204**起始版本:** 9 205 206 207**参数:** 208 209| 参数项 | 描述 | 210| -- | -- | 211| [OH_NativeImage](capi-oh-nativeimage-oh-nativeimage.md)* image | 指向OH_NativeImage实例的指针。 | 212 213**返回:** 214 215| 类型 | 说明 | 216| -- | -- | 217| int32_t | 返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](capi-graphic-error-code-h.md#ohnativeerrorcode)。 | 218 219### OH_NativeImage_GetTimestamp() 220 221``` 222int64_t OH_NativeImage_GetTimestamp(OH_NativeImage* image) 223``` 224 225**描述** 226 227获取最近调用OH_NativeImage_UpdateSurfaceImage的纹理图像的相关时间戳。<br>本接口为非线程安全类型接口。 228 229**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 230 231**起始版本:** 9 232 233 234**参数:** 235 236| 参数项 | 描述 | 237| -- | -- | 238| [OH_NativeImage](capi-oh-nativeimage-oh-nativeimage.md)* image | 指向OH_NativeImage实例的指针。 | 239 240**返回:** 241 242| 类型 | 说明 | 243| -- | -- | 244| int64_t | 返回纹理图像的相关时间戳。 | 245 246### OH_NativeImage_GetTransformMatrix() 247 248``` 249int32_t OH_NativeImage_GetTransformMatrix(OH_NativeImage* image, float matrix[16]) 250``` 251 252**描述** 253 254获取最近调用OH_NativeImage_UpdateSurfaceImage的纹理图像的变化矩阵。 255 256**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 257 258**起始版本:** 9 259 260**废弃版本:** 从API version 12开始废弃。 261 262**替代接口:** [OH_NativeImage_GetTransformMatrixV2](capi-native-image-h.md#oh_nativeimage_gettransformmatrixv2) 263 264 265**参数:** 266 267| 参数项 | 描述 | 268| -- | -- | 269| [OH_NativeImage](capi-oh-nativeimage-oh-nativeimage.md)* image | 指向OH_NativeImage实例的指针。 | 270| matrix | 用来存储要获取的4*4的变化矩阵。 | 271 272**返回:** 273 274| 类型 | 说明 | 275| -- | -- | 276| int32_t | 返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](capi-graphic-error-code-h.md#ohnativeerrorcode)。 | 277 278### OH_NativeImage_GetSurfaceId() 279 280``` 281int32_t OH_NativeImage_GetSurfaceId(OH_NativeImage* image, uint64_t* surfaceId) 282``` 283 284**描述** 285 286获取OH_NativeImage的surface编号。<br>本接口为非线程安全类型接口。 287 288**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 289 290**起始版本:** 11 291 292 293**参数:** 294 295| 参数项 | 描述 | 296| -- | -- | 297| [OH_NativeImage](capi-oh-nativeimage-oh-nativeimage.md)* image | 指向OH_NativeImage实例的指针。 | 298| uint64_t* surfaceId | 是指向surface编号的指针。 | 299 300**返回:** 301 302| 类型 | 说明 | 303| -- | -- | 304| int32_t | 返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](capi-graphic-error-code-h.md#ohnativeerrorcode)。 | 305 306### OH_NativeImage_SetOnFrameAvailableListener() 307 308``` 309int32_t OH_NativeImage_SetOnFrameAvailableListener(OH_NativeImage* image, OH_OnFrameAvailableListener listener) 310``` 311 312**描述** 313 314设置帧可用回调。<br>不允许在回调函数中调用本模块的其他接口。<br>本接口为非线程安全类型接口。 315 316**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 317 318**起始版本:** 11 319 320 321**参数:** 322 323| 参数项 | 描述 | 324| -- | -- | 325| [OH_NativeImage](capi-oh-nativeimage-oh-nativeimage.md)* image | 指向OH_NativeImage实例的指针。 | 326| [OH_OnFrameAvailableListener](capi-oh-nativeimage-oh-onframeavailablelistener.md) listener | 表示回调监听者。 | 327 328**返回:** 329 330| 类型 | 说明 | 331| -- | -- | 332| int32_t | 返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](capi-graphic-error-code-h.md#ohnativeerrorcode)。 | 333 334### OH_NativeImage_UnsetOnFrameAvailableListener() 335 336``` 337int32_t OH_NativeImage_UnsetOnFrameAvailableListener(OH_NativeImage* image) 338``` 339 340**描述** 341 342取消设置帧可用回调。<br>本接口为非线程安全类型接口。 343 344**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 345 346**起始版本:** 11 347 348 349**参数:** 350 351| 参数项 | 描述 | 352| -- | -- | 353| [OH_NativeImage](capi-oh-nativeimage-oh-nativeimage.md)* image | 指向OH_NativeImage实例的指针。 | 354 355**返回:** 356 357| 类型 | 说明 | 358| -- | -- | 359| int32_t | 返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](capi-graphic-error-code-h.md#ohnativeerrorcode)。 | 360 361### OH_NativeImage_Destroy() 362 363``` 364void OH_NativeImage_Destroy(OH_NativeImage** image) 365``` 366 367**描述** 368 369销毁通过OH_NativeImage_Create创建的OH_NativeImage实例, 销毁后该<br>OH_NativeImage指针会被赋值为空。<br>本接口为非线程安全类型接口。 370 371**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 372 373**起始版本:** 9 374 375 376**参数:** 377 378| 参数项 | 描述 | 379| -- | -- | 380| [OH_NativeImage](capi-oh-nativeimage-oh-nativeimage.md)** image | 指向OH_NativeImage实例的指针。 | 381 382### OH_NativeImage_GetTransformMatrixV2() 383 384``` 385int32_t OH_NativeImage_GetTransformMatrixV2(OH_NativeImage* image, float matrix[16]) 386``` 387 388**描述** 389 390根据生产端设置的旋转角度,获取最近调用OH_NativeImage_UpdateSurfaceImage的纹理图像的变化矩阵。<br>matrix在[OH_NativeImage_UpdateSurfaceImage](capi-native-image-h.md#oh_nativeimage_updatesurfaceimage)接口调用后,才会更新。<br>本接口为非线程安全类型接口。 391 392**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 393 394**起始版本:** 12 395 396 397**参数:** 398 399| 参数项 | 描述 | 400| -- | -- | 401| [OH_NativeImage](capi-oh-nativeimage-oh-nativeimage.md)* image | 指向OH_NativeImage实例的指针。 | 402| matrix | 用来存储要获取的4*4的变化矩阵。 | 403 404**返回:** 405 406| 类型 | 说明 | 407| -- | -- | 408| int32_t | 返回值为0表示执行成功,其他返回值可参考[OHNativeErrorCode](capi-graphic-error-code-h.md#ohnativeerrorcode)。 | 409 410### OH_NativeImage_GetBufferMatrix() 411 412``` 413int32_t OH_NativeImage_GetBufferMatrix(OH_NativeImage* image, float matrix[16]) 414``` 415 416**描述** 417 418获取根据生产端设置的旋转角度和buffer实际有效内容区域计算出的变换矩阵。<br>本接口返回一个变换矩阵,该矩阵是[OH_NativeImage](capi-oh-nativeimage-oh-nativeimage.md)在消费buffer,即调用[OH_NativeImage_UpdateSurfaceImage](capi-native-image-h.md#oh_nativeimage_updatesurfaceimage)或者[OH_NativeImage_AcquireNativeWindowBuffer](capi-native-image-h.md#oh_nativeimage_acquirenativewindowbuffer)时,根据buffer的旋转角度和实际有效内容区域计算所得。<br>本接口为非线程安全类型接口。 419 420**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 421 422**起始版本:** 15 423 424 425**参数:** 426 427| 参数项 | 描述 | 428| -- | -- | 429| [OH_NativeImage](capi-oh-nativeimage-oh-nativeimage.md)* image | 指向[OH_NativeImage](capi-oh-nativeimage-oh-nativeimage.md)实例的指针。 | 430| matrix | 用于存储获取的4*4变换矩阵。 | 431 432**返回:** 433 434| 类型 | 说明 | 435| -- | -- | 436| int32_t | 返回接口执行结果。NATIVE_ERROR_OK,表示接口执行成功。<br> 返回NATIVE_ERROR_INVALID_ARGUMENTS,对应错误码为40001000,表示image参数为空。<br> 返回NATIVE_ERROR_MEM_OPERATION_ERROR,对应错误码为30001000,表示内存操作错误,获取变换矩阵失败。 | 437 438### OH_NativeImage_AcquireNativeWindowBuffer() 439 440``` 441int32_t OH_NativeImage_AcquireNativeWindowBuffer(OH_NativeImage* image,OHNativeWindowBuffer** nativeWindowBuffer, int* fenceFd) 442``` 443 444**描述** 445 446通过消费端的OH_NativeImage获取一个OHNativeWindowBuffer。本接口不能与[OH_NativeImage_UpdateSurfaceImage](capi-native-image-h.md#oh_nativeimage_updatesurfaceimage)接口同时使用。<br>本接口将会创建一个OHNativeWindowBuffer。当使用OHNativeWindowBuffer<时,用户需要通过[OH_NativeWindow_NativeObjectReference](capi-external-window-h.md#oh_nativewindow_nativeobjectreference)接口将其引用计数加一。当OHNativeWindowBuffer使用完,用户需要通过[OH_NativeWindow_NativeObjectUnreference](capi-external-window-h.md#oh_nativewindow_nativeobjectunreference)接口将其引用计数减一。<br>本接口需要和[OH_NativeImage_ReleaseNativeWindowBuffer](capi-native-image-h.md#oh_nativeimage_releasenativewindowbuffer)接口配合使用,否则会存在内存泄露。<br>当fenceFd使用完,用户需要将其close。<br>本接口为非线程安全类型接口。 447 448**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 449 450**起始版本:** 12 451 452 453**参数:** 454 455| 参数项 | 描述 | 456| -- | -- | 457| [OH_NativeImage](capi-oh-nativeimage-oh-nativeimage.md)* image | 指向OH_NativeImage实例的指针。 | 458| [OHNativeWindowBuffer](capi-nativewindow-nativewindowbuffer.md)** nativeWindowBuffer | 指向OHNativeWindowBuffer指针的指针。 | 459| int* fenceFd | 指向文件描述符句柄的指针。 | 460 461**返回:** 462 463| 类型 | 说明 | 464| -- | -- | 465| int32_t | 执行成功时返回NATIVE_ERROR_OK。<br> image, nativeWindowBuffer, fenceFd是空指针时返回NATIVE_ERROR_INVALID_ARGUMENTS。<br> 没有buffer可以消费时返回NATIVE_ERROR_NO_BUFFER。 | 466 467### OH_NativeImage_ReleaseNativeWindowBuffer() 468 469``` 470int32_t OH_NativeImage_ReleaseNativeWindowBuffer(OH_NativeImage* image,OHNativeWindowBuffer* nativeWindowBuffer, int fenceFd) 471``` 472 473**描述** 474 475通过OH_NativeImage实例将OHNativeWindowBuffer归还到buffer队列中。<br>系统会将fenceFd关闭,无需用户close。<br>本接口为非线程安全类型接口。 476 477**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 478 479**起始版本:** 12 480 481 482**参数:** 483 484| 参数项 | 描述 | 485| -- | -- | 486| [OH_NativeImage](capi-oh-nativeimage-oh-nativeimage.md)* image | 指向OH_NativeImage实例的指针。 | 487| [OHNativeWindowBuffer](capi-nativewindow-nativewindowbuffer.md)* nativeWindowBuffer | 指向OHNativeWindowBuffer实例的指针。 | 488| int fenceFd | 指向文件描述符句柄, 用于并发同步控制。 | 489 490**返回:** 491 492| 类型 | 说明 | 493| -- | -- | 494| int32_t | 执行成功时返回NATIVE_ERROR_OK。<br> image, nativeWindowBuffer是空指针时返回NATIVE_ERROR_INVALID_ARGUMENTS。<br> nativeWindowBuffer为状态非法时返回NATIVE_ERROR_BUFFER_STATE_INVALID。<br> nativeWindowBuffer不在缓存中返回NATIVE_ERROR_BUFFER_NOT_IN_CACHE。 | 495 496### OH_ConsumerSurface_Create() 497 498``` 499OH_NativeImage* OH_ConsumerSurface_Create(void) 500``` 501 502**描述** 503 504创建一个OH_NativeImage实例,作为surface的消费端。<br>本接口仅用于surface消费端的内存轮转,创建的OH_NativeImage内部不会主动进行内存渲染处理。<br>本接口不能与[OH_NativeImage_UpdateSurfaceImage](capi-native-image-h.md#oh_nativeimage_updatesurfaceimage)接口同时使用。<br>本接口与[OH_NativeImage_AcquireNativeWindowBuffer](capi-native-image-h.md#oh_nativeimage_acquirenativewindowbuffer)和[OH_NativeImage_ReleaseNativeWindowBuffer](capi-native-image-h.md#oh_nativeimage_releasenativewindowbuffer)配合使用。<br>本接口需要和[OH_NativeImage_Destroy](capi-native-image-h.md#oh_nativeimage_destroy)接口配合使用,否则会存在内存泄露。<br>本接口为非线程安全类型接口。 505 506**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 507 508**起始版本:** 12 509 510**返回:** 511 512| 类型 | 说明 | 513| -- | -- | 514| [OH_NativeImage](capi-oh-nativeimage-oh-nativeimage.md)* | 成功则返回一个指向OH_NativeImage实例的指针,否则返回NULL。 | 515 516### OH_ConsumerSurface_SetDefaultUsage() 517 518``` 519int32_t OH_ConsumerSurface_SetDefaultUsage(OH_NativeImage* image, uint64_t usage) 520``` 521 522**描述** 523 524设置默认读写方式。<br>本接口为非线程安全类型接口。 525 526**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 527 528**起始版本:** 13 529 530 531**参数:** 532 533| 参数项 | 描述 | 534| -- | -- | 535| [OH_NativeImage](capi-oh-nativeimage-oh-nativeimage.md)* image | 指向OH_NativeImage实例的指针。 | 536| uint64_t usage | 表示读写方式。枚举值参考[OH_NativeBuffer_Usage](capi-native-buffer-h.md#oh_nativebuffer_usage)。 | 537 538**返回:** 539 540| 类型 | 说明 | 541| -- | -- | 542| int32_t | 执行成功时返回NATIVE_ERROR_OK。<br> image是空指针时返回NATIVE_ERROR_INVALID_ARGUMENTS。 | 543 544### OH_ConsumerSurface_SetDefaultSize() 545 546``` 547int32_t OH_ConsumerSurface_SetDefaultSize(OH_NativeImage* image, int32_t width, int32_t height) 548``` 549 550**描述** 551 552设置几何图形默认尺寸。<br>本接口为非线程安全类型接口。 553 554**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 555 556**起始版本:** 13 557 558 559**参数:** 560 561| 参数项 | 描述 | 562| -- | -- | 563| [OH_NativeImage](capi-oh-nativeimage-oh-nativeimage.md)* image | 指向OH_NativeImage实例的指针。 | 564| int32_t width | 表示几何图形宽度,取值范围大于0,单位为像素。 | 565| int32_t height | 表示几何图形高度,取值范围大于0,单位为像素。 | 566 567**返回:** 568 569| 类型 | 说明 | 570| -- | -- | 571| int32_t | 执行成功时返回NATIVE_ERROR_OK。<br> image是空指针时,或width、height小于等于0时返回NATIVE_ERROR_INVALID_ARGUMENTS。 | 572 573### OH_NativeImage_SetDropBufferMode() 574 575``` 576int32_t OH_NativeImage_SetDropBufferMode(OH_NativeImage* image, bool isOpen) 577``` 578 579**描述** 580 581设置OH_NativeImage是否为渲染丢帧模式。<br>处于此模式时,大部分生产端生产的buffer将会被丢弃,最新的buffer会及时上屏渲染。<br>此模式不能同时保证帧率高的要求。<br>此接口建议在[OH_NativeImage_Create](capi-native-image-h.md#oh_nativeimage_create)接口调用后立即调用。<br>此接口在与[OH_NativeImage_UpdateSurfaceImage](capi-native-image-h.md#oh_nativeimage_updatesurfaceimage)接口一起使用的场景下才会生效。<br>本接口为非线程安全类型接口。<br>通过[OH_NativeImage_SetOnFrameAvailableListener](capi-native-image-h.md#oh_nativeimage_setonframeavailablelistener)设置的listener回调不会因为设置了丢帧模式而减少。<br> 582 583**系统能力:** SystemCapability.Graphic.Graphic2D.NativeImage 584 585**起始版本:** 17 586 587 588**参数:** 589 590| 参数项 | 描述 | 591| -- | -- | 592| [OH_NativeImage](capi-oh-nativeimage-oh-nativeimage.md)* image | 指向OH_NativeImage实例的指针。 | 593| bool isOpen | 是否设置渲染丢帧。true表示设置为渲染丢帧模式,false表示不设置。 | 594 595**返回:** 596 597| 类型 | 说明 | 598| -- | -- | 599| int32_t | 执行成功时返回NATIVE_ERROR_OK。<br> image是空指针时返回NATIVE_ERROR_INVALID_ARGUMENTS。 | 600 601 602