DSP

FVID介绍

2019-07-13 16:19发布

DSP/BIOS的外设驱动分为两层,分别是类驱动和迷你驱动。 类驱动为应用程序提供接口,这部分程序与设备无关,主要功能包括维护设备数据缓冲区,向上提供API接口供应用层程序调用,并协调应用程序对外设操作的同步和阻塞,向下提供适配层与迷你驱动层相连,实现API接口函数到迷你驱动程序的映射,类驱动程序与硬件无关,只要外设驱动模型选定了,类驱动程序就定下来了,不需要作多少修改。 迷你驱动程序与设备相关,所以设计迷你驱动程序是外设驱动开发中的重点,迷你驱动程序与类驱动层的接口格式是统一的,但迷你驱动程序对底层硬件的操作是根据硬件平台的不同而变化的,迷你驱动接收类驱动层发出的IOM_Packet命令包,决定对底层硬件进行什么样的操作。  外设驱动程序模型又可以分为以下3类: 1)PIP/PIO模型。基于数据管道的I/O模型,每个管道都在维护自己的一个缓冲区。当数据写入缓冲区,或从缓冲区取出数据时,便会激发notifyReader和notifyWriter函数实现数据的同步。   2)SIO/DIO模型,基于数据的I/O模型,一个数据流是单向的,要么是输入,要么是输出,而且SIO/DIO模型使用异步方式来操作I/O,对于数据的读写、处理可以同时进行[3]。    3)GIO模型,通用的I/O模型,灵活性很强,且没有适配层、直接操作迷你驱动程序,主要用来设计新型的设备驱动模型。      FVID模块是对GIO的封装,以实现图像帧的获取与显示。对于大多数的DSP/BIOS设备驱动,最初都是由应用程序来控制数据缓冲区,并传递这些缓冲区的地址到设备驱动以实现数据的输入输出。FVID模块和视频捕获显示驱动与此不同,是由设备驱动来直接控制数据缓冲区,这是因为视频采集/显示系统通常需要有较大的、复杂的缓冲区,而且对数据读取速度的要求要远高于对缓冲区分配的灵活性和机动性的要求。设备驱动根据FVID通道的配置参数计算缓冲区的大小并分配缓冲区,而且至少要为每个FVID通道分配3个缓冲区,以确保视频图像的捕获和显示的连续性。      FVID模块主要包括FVID_create、FVID_delete、FVID_queue、FVID_dequeue、FVID_exchange、FVID_allocBuffer、FVID_control等API函数。      FVID_create:为视频设备分配FVID通道对象      FVID_delete:删除视频设备的FVID通道对象      FVID_queue:将视频数据帧插入队列      FVID_dequeue:从队列中取出视频数据帧      FVID_exchange:完成缓冲队列和视频帧的数据交换      FVID_allocBuffer:分配视频帧缓存   FVID_control:发送一个控制命令到mini_driver