接口设计
函数原型 |
struct aic_ve_client *drv_ve_open(void) |
---|---|
功能说明 |
打开 VE 设备 |
参数定义 |
无 |
返回值 |
VE 设备
|
注意事项 |
- |
函数原型 |
int drv_ve_close(struct aic_ve_client *client) |
---|---|
功能说明 |
关闭 VE 设备 |
参数定义 |
client:VE 设备
|
返回值 |
0:成功,其它:失败
|
注意事项 |
- |
函数原型 |
int drv_ve_control(struct aic_ve_client *client, int cmd, void *arg) |
---|---|
功能说明 |
获取 VE 设备独占权限 |
参数定义 |
client:VE 设备
cmd :IOC_VE_GET_CLIENT
arg:NULL
|
返回值 |
0:成功,其它:失败
|
注意事项 |
- |
函数原型 |
int drv_ve_control(struct aic_ve_client *client, int cmd, void *arg) |
---|---|
功能说明 |
释放 VE 设备独占权限 |
参数定义 |
client:VE 设备
cmd:IOC_VE_PUT_CLIENT
arg:NULL
|
返回值 |
0:成功,其它:失败
|
注意事项 |
- |
函数原型 |
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:成功,其它:失败
|
注意事项 |
- |
函数原型 |
int drv_ve_control(struct aic_ve_client *client, int cmd, void *arg) |
---|---|
功能说明 |
VE 驱动硬件复位 |
参数定义 |
client:VE 设备
cmd:IOC_VE_RESET
arg:NULL
|
返回值 |
0:成功,其它:失败
|
注意事项 |
- |
以下 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);