基于VxWorks的视频采集系统的设计与实现
扫描二维码
随时随地手机看文章
多媒体通信技术的发展为信息的获取和传输提供了丰富的手段,视频数据是其中不可缺少的重要组成部分,而视频数据的获取离不开视频采集系统。目前,视频采集系统的应用极为广泛,许多产品和设施,例如远程监控、可视电话、会议电视等等,都需要采集视频信息。而且,随着PC机的普及,人们可以直接利用PC机进行视频采集,采集到的视频数据经过处理后保存在本地或者发送到远方。由于视频的采集、处理和传输都在一台PC机上完成,因此可以大大降低系统的复杂度和价格。
我们设计的视频采集系统是基于Intel x86平台和实时操作系统VxWorks,由视频采集卡和驱动程序两部分组成,如图1所示。视频采集卡完成视频数据采集和格式转换,驱动程序在系统启动时对硬件进行初始化,在系统启动之后实现硬件和应用软件之间的数据交互。考虑到视频的数据量极大,视频采集卡通过PCI高速总线与计算机相连。
2 视频采集卡的设计
为了将由摄像头输入的模拟视频转换为计算机能够接受和处理的数字视频,需要经过模数转换、同步提取、亮色分离等多个步骤。而为了将数字视频传送到PC机的内存中,还需要一定数量的FIFO、总线接口和相应的控制逻辑。这原本是一个比较复杂的过程,但是随着半导体技术的发展,各半导体生产厂家通过不断创新和改进,目前已经能够在单个芯片上实现所有这些功能。Conexant公司的Bt848就是这样的一种芯片,图2给出了其功能框图。
对于在PCI总线上进行NTSC/PAL/SECAM视频捕获的应用来说,Bt848是一种完整的低价格解决方案。作为一种总线主控设备,Bt848不需要任何本地缓存来存储视频像素数据,这样就极大地降低了硬件价格。Bt848能够充分利用基于PCI总线的系统的高带宽和固有的多媒体功能,并且能够与其他多媒体设备实现互操作,这样就能够以模块的方式在系统中添加视频采集和叠加功能,而花费甚少。Bt848的使用与PCI系统总线的拓扑结构无关,可以用于各种系统总线的组织结构,既可以直接集成在主板上,也可以作成插卡插在PCI总线插槽内。
Bt848的主要特点是:与PCI 2.1规范全兼容,拥有辅助的GPIO数据端口和视频数据端口,支持的图像分辨率高达768×576,支持复杂的裁剪功能,零等待状态的PCI突发写操作,支持场/帧屏蔽以减少带宽,在输出方面支持多种YCbCr和RGB像素格式,支持NTSC/SECAM/PAL模拟输入,可以使用垂直/水平方面的插值滤波将图像尺寸缩小到图标大小,具有多个复合和S视频输入,支持奇偶场不同的目的地址,支持奇偶场不同的颜色空 间/缩放因子,支持225个颜色调色板的视频映射,具有用于图文电视的VBI视频捕获功能。这些特点使Bt848适用于PC电视、桌面可视电话、运动视频捕获、静止图像采集和VBI数据服务等应用领域。
Bt848高度集成的结构使其外围电路极其简单,也便于在同一块插卡上增加更多的功能,例如视频数据加密。视频采集卡的结构如图3所示。一块Bt848最多支持4路模拟视频输入,其中3路是复合视频信号,1路是S视频信号。4路视频输入在Bt848内部完成复用。Bt848通过内部的PCI接口直接与PCI总线相连。单片机通过FIFO与Bt848的GPIO端口相连,单片机软件与主机上的软件一起实现视频采集系统的加密。控制逻辑控制Bt848和FIFO的时序,同步PCI总线、Bt848与单片机的操作。
3 驱动程序的编写
应用程序必须通过驱动程序才能与硬件进行数据通信,而驱动程序的编写又是与操作系统密切相关的。本系统所使用的操作系统是实时操作系统VxWorks。
VxWorks是由WRS(Wind River Systems)公司开发的一套具有微内核高性能可伸缩的实时操作系统,支持广泛的网络通信协议,并能够根据用户的需求进行组合,其开放式的结构和对工业标准的支持使开发者只需做最少的工作即可设计有效的适合于不同用户要求的实时操作系统。VxWorks的特点主要有:微内核结构(最小结构<8KB),高效的任务管理,灵活的任务间通信,微秒级中断处理,符合POSIX 1003.1b实时扩展标准,满足TCP/IP网络标准,灵活的从ROM、磁盘或网络的引导能力,多处理器支持,快速、灵活的I/O系统,MS-DOS和RT-11文件系统,完全符合ANSI C标准,多于1100种功能例程。除了性能出众的操作系统之外,WRS公司还提供了优秀的实时操作系统开发工具Tornado。Tornado由三个高度集成的部分组成:Tornado工具,是一整套强有力的交叉开发工具;VxWorks运行时系统,是运行在目标机上的高性能、可裁剪的实时操作系统;连接目标机和宿主机的通信选项,如以太网、串行线路、在线仿真或ROM仿真等。Tornado能够支持几乎所有的工作平台和目标处理器,所提供的工具可用于所有目标机,并具有两种调试模式(系统和任务模式)。除了基本的功能和开发工具,Tornado还具有先进的系列网络产品,极大地扩展了Tornado的网络特性并增强了嵌入式微处理器的网络特性。
VxWorks的所有机制和功能都是基于“C子程序”这种简单机构,即:VxWorks的所有功能都是由C程序库提供的,任何C程序都能够从Tornado的命令和调试环境中交互式地调用,任何C程序都能够作为VxWorks的一个任务从Tornado主机工具或者应用程序中产生,C程序能够与中断、看门狗定时器或辅助定时器相连。VxWorks的这种统一性使Tornado成为一种有效的开发系统,因为用户不必再编写特殊的代码来与系统陷阱接口,也不需要进行特殊的处理来建立一个任务,更不需要编写特殊的用户接口程序或交互式的测试程序来测试新代码,用户只要编写子程序就能够完成所有这些工作。
VxWorks的这些特性为编写应用程序和设备驱动程序提供了极大的便利。在VxWorks下,设备驱动程序既可以嵌入内核随系统一起启动,也可以作为可加载模块在系统启动之后运行。前一种方式需要修改并重新编译内核,这需要熟悉内核的结构,实现起来比较困难。而后一种方式则比较简单,与编写一般的应用程序类似。但是,无论采用哪种方式编写驱动程序,其基本结构是相同的,如图4所示。
PCI总线是一种即插即用的总线,在BIOS和操作系统的支持下,能够自动地为设备分配合适的内存映射地址、I/O端口和系统中断控制器的输入(IRQ)。Bt848支持两类地址空间:配置地址空间和内存地址空间。配置地址空间包括预定义的PCI配置寄存器,而内存地址空间包括Bt848使用的所有局部寄存器。初始化PCI总线就是设置PCI配置空间所定义的寄存器,实现主机与PCI局部总线之间的接口,其过程是:首先在系统中根据设备标识(Bt848)和供应商标识(Brooktree)找到设备的位置,确定其总线号、设备号和功能号;然后根据总线号、设备号和功能号确定设备的基地址和IRQ,这个基地址就是Bt848局部寄存器的起始地址,而IRQ在连接中断服务程序时使用;接着将设备的局部寄存器映射到系统内存中,供以后设置局部寄存器使用;最后设置命令寄存器以控制Bt848产生和响应PCI周期的能力,例如使系统能够响应对内存空间的访问,使Bt848成为总线操作发起的一方,使系统报告校验错等等。
Bt848的中断屏蔽寄存器INT_MASK中的设置决定了系统能够响应哪些中断,中断服务程序为不同的中断源提供相应的处理代码。中断服务程序的编写必须遵循一定的规则,最主要的一点就是不能造成系统阻塞而影响系统性能。中断服务程序应该尽量简洁短小,使其能够尽可能快速地返回。在中断服务程序中不能有运行时间过长的代码,也不能出现对某些共享资源进行某种访问(例如试图获取信号量)的代码。编写完中断服务程序之后,利用初始化PCI总线时获得的IRQ和操作系统提供的函数将中断服务程序与中断矢量连接起来。
Bt848的局部寄存器驻留在4KB的内存寻址空间中,必须通过PCI总线才能访问。通过设置相应的寄存器,就能够控制Bt848的行为。通常,需要设置的内容包括:输入电视信号制式(PAL或NTSC),输入信号源(MUX0、MUX1或MUX2),行同步,场同步,输出格式(CCIR 601、CIF或QCIF),图像放大或缩小参数,图像滤波参数,亮度、色度和对比度调节等等。
t848中集成的DMA控制器非常独特,它实际上是一个小RISC处理器,其运行的指令(即RISC程序)位于主机内存中并由Bt848的设备驱动程序提供。由于这种结构能够将采集到的视频数据传输到内存中,从而大大地方便了视频采集系统的实现。在这种结构中,DMA能够动态地逐行改变目标内存地址,这就使用户能够将每一帧视频数据分成不同的部分放在多个内存区域中。RISC程序的起始地址放在Bt848的RISC程序起始地址寄存器RISC_STRT_ADD中。Bt848提供的RISC指令包括:写入WRITE、略过SKIP、同步SYNC和跳转JUMP,利用这些指令就能够控制数据流,得到所需要的数据。RISC程序的基本流程是:帧同步→写入奇场→偶场同步→写入偶场→奇场同步→跳转至写入奇场。
系统启动是通过设置GPIO和DMA控制寄存器中的RISC使能位和FIFO使能位来实现。将RISC使能位置为1使DMA控制器能够处理RISC指令,将FIFO使能位置为1使数据FIFO有效。在将这两位置为1后,视频采集开始进行。
在整个系统中,由于视频采集的速度通常高于应用软件取得数据并处理的速度,为了保证视频数据的连续性,采用了三缓存结构。缓存A是Bt848视频采集的目标地址,在RISC指令的直接控制下,采集的数据都先存放在这个缓存中。缓存B和C组成“乒乓”式结构,循环往复使用:当某一帧数据采集完毕后产生中断,在中断服务程序中将缓存A的数据复制到缓存B(或C)中,然后采集下一帧;当下一帧数据采集完后,再将缓存A中的数据复制到缓存C(或B)中。当应用程序需要数据时,就从缓存B或C中读取最新的一帧图像。缓存B和C交替使用,能够保证应用程序从缓存读数据的操作和驱动程序向缓存写数据的操作不会发生冲突,避免了数据的损坏和迟延。
4 结论
利用Bt848,在Intel x86平台和实时操作系统VxWorks上实现了视频采集系统。由于Bt848的高度集成特性,其外围电路极其简单,设计硬件电路时极其方便,同时性能也能够得到保证,而且可以灵活地增加其他功能。而VxWorks优异的性能和方便的接口也便于编写设备驱动程序和应用软件,其性能完全能够满足要求。目前,所实现的视频采集系统已经在视频监控和可视电话中获得应用。