视频采集播放卡设计探究论文

时间:2022-09-06 11:35:42

视频采集播放卡设计探究论文

摘要介绍了视频采集播放卡的总体设计,给出了硬件电路设计框图,重点阐述了驱动程序设计与实现。

关键词视频采集播放卡PCI总线流Minidriver

1引言

随着宽带网络技术和流媒体技术的迅猛发展,计算机用户可以从网络上获得的影音资源日益丰富,人们不但可以从网络上下载,而且能够通过在线点播方式即时收看影音文件。在电视、计算机、宽带网络日益普及的今天,利用设备整合现有资源,充分发挥各设备优势,实现资源利用的最大化显得尤为重要。通过设计视频采集播放卡,实现音视频采集和计算机(网络)影音文件后台播放输出,有利于音视频资源的整合利用,提高资源利用率。

2总体方案

视频采集播放卡由硬件和软件两部分组成,如图1所示。硬件部分包括PCI接口模块、音频编解码模块、视频解码模块、视频编码模块以及电源模块等。软件部分包括驱动模块和应用程序模块。驱动模块属于底层的软件接口,主要为上层的应用程序提供硬件调用接口。

图1系统软硬件框图

当前计算机支持的媒体格式多种多样,自己去为每一种媒体格式编写编解码程序不太现实。在操作系统中有着丰富的编解码资源,如何利用这些资源就显得至关重要。DirectShow为Windows平台上处理各种各样的媒体文件播放、音视频采集等高性能要求的多媒体应用提供一个完整的解决方案。为了利用操作系统中提供的编解码资源,需要编写流Minidriver,利用包装Filter对硬件设备驱动程序进行包装,实现DirectShow应用程序对硬件设备的访问。

3硬件实现

视频采集播放卡由多媒体控制器SAA7146A、视频编码器SAA7121H、视频解码器SAA7113H、音频编解码器TDA1309H、音频放大器TDA1308以及AT24C02等芯片组成,具体如图2所示。

图2硬件实现框图

计算机通过PCI总线与视频采集播放卡进行数据交互。通过配置SAA7146A内部寄存器,可以对芯片内部各功能模块进行控制,实现与芯片的数据交互。在视频采集过程中,模拟视频信号首先经过解码器SAA7113H,转换成标准的数字视频信号,SAA7146A芯片读取D1接口数据,并通过PCI总线上传给应用程序。在视频播放过程中,应用程序下传数据给SAA7146A,而后SAA7146A把视频数据传递给编码器SAA7121H,还原成模拟视频信号。音频信号采用TDA1309H实现数模和模数转换。

4驱动设计

驱动程序是受操作系统信任的、控制硬件设备的一组函数,它的优劣不仅事关硬件设备的功能实现,而且严重的设计缺陷还将造成操作系统的安全隐患。驱动程序开发采用DriverStudio2.7+WindowsDDK+VisualC++6.0实现。由于采用DriverWorks建立的驱动程序框架已包含实现设备的初始化、卸载等基本功能代码,因此在开发PCI设备驱动程序时可以把主要精力集中于处理硬件访问、中断处理和DMA传输等问题。

4.1硬件访问

驱动程序通过读写与设备相关联的寄存器同设备进行通信。为了引用设备的寄存器,DriverWorks定义了类KIoRange和类KMemoryRange来分别实现I/O空间寄存器和内存映射寄存器的访问。映射的地址空间大小和类型由PCI设备配置空间的基地址寄存器值决定。

控制SAA7146A芯片实现任何一个完整的功能,都可能需要编写一组寄存器访问指令。由于芯片SAA7113H和SAA7121H使用I2C总线进行设置。为实现对I2C总线接口的访问,不但要设置状态寄存器IICSTA和传输控制寄存器IICTRF,而且要设置主控制寄存器MC1/MC2。图3所示为I2C单字节写操作的流程图。4.2中断处理

为了方便状态查询,SAA7146A提供有两个状态寄存器来收集、存放状态信息,分别为主状态寄存器PSR(PrimaryStatusRegister)和次状态寄存器SSR(SecondaryStatusRegister),其中主状态寄存器包含从次状态寄存器中概括的信息。中断使能寄存器IER使能中断,当某个中断条件发生时,中断状态寄存器ISR的对应位被置“1”。

在ISR主要完成如下工作:①检测SAA7146A状态寄存器,判断是否为本设备中断,“是”则阻止它产生另一中断,对中断进行简单处理,“否”则返回FALSE。②调用IoRequestDpc排队DPC请求在驱动程序的DpcForIsr例程中继续处理请求。

在每部分数据传输结束时由ISR触发DpcForIsr例程。它的工作是开始下一部分的传输和完成当前请求。

4.3DMA传输

为了传输音频和视频数据,SAA7146A芯片提供了8个DMA通道(3个视频通道,4个音频通道,1个DEBI通道)进行数据传输。为了克服大块内存获取,SAA7146A支持分散/集中列表,提供有内存管理单元MMU,用来处理不连续内存。使用MMU的关键是初始化页表。页表是一块页对齐的4K字节大小的物理内存。页表中存放每4K字节为单位的物理内存的物理起始地址。

下述代码启动视频DMA通道3,视频数据通过D1_A接口经BRS路由,输入到内存。

Height=conf.height;Width=conf.width;Pitch=conf.pitch;//置初值

basepage3.Page3=PageBaseAddress/4096;//页表基地址右移12位

basepage3.ME3=1;//使能MMU

basepage3.Limit=0;basepage3.PV3=0;

basepage3.RW3=0;basepage3.Swap3=0;

useraddr=0;//当前DMA通道使用的初始地址,多个DMA通道可以共用一个MMU页表

SetReg(MC1,0x04000400);//打开DD1接口

SetReg(DD1_INIT,0x07000000);//初始化DD1接口,

SetReg(MC2,0x06000600);//upload“DD1接口初始化设置”

SetReg(DD1_STREAM,0x00000000);//设置DD1接口视频数据流处理

SetReg(MC2,0x02000200);//upload

SetReg(BRS_CTRL,0x00000000);//设置BRS控制寄存器

SetReg(MC2,0x01000100);//upload

SetReg(PCI_BT_V,0x00170000);//设置Burst传输阀值

SetReg(NUM_LINE_BYTE3,(width<<16)|(Height/2);//设置视频图像大小

SetReg(BASE_ODD3,useraddr);//设置奇场视频数据起始存放地址

SetReg(BASE_EVEN3,useraddr+Pitch);//设置偶场视频数据起始存放地址

SetReg(PROT_ADDR3,useraddr+Height*Pitch);//设定保护地址

SetReg(PITCH3,Pitch);//设定两行视频数据存放地址间隔

SetReg(BASE_PAGE3,basepage3.value);//设置页表基地址等信息

SetReg(MC2,0x00100010);//upload“视频DMA3寄存器”

SetReg(IER,0x00000040);//设置中断使能寄存器

SetReg(MC1,0x00100010);//启动DMA3传输

4.4流Minidriver

Minidriver的整个调试工作是在DirectShow提供的GraphEdit工具中完成的,GraphEdit提供了良好可视化界面,可以方便的实现Filter的插入、删除和连接,而且可以查看和修改Filter属性。整个调试过程分为三步完成——视频预览和音频监听、视频采集并压缩存放为AVI文件、解压AVI文件并播放输出到电视设备。

图4所示为视频采集播放卡视频预览和音频监听的FilterGraph,视频输出到显示屏幕和声卡。

图4视频采集播放卡预览FilterGraph

图5所示为视频采集播放卡播放输出上述采集的AVI格式视频文件的FilterGraph,由于SAA7146ABRS只能接收UYVY格式的视频数据,因此需要增加了一个ColorSpaceConverterFilter来实现RGB24到UYVY格式的转换。

图5AVI文件播放输出FilterGraph

5总结

视频采集播放卡采用软件方法实现音视频压缩、解压缩,虽然需要占用一定的计算机系统资源,但具有硬件电路简单、成本低、升级容易等优点。设计选用专用多媒体PCI接口芯片SAA7146A,实现了与视频编码器、视频解码器和音频编解码器的连接。为利用现有音视频编解码资源,扩展视频采集播放卡应用范围,编写了流Minidriver。通过使用DirectShow提供的包装Filter,把硬件设备包装成多个Filter组件,实现了DirectShow应用程序对硬件设备的访问。

参考文献

[1]SAA7146ADataSheet.PhilipsSemiconductors.1998

[2]SAA7113HDataSheet.PhilipsSemiconductors.1999

[3]SAA7121HDataSheet.PhilipsSemiconductors.2002

[4][美]ArtBaker,JerryLozano著,施诺等译.Windows2000设备驱动程序设计指南.机械工业出版社,2001

[5]陆其明.DirectShow开发指南.清华大学出版社,2003.12

上一篇:林场场长述职报告 下一篇:医院后勤副院长述职报告