Edit online

关键流程设计

中断处理流程

VE 中断类型有三种,包括:

  • finish 中断:VE 任务正常结束

  • error 中断:VE 处理任务过程中出错

  • bit request 中断:当前数据不足以完成一次完整的任务,需要继续发送数据

  • 上层程序对 VE 中断的处理
    • finish 中断处理:VE 正常结束,释放 VE 硬件设备独占权限
    • bit request 中断处理:再次发送一笔数据,重新启动 VE 执行任务,重复以上过程,直到 VE 返回 finish 或 error 中断
    • error 中断:VE 执行出错,必须对 VE 进行硬件复位避免错误影响下次任务
    • 等中断超时:此时 VE 出现未知异常,必须对 VE 进行硬件复位
    注: 处理 bit request 中断时,不能释放 VE 硬件设备独占权限,因为两次任务处理有相关性。如果这两次任务之间执行其他任务,会影响 VE 内部状态,从而导致该次任务执行出错。

多线程支持

  • VE 设备只有一个,所以同一时间只能执行一个任务。当多个线程同时操作 VE 驱动时,VE 只能分时复用。因此上层程序在操作 VE 之前,必须获得 VE 的独占权限。

  • VE 驱动通过 IOC_VE_GET_CLIENT/IOC_VE_PUT_CLIENT 这两个 drv_ve_control 接口为上层程序提供获取和释放 VE 独占权限功能。

  • 为避免每个线程都执行 VE 驱动初始化等重复操作,建议用户态程序使用单例模式实现 VE 驱动调用。具体实现可参考 mpp 代码(packages/artinchip/mpp/ve/common/ve.c)。