Edit online

接口设计

Read time: 2 minute(s)
1. drv_ve_open

函数原型

struct aic_ve_client *drv_ve_open(void)

功能说明

打开 VE 设备

参数定义

返回值

VE 设备

注意事项

-

2. drv_ve_close

函数原型

int drv_ve_close(struct aic_ve_client *client)

功能说明

关闭 VE 设备

参数定义

client:VE 设备

返回值

0:成功,其它:失败

注意事项

-

3. IOC_VE_GET_CLIENT

函数原型

int drv_ve_control(struct aic_ve_client *client, int cmd, void *arg)

功能说明

获取 VE 设备独占权限

参数定义

client:VE 设备
cmd :IOC_VE_GET_CLIENT
arg:NULL

返回值

0:成功,其它:失败

注意事项

-

4. IOC_VE_PUT_CLIENT

函数原型

int drv_ve_control(struct aic_ve_client *client, int cmd, void *arg)

功能说明

释放 VE 设备独占权限

参数定义

client:VE 设备
cmd:IOC_VE_PUT_CLIENT
arg:NULL

返回值

0:成功,其它:失败

注意事项

-

5. IOC_VE_WAIT

函数原型

int drv_ve_control(struct aic_ve_client *client, int cmd, void *arg)

功能说明

等待 VE 驱动编解码完成,并且获取 VE 寄存器状态

参数定义

client:drv_ve_open 返回的 VE 硬件实例
cmd:IOC_VE_WAIT
arg:指向 struct wait_info 指针

返回值

0:成功,其它:失败

注意事项

-

6. IOC_VE_RESET

函数原型

int drv_ve_control(struct aic_ve_client *client, int cmd, void *arg)

功能说明

VE 驱动硬件复位

参数定义

client:VE 设备
cmd:IOC_VE_RESET
arg:NULL

返回值

0:成功,其它:失败

注意事项

-

APP Demo 参考

以下 demo 实现 VE 驱动基本调用流程,具体可参考 mpp 代码 (packages/artinchip/mpp/ve/common/ve.c

 //* 1. 打开 VE
struct aic_ve_client* client = drv_ve_open();

 //* 2. 获取 VE 权限
 ioctl(client, IOC_VE_GET_CLIENT,NULL);

 //* 3. 配置寄存器(省略)
 ...

 //* 4. 等 VE 中断
 struct wait_info wt_info;
 wt_info.wait_time = VE_TIMEOUT;
 int ret = drv_ve_control(client, IOC_VE_WAIT, &wt_info);
 if(ret < 0) {
     // 中断超时,VE 硬件复位
     drv_ve_control(client, IOC_VE_RESET,NULL);
 }

 //* 5. 释放 VE 权限
 drv_ve_control(client, IOC_VE_PUT_CLIENT,NULL);

 //* 6. 关闭 VE
 drv_ve_close(client);