# native_avbuffer.h

#### 概述

声明了媒体数据结构AVBuffer的函数接口。

**引用文件：** <multimedia/player\_framework/native\_avbuffer.h>

**库：** libnative\_media\_core.so

**系统能力：** SystemCapability.Multimedia.Media.Core

**起始版本：** 11

**相关模块：** Core

**相关示例：** AVCodec

#### 汇总

#### 结构体

| 名称 | typedef关键字 | 描述 |
| --- | --- | --- |
| OH_AVBuffer | OH_AVBuffer | 为媒体内存接口定义native层对象。 |
| OH_NativeBuffer | OH_NativeBuffer | 为图形内存接口定义native层对象。 |

#### 函数

| 名称 | 描述 |
| --- | --- |
| OH_AVBuffer *OH_AVBuffer_Create(int32_t capacity) | 创建OH_AVBuffer实例。需要注意的是，返回值指向的创建OH_AVBuffer的实例需要开发者主动调用接口释放，请参阅OH_AVBuffer_Destroy。 |
| OH_AVErrCode OH_AVBuffer_Destroy(OH_AVBuffer *buffer) | 释放OH_AVBuffer实例指针的资源，同一个buffer不允许重复销毁。 |
| OH_AVErrCode OH_AVBuffer_GetBufferAttr(OH_AVBuffer *buffer, OH_AVCodecBufferAttr *attr) | 获取数据缓冲区的pts、size、offset、flags高频属性参数。 |
| OH_AVErrCode OH_AVBuffer_SetBufferAttr(OH_AVBuffer *buffer, const OH_AVCodecBufferAttr *attr) | 设置数据缓冲区的pts、size、offset、flags高频属性参数。 |
| OH_AVFormat *OH_AVBuffer_GetParameter(OH_AVBuffer *buffer) | 获取除基础属性外的其他参数，信息在OH_AVFormat中承载。需要注意的是，返回值指向的创建OH_AVFormat的实例需要开发者主动释放，请参阅OH_AVFormat_Destroy。 |
| OH_AVErrCode OH_AVBuffer_SetParameter(OH_AVBuffer *buffer, const OH_AVFormat *format) | 设置除基础属性外的其他参数，信息在OH_AVFormat中承载。 |
| uint8_t *OH_AVBuffer_GetAddr(OH_AVBuffer *buffer) | 获取数据缓冲区的虚拟地址。 |
| int32_t OH_AVBuffer_GetCapacity(OH_AVBuffer *buffer) | 获取数据缓冲区的容量（字节数）。 |
| OH_NativeBuffer *OH_AVBuffer_GetNativeBuffer(OH_AVBuffer *buffer) | 获取OH_NativeBuffer实例的指针。需要注意的是，返回值指向的创建OH_NativeBuffer的实例需要开发者主动调用接口释放，请参阅OH_NativeBuffer_Unreference。 |

#### 函数说明

#### OH\_AVBuffer\_Create()

```
OH_AVBuffer *OH_AVBuffer_Create(int32_t capacity)
```

**描述**

创建OH\_AVBuffer实例。需要注意的是，返回值指向的创建OH\_AVBuffer的实例需要开发者主动调用接口释放，请参阅OH\_AVBuffer\_Destroy。

**系统能力：** SystemCapability.Multimedia.Media.Core

**起始版本：** 11

**参数：**

| 参数项 | 描述 |
| --- | --- |
| int32_t capacity | 创建内存的大小，单位字节。 |

**返回：**

| 类型 | 说明 |
| --- | --- |
| OH_AVBuffer * | 如果创建成功，则返回OH_AVBuffer实例的指针，如果失败，则返回NULL。 可能的失败原因： 1.capacity <= 0。 2.出现内部错误，系统没有资源等。 |

#### OH\_AVBuffer\_Destroy()

```
OH_AVErrCode OH_AVBuffer_Destroy(OH_AVBuffer *buffer)
```

**描述**

释放OH\_AVBuffer实例指针的资源，同一个buffer不允许重复销毁。

**系统能力：** SystemCapability.Multimedia.Media.Core

**起始版本：** 11

**参数：**

| 参数项 | 描述 |
| --- | --- |
| OH_AVBuffer *buffer | 指向OH_AVBuffer实例的指针。 |

**返回：**

| 类型 | 说明 |
| --- | --- |
| OH_AVErrCode | AV_ERR_OK：操作成功。 AV_ERR_INVALID_VAL：输入的buffer为空指针或者buffer格式校验失败。 AV_ERR_OPERATE_NOT_PERMIT：输入的buffer不是用户创建的。 |

#### OH\_AVBuffer\_GetBufferAttr()

```
OH_AVErrCode OH_AVBuffer_GetBufferAttr(OH_AVBuffer *buffer, OH_AVCodecBufferAttr *attr)
```

**描述**

获取数据缓冲区的pts、size、offset、flags高频属性参数。

**系统能力：** SystemCapability.Multimedia.Media.Core

**起始版本：** 11

**参数：**

| 参数项 | 描述 |
| --- | --- |
| OH_AVBuffer *buffer | 指向OH_AVBuffer实例的指针。 |
| OH_AVCodecBufferAttr *attr | 指向OH_AVCodecBufferAttr实例的指针。 |

**返回：**

| 类型 | 说明 |
| --- | --- |
| OH_AVErrCode | AV_ERR_OK：操作成功。 AV_ERR_INVALID_VAL：可能的原因： 1. 输入的buffer或attr为空指针。 2. buffer结构校验失败。 |

#### OH\_AVBuffer\_SetBufferAttr()

```
OH_AVErrCode OH_AVBuffer_SetBufferAttr(OH_AVBuffer *buffer, const OH_AVCodecBufferAttr *attr)
```

**描述**

设置数据缓冲区的pts、size、offset、flags高频属性参数。

**系统能力：** SystemCapability.Multimedia.Media.Core

**起始版本：** 11

**参数：**

| 参数项 | 描述 |
| --- | --- |
| OH_AVBuffer *buffer | 指向OH_AVBuffer实例的指针。 |
| const OH_AVCodecBufferAttr *attr | 指向OH_AVCodecBufferAttr实例的指针。 |

**返回：**

| 类型 | 说明 |
| --- | --- |
| OH_AVErrCode | AV_ERR_OK：操作成功。 AV_ERR_INVALID_VAL：可能的原因： 1. 输入的buffer或attr为空指针。 2. buffer结构校验失败。 3. 输入buffer中内存的size或offset是无效值。 |

#### OH\_AVBuffer\_GetParameter()

```
OH_AVFormat *OH_AVBuffer_GetParameter(OH_AVBuffer *buffer)
```

**描述**

获取除基础属性外的其他参数，信息在OH\_AVFormat中承载。需要注意的是，返回值指向的创建OH\_AVFormat的实例需要开发者主动释放，请参阅OH\_AVFormat\_Destroy。

**系统能力：** SystemCapability.Multimedia.Media.Core

**起始版本：** 11

**参数：**

| 参数项 | 描述 |
| --- | --- |
| OH_AVBuffer *buffer | 指向OH_AVBuffer实例的指针。 |

**返回：**

| 类型 | 说明 |
| --- | --- |
| OH_AVFormat * | AV_ERR_OK：操作成功。 AV_ERR_INVALID_VAL：可能的原因： 1. 输入的buffer为空指针。 2. 输入buffer的meta为空指针。 3. buffer结构校验失败。 |

#### OH\_AVBuffer\_SetParameter()

```
OH_AVErrCode OH_AVBuffer_SetParameter(OH_AVBuffer *buffer, const OH_AVFormat *format)
```

**描述**

设置除基础属性外的其他参数，信息在OH\_AVFormat中承载。

**系统能力：** SystemCapability.Multimedia.Media.Core

**起始版本：** 11

**参数：**

| 参数项 | 描述 |
| --- | --- |
| OH_AVBuffer *buffer | 指向OH_AVBuffer实例的指针。 |
| const OH_AVFormat *format | 指向OH_AVFormat实例的指针。 |

**返回：**

| 类型 | 说明 |
| --- | --- |
| OH_AVErrCode | AV_ERR_OK：操作成功。 AV_ERR_INVALID_VAL：可能的原因： 1. 输入的buffer或format为空指针。 2. 输入buffer的meta为空指针。 3. buffer结构校验失败。 |

#### OH\_AVBuffer\_GetAddr()

```
uint8_t *OH_AVBuffer_GetAddr(OH_AVBuffer *buffer)
```

**描述**

获取数据缓冲区的虚拟地址。

**系统能力：** SystemCapability.Multimedia.Media.Core

**起始版本：** 11

**参数：**

| 参数项 | 描述 |
| --- | --- |
| OH_AVBuffer *buffer | 指向OH_AVBuffer实例的指针。 |

**返回：**

| 类型 | 说明 |
| --- | --- |
| uint8_t * | 如果成功，则返回数据缓冲区的虚拟地址，如果失败，则返回NULL。 可能的失败原因： 1.输入的buffer为空指针。 2.OH_AVBuffer结构校验失败。 3.出现内部错误。 |

#### OH\_AVBuffer\_GetCapacity()

```
int32_t OH_AVBuffer_GetCapacity(OH_AVBuffer *buffer)
```

**描述**

获取数据缓冲区的容量（字节数）。

**系统能力：** SystemCapability.Multimedia.Media.Core

**起始版本：** 11

**参数：**

| 参数项 | 描述 |
| --- | --- |
| OH_AVBuffer *buffer | 指向OH_AVBuffer实例的指针。 |

**返回：**

| 类型 | 说明 |
| --- | --- |
| int32_t | 如果成功，则返回数据缓冲区的容量，如果失败，则返回-1。 可能的失败原因： 1.输入的buffer为空指针。 2.OH_AVBuffer结构校验失败。 3.出现内部错误。 |

#### OH\_AVBuffer\_GetNativeBuffer()

```
OH_NativeBuffer *OH_AVBuffer_GetNativeBuffer(OH_AVBuffer *buffer)
```

**描述**

获取OH\_NativeBuffer实例的指针。需要注意的是，返回值指向的创建OH\_NativeBuffer的实例需要开发者主动调用接口释放，请参阅OH\_NativeBuffer\_Unreference。

**系统能力：** SystemCapability.Multimedia.Media.Core

**起始版本：** 11

**参数：**

| 参数项 | 描述 |
| --- | --- |
| OH_AVBuffer *buffer | 指向OH_AVBuffer实例的指针。 |

**返回：**

| 类型 | 说明 |
| --- | --- |
| OH_NativeBuffer * | 如果成功，则返回OH_NativeBuffer实例的指针，如果失败，则返回NULL。 可能的失败原因： 1.输入的buffer为空指针。 2.OH_AVBuffer结构校验失败。 3.出现内部错误。 |