1# native_avbuffer.h 2 3## 概述 4 5声明了媒体数据结构AVBuffer的函数接口。 6 7**引用文件:** <multimedia/player_framework/native_avbuffer.h> 8 9**库:** libnative_media_core.so 10 11**系统能力:** SystemCapability.Multimedia.Media.Core 12 13**起始版本:** 11 14 15**相关模块:** [Core](capi-core.md) 16 17**相关示例:** [AVCodec](https://gitcode.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Media/AVCodec) 18 19## 汇总 20 21### 结构体 22 23| 名称 | typedef关键字 | 描述 | 24| -- | -- | -- | 25| [OH_AVBuffer](capi-core-oh-avbuffer.md) | OH_AVBuffer | 为媒体内存接口定义native层对象。 | 26| [OH_NativeBuffer](capi-core-oh-nativebuffer.md) | OH_NativeBuffer | 为图形内存接口定义native层对象。 | 27 28### 函数 29 30| 名称 | 描述 | 31| -- | -- | 32| [OH_AVBuffer *OH_AVBuffer_Create(int32_t capacity)](#oh_avbuffer_create) | 创建OH_AVBuffer实例。需要注意的是,返回值指向的创建OH_AVBuffer的实例需要调用者手动释放,请参阅[OH_AVBuffer_Destroy](capi-native-avbuffer-h.md#oh_avbuffer_destroy)。 | 33| [OH_AVErrCode OH_AVBuffer_Destroy(OH_AVBuffer *buffer)](#oh_avbuffer_destroy) | 释放OH_AVBuffer实例指针的资源, 同一个buffer不允许重复销毁。 | 34| [OH_AVErrCode OH_AVBuffer_GetBufferAttr(OH_AVBuffer *buffer, OH_AVCodecBufferAttr *attr)](#oh_avbuffer_getbufferattr) | 获取数据缓冲区的pts、size、offset、flags高频属性参数。 | 35| [OH_AVErrCode OH_AVBuffer_SetBufferAttr(OH_AVBuffer *buffer, const OH_AVCodecBufferAttr *attr)](#oh_avbuffer_setbufferattr) | 设置数据缓冲区的pts、size、offset、flags高频属性参数。 | 36| [OH_AVFormat *OH_AVBuffer_GetParameter(OH_AVBuffer *buffer)](#oh_avbuffer_getparameter) | 获取除基础属性外的其他参数,信息在OH_AVFormat中承载。需要注意的是,返回值指向的创建OH_AVFormat的实例需要调用者主动调用接口释放,请参阅[OH_AVFormat_Destroy](capi-native-avformat-h.md#oh_avformat_destroy)。 | 37| [OH_AVErrCode OH_AVBuffer_SetParameter(OH_AVBuffer *buffer, const OH_AVFormat *format)](#oh_avbuffer_setparameter) | 设置除基础属性外的其他参数,信息在OH_AVFormat中承载。 | 38| [uint8_t *OH_AVBuffer_GetAddr(OH_AVBuffer *buffer)](#oh_avbuffer_getaddr) | 获取数据缓冲区的虚拟地址。 | 39| [int32_t OH_AVBuffer_GetCapacity(OH_AVBuffer *buffer)](#oh_avbuffer_getcapacity) | 获取数据缓冲区的容量(字节数)。 | 40| [OH_NativeBuffer *OH_AVBuffer_GetNativeBuffer(OH_AVBuffer *buffer)](#oh_avbuffer_getnativebuffer) | 获取OH_NativeBuffer实例的指针。需要注意的是,返回值指向的创建OH_NativeBuffer的实例需要调用者主动调用接口释放,请参阅{@link OH_NativeBuffer_Unreference}。 | 41 42## 函数说明 43 44### OH_AVBuffer_Create() 45 46``` 47OH_AVBuffer *OH_AVBuffer_Create(int32_t capacity) 48``` 49 50**描述** 51 52创建OH_AVBuffer实例。需要注意的是,返回值指向的创建OH_AVBuffer的实例需要开发者主动调用接口释放,请参阅[OH_AVBuffer_Destroy](capi-native-avbuffer-h.md#oh_avbuffer_destroy)。 53 54**系统能力:** SystemCapability.Multimedia.Media.Core 55 56**起始版本:** 11 57 58 59**参数:** 60 61| 参数项 | 描述 | 62| -- | -- | 63| int32_t capacity | 创建内存的大小,单位字节。 | 64 65**返回:** 66 67| 类型 | 说明 | 68| -- | -- | 69| [OH_AVBuffer](capi-core-oh-avbuffer.md) * | 如果创建成功,则返回OH_AVBuffer实例的指针,如果失败,则返回NULL。<br> 可能的失败原因:<br>1.capacity <= 0。<br>2.出现内部错误,系统没有资源等。 | 70 71### OH_AVBuffer_Destroy() 72 73``` 74OH_AVErrCode OH_AVBuffer_Destroy(OH_AVBuffer *buffer) 75``` 76 77**描述** 78 79释放OH_AVBuffer实例指针的资源,同一个buffer不允许重复销毁。 80 81**系统能力:** SystemCapability.Multimedia.Media.Core 82 83**起始版本:** 11 84 85 86**参数:** 87 88| 参数项 | 描述 | 89| -- | -- | 90| [OH_AVBuffer](capi-core-oh-avbuffer.md) *buffer | 指向OH_AVBuffer实例的指针。 | 91 92**返回:** 93 94| 类型 | 说明 | 95| -- | -- | 96| [OH_AVErrCode](capi-native-averrors-h.md#oh_averrcode) | AV_ERR_OK:操作成功。<br> AV_ERR_INVALID_VAL:输入的buffer为空指针或者buffer格式校验失败。<br> AV_ERR_OPERATE_NOT_PERMIT:输入的buffer不是用户创建的。 | 97 98### OH_AVBuffer_GetBufferAttr() 99 100``` 101OH_AVErrCode OH_AVBuffer_GetBufferAttr(OH_AVBuffer *buffer, OH_AVCodecBufferAttr *attr) 102``` 103 104**描述** 105 106获取数据缓冲区的pts、size、offset、flags高频属性参数。 107 108**系统能力:** SystemCapability.Multimedia.Media.Core 109 110**起始版本:** 11 111 112 113**参数:** 114 115| 参数项 | 描述 | 116| -- | -- | 117| [OH_AVBuffer](capi-core-oh-avbuffer.md) *buffer | 指向OH_AVBuffer实例的指针。 | 118| [OH_AVCodecBufferAttr](capi-core-oh-avcodecbufferattr.md) *attr | 指向OH_AVCodecBufferAttr实例的指针。 | 119 120**返回:** 121 122| 类型 | 说明 | 123| -- | -- | 124| [OH_AVErrCode](capi-native-averrors-h.md#oh_averrcode) | AV_ERR_OK:操作成功。<br>AV_ERR_INVALID_VAL:可能的原因:<br>1. 输入的buffer或attr为空指针。<br>2. buffer结构校验失败。 | 125 126### OH_AVBuffer_SetBufferAttr() 127 128``` 129OH_AVErrCode OH_AVBuffer_SetBufferAttr(OH_AVBuffer *buffer, const OH_AVCodecBufferAttr *attr) 130``` 131 132**描述** 133 134设置数据缓冲区的pts、size、offset、flags高频属性参数。 135 136**系统能力:** SystemCapability.Multimedia.Media.Core 137 138**起始版本:** 11 139 140 141**参数:** 142 143| 参数项 | 描述 | 144| -- | -- | 145| [OH_AVBuffer](capi-core-oh-avbuffer.md) *buffer | 指向OH_AVBuffer实例的指针。 | 146| [const OH_AVCodecBufferAttr](capi-core-oh-avcodecbufferattr.md) *attr | 指向OH_AVCodecBufferAttr实例的指针。 | 147 148**返回:** 149 150| 类型 | 说明 | 151| -- | -- | 152| [OH_AVErrCode](capi-native-averrors-h.md#oh_averrcode) | AV_ERR_OK:操作成功。<br>AV_ERR_INVALID_VAL:可能的原因:<br>1. 输入的buffer或attr为空指针。<br>2. buffer结构校验失败。<br>3. 输入buffer中内存的size或offset是无效值。 | 153 154### OH_AVBuffer_GetParameter() 155 156``` 157OH_AVFormat *OH_AVBuffer_GetParameter(OH_AVBuffer *buffer) 158``` 159 160**描述** 161 162获取除基础属性外的其他参数,信息在OH_AVFormat中承载。需要注意的是,返回值指向的创建OH_AVFormat的实例需要开发者主动释放,请参阅[OH_AVFormat_Destroy](capi-native-avformat-h.md#oh_avformat_destroy)。 163 164**系统能力:** SystemCapability.Multimedia.Media.Core 165 166**起始版本:** 11 167 168 169**参数:** 170 171| 参数项 | 描述 | 172| -- | -- | 173| [OH_AVBuffer](capi-core-oh-avbuffer.md) *buffer | 指向OH_AVBuffer实例的指针。 | 174 175**返回:** 176 177| 类型 | 说明 | 178| -- | -- | 179| [OH_AVFormat](capi-core-oh-avformat.md) * | AV_ERR_OK:操作成功。<br>AV_ERR_INVALID_VAL:可能的原因:<br>1. 输入的buffer为空指针。<br>2. 输入buffer的meta为空指针。<br>3. buffer结构校验失败。 | 180 181### OH_AVBuffer_SetParameter() 182 183``` 184OH_AVErrCode OH_AVBuffer_SetParameter(OH_AVBuffer *buffer, const OH_AVFormat *format) 185``` 186 187**描述** 188 189设置除基础属性外的其他参数,信息在OH_AVFormat中承载。 190 191**系统能力:** SystemCapability.Multimedia.Media.Core 192 193**起始版本:** 11 194 195 196**参数:** 197 198| 参数项 | 描述 | 199| -- | -- | 200| [OH_AVBuffer](capi-core-oh-avbuffer.md) *buffer | 指向OH_AVBuffer实例的指针。 | 201| [const OH_AVFormat](capi-core-oh-avformat.md) *format | 指向OH_AVFormat实例的指针。 | 202 203**返回:** 204 205| 类型 | 说明 | 206| -- | -- | 207| [OH_AVErrCode](capi-native-averrors-h.md#oh_averrcode) | AV_ERR_OK:操作成功。<br>AV_ERR_INVALID_VAL:可能的原因:<br>1. 输入的buffer或format为空指针。<br>2. 输入buffer的meta为空指针。<br>3. buffer结构校验失败。 | 208 209### OH_AVBuffer_GetAddr() 210 211``` 212uint8_t *OH_AVBuffer_GetAddr(OH_AVBuffer *buffer) 213``` 214 215**描述** 216 217获取数据缓冲区的虚拟地址。 218 219不同场景下,对是否可以获取虚拟地址的支持情况不同,请见表格: 220 221**编码:** 222 223| 模式 | 填充数据的方式 | 是否可以获取虚拟地址 | 224| --------------- | -------- | -------- | 225| Surface模式 | OnNeedInputBuffer输入 | × | 226| Surface模式 | OnNewOutputBuffer输出 | √ | 227| Buffer模式 | OnNeedInputBuffer输入 | √ | 228| Buffer模式 | OnNewOutputBuffer输出 | √ | 229 230**解码:** 231 232| 模式 | 填充数据的方式 | 是否可以获取虚拟地址 | 233| --------------- | -------- | -------- | 234| Surface模式 | OnNeedInputBuffer输入 | √ | 235| Surface模式 | OnNewOutputBuffer输出 | × | 236| Buffer模式 | OnNeedInputBuffer输入 | √ | 237| Buffer模式 | OnNewOutputBuffer输出 | √ | 238 239**系统能力:** SystemCapability.Multimedia.Media.Core 240 241**起始版本:** 11 242 243 244**参数:** 245 246| 参数项 | 描述 | 247| -- | -- | 248| [OH_AVBuffer](capi-core-oh-avbuffer.md) *buffer | 指向OH_AVBuffer实例的指针。 | 249 250**返回:** 251 252| 类型 | 说明 | 253| -- | -- | 254| uint8_t * | 如果成功,则返回数据缓冲区的虚拟地址,如果失败,则返回NULL。<br> 可能的失败原因:<br> 1.输入的buffer为空指针。<br>2.OH_AVBuffer结构校验失败。<br>3.出现内部错误。 | 255 256### OH_AVBuffer_GetCapacity() 257 258``` 259int32_t OH_AVBuffer_GetCapacity(OH_AVBuffer *buffer) 260``` 261 262**描述** 263 264获取数据缓冲区的容量(字节数)。 265 266**系统能力:** SystemCapability.Multimedia.Media.Core 267 268**起始版本:** 11 269 270 271**参数:** 272 273| 参数项 | 描述 | 274| -- | -- | 275| [OH_AVBuffer](capi-core-oh-avbuffer.md) *buffer | 指向OH_AVBuffer实例的指针。 | 276 277**返回:** 278 279| 类型 | 说明 | 280| -- | -- | 281| int32_t | 如果成功,则返回数据缓冲区的容量,如果失败,则返回-1。<br> 可能的失败原因:<br>1.输入的buffer为空指针。<br>2.OH_AVBuffer结构校验失败。<br>3.出现内部错误。 | 282 283### OH_AVBuffer_GetNativeBuffer() 284 285``` 286OH_NativeBuffer *OH_AVBuffer_GetNativeBuffer(OH_AVBuffer *buffer) 287``` 288 289**描述** 290 291获取OH_NativeBuffer实例的指针。 需要注意的是,返回值指向的创建OH_NativeBuffer的实例需要开发者主动调用接口释放,请参阅[OH_NativeBuffer_Unreference](../apis-arkgraphics2d/capi-native-buffer-h.md#oh_nativebuffer_unreference)。 292 293**系统能力:** SystemCapability.Multimedia.Media.Core 294 295**起始版本:** 11 296 297 298**参数:** 299 300| 参数项 | 描述 | 301| -- | -- | 302| [OH_AVBuffer](capi-core-oh-avbuffer.md) *buffer | 指向OH_AVBuffer实例的指针。 | 303 304**返回:** 305 306| 类型 | 说明 | 307| -- | -- | 308| OH_NativeBuffer * | 如果成功,则返回OH_NativeBuffer实例的指针,如果失败,则返回NULL。<br> 可能的失败原因:<br>1.输入的buffer为空指针。<br>2.OH_AVBuffer结构校验失败。<br>3.出现内部错误。 | 309 310 311