FVID驱动模型
TI公司最初设计的GIO 模型存在缺陷的,主要在数据缓冲区管理的问题上,应用程序在取得设备驱动程序的缓冲区进行数据处理之后,无法将缓冲区返回设备驱动程序。于是TI公司在推出DM642这一款主要用于视频处理的DSP芯片的同时,对GIO模型进行了改进,提出了专门针对视频设备的FVID模型。
FVID模型是建立在GIO模型之上的,以FVID_alloc()、FVID_exchange()、FVID_free()函数对GIO模型中的GIO_submit()函数进行封装,解决了GIO模型中驱动程序不能回收缓冲区的问题。
此外FVID模型还专门设计了FVID_frame结构。此结构中包含了常用的视频信号的信息,如行数、列数、YUV结构、场频等,很适合描述视频数据帧,为视频场合设计的FVID模型主要是针对DM64X 系统设计的.
迷你驱动各个函数的具体实现如下:
① mdBindDev()函数。在应用程序建立设备接口(如FVID_create()函数)时被调用以实施设备邦定,完成对外部设备的初始化。而与其对应的是mdUBindDev()函数,使用mdUBindDev()函数会使设备处于无效状态,不能再使用。
② mdCreateChan()函数。使用此函数为应用程序和驱动程序建立通信通道,同时为每个通道申请缓冲区。在TI公司发布的FVID模型中,为每个通道都分配了3个缓冲区,轮流与外部设备交换数据,每个缓冲区对应1帧视频数据。与mdCreateChan()对应的是md_DeleteChan()函数,用于删除设备通道,释放缓冲区资源。
③ mdSubmitChan()函数。负责管理缓冲区,分别接受应用程序发出的FVID_ALLOC()、FVID_EXCHANGE()、FVID_FREE()三个命令并进行处理。其中FVID_ALLOC命令获取驱动程序中的缓存区,应用程序从三个缓冲区中取出最新的一帧视频数据,对其中的数据做处理,而只剩下的缓冲区用来接受外部设备输入的数据。FVID_EXCHANGE()将使用完的缓存区与驱动程序的最新数据缓存区交换,应用程序处理完1帧数据,将这1帧数据返回驱动程序,再读入新的1帧数据进行处理。FVID_FREE()将使用完的缓存区重新返回给驱动程序,应用程序将处理完的数据帧返回驱动程序,而不再向驱动程序申请新的数据帧。
④ mdControlChan()函数。用来操作外部视频设备,完成对视频数据的采集和输出。应用程序通过FVID_Control()函数将命令传递给GIO_Control()函数,然后再GIO_Control()传递给mdControlChan()函数,最后将命令分发到指定的设备。
FVID 函数:
1.FVID_create()作用:是分配并初始化FVID通道对象;
语法:fvidChan = FVID_create (name, mode, *status, optArgs, *attrs);
参数定义:
String name /* ha