手机端
or

欢迎您加入我爱方案网QQ群

1.智能产品外包服务群(311606115)
2.嵌入式项目开发群(491609563)

在数字电视机顶盒上搭建Linux的USB视频数据采集平台

巫莉,于鸿洋,张萍| 数字电视,嵌入式,USB,Linux,解码芯片,视频,音频,摄像头| 2010-11-14
969 收藏
分享到: 
每日精选
热门文章
热门方案

中心议题
    * 提出了一种数字电视机顶盒上的USB视频数据采集平台
    * 给出了具体设计方案
解决方案
    * 采用STi7109作为主芯片
    * 软件的角度分为5个层次


1 Linux
USB概述

Linux是一套自由软件,用户可以无偿地得到其源代码和大量的应用程序,并可以任意修改和补充,这样使得开发者可以更方便地开发机顶盒的功能,但是由于Linux本身各种软件的复杂的依赖性以及缺乏稳定完善的维护,Linux的开发不像Windows那么方便容易。通用串行总线(USB)具有易于使用、速度快、可靠性强、成本低等优点,在市场上已经广泛普及。USB摄像头的视频播放也越来越受欢迎。笔者首先介绍了采用的STi7109芯片的机顶盒的硬件及软件系统,然后阐述了在Linux上搭建USB摄像头视频数据采集平台的过程,同时也使读者对在Linux上怎样进行软件开发有更深的认识。

2基于音频解码芯片STi7109的数字电视机顶盒体系结构

2.1音频解码芯片硬件体系结构

本设计采用STMicrotronics公司最新的增强型高清多标准视音频解码芯片STi7109作为主芯片。STi7109在一个芯片上集成了2个频率为266 MHzST231CPU以及VC-1MPEG-2H.264视音频解码器,PAL/NTSC/SECAM编码器,116 kbyteI-Cache132 kbyteD-Cache,传输过滤解扰、解复用模块,显示和图形引擎功能模块。STi7109拥有16个级别的中断控制器,定义了6个可扩展的8位可编程输入/输出端口(GPIO)。除MPEG-2外,该系统芯片解决方案还支持高清H.264/MPEG-4 AVC,以及MPEG-4 P2标清标准。其强大的视频解码能力为视频播放系统的实现提供了硬件条件。STi7109开发板包含1USB接口,支持USB2.0协议,支持高速USB设备。STi7109数字机顶盒硬件平台如图1所示。

图1

数字信号流(包括公开的和加密的)通过缆线传输到高频头,通过芯片STb0468b处的QAM/QPSK解调处理,传输到STi7109集成芯片进行解复用和PES流分组解析,从而产生对应的视频信号和音频信号。

2.2 USB摄像头视频数据采集平台软件体系结构

STi7109USB摄像头视频数据采集平台从软件的角度看,主要分为5个层次:BootloaderLinux内核,文件系统,加载驱动模块和应用软件。STi7109平台上的软件系统如图2所示。

图2

3移植LinuxUSB摄像头驱动

由于USB摄像头根据摄像头芯片的不同驱动也不同,在Linux内核上很少带有或几乎没有USB摄像头的驱动,需要自己开发安装。在开源项目中,spca5xx驱动以及后来的gspca驱动涵盖了大部分主流的摄像头驱动,但是也无法包含各种品牌的所有型号的摄像头。因此需要在熟悉USB摄像头驱动的情况下对驱动进行修改,并按照Linux上的特殊要求来完成对USB摄像头的安装。

下面介绍在Linux下怎样移植、安装USB摄像头驱动,并使其适用于自己的USB摄像头。

1)下载开源项目的USB摄像头驱动

笔者首先在CSDN下载频道上下载“gspcav120071224.tar.gz”。其次在Linux上的下载命令为“wget-c http://mxhaard.free.fr/spca50x/Download/gspca120071224.tar.gz”。最后解压驱动压缩包“tar zxvf gspca120071224.tar.gz”。2)使USB摄像头驱动适合自己的摄像头USB摄像头驱动直接相关的是USB摄像头芯片型号。在Windows下右键点击“我的电脑”-“管理”-“设备管理器”-“图像处理设备”选择摄像头设备双击,在“详细信息”一栏可以看到USB摄像头的UIDVID,也可以通过Linuxlsusb命令进行查看。笔者采用的是ID0ac8:307b的摄像头。通过分析USB摄像头驱动源代码判断是否适合自己的摄像头芯片。进入“gspca120071224”文件夹,其中最核心的是gspca_core.c文件以及gspca.h头文件。gspca_core.c包括设备注册、注销和各种操作方法集。gspca.h的主要内容有:(1)定义所支持的Vendor ID号;(2)对支持的DSP桥接控制芯片型号进行编号;(3)对支持的CMOS/CCD图像传感器型号进行编号。另外,还定义了图像格式相关的常量和数据结构(如色彩空间、调色板、图像分辨力等),帧数据结构,摄像头操作方法集等。ConexantEtomsSonixPixArtVimicroSunplus等文件夹中定义了各传感器相关的头文件。decoder文件夹中包含了对各种图像格式进行编解码的源代码。

通过查看gspca_core.cgspca.h两个文件,发现使用的USB摄像头的Vendor IDDSP芯片和image sensor已包含在其中。如果不在其中,则要定义DSPsensor芯片的相应头文件,并在gspca.h中添加相应的设备信息,还要把摄像头加入到gspca_core.c的摄像头设备列表中。

3)安装USB摄像头驱动于Linux系统

Linux下对于硬件驱动,可以将驱动程序静态编译进内核中,也可以将它作为模块在使用时再加载。每块可以在运行时添加到内核的代码,被称为一个模块。Linux内核提供了对许多模块类型的支持,每个模块由目标代码组成。

由于Linux中摄像头驱动必须要有(Video For LinuxV4L)的支持,V4LLinux中关于视频设备的内核驱动,它为针对视频设备的应用程序编程提供一系列接口函数,因此必须先加载V4L相关的videodev.ko模块。USB设备也需要USB主控制器驱动,由于STi7109嵌入式系统提供了OHCI/EHCI的主控制器驱动模块,因此不需要另外加载。

gspca驱动程序文件夹内包含了自动化编译的Makefile文件以及安装加载模块的脚本文件gspca_build,通过运行“./gspca_build”,即可完成对gspca驱动的安装,也可以根据自己的需要对Makefilegspca_build进行修改。

安装USB摄像头驱动并在机顶盒上插上USB摄像头后,通过运行命令“lsmod|grep videodev”,看到videodev已经安装,运行命令“ls/dev|grep video”,看到“/dev”文件夹下有了videovideo0两个文件,说明已经识别到了USB摄像头设备。

 

4搭建USB摄像头视频信号采集平台

4.1Linux下安装GTK+

GTKGIMP Toolkit)是一套跨多种平台的图形工具包,目前已发展为一个功能强大、设计灵活的通用图形库,成为Linux下开发图形界面应用程序的主流开发工具之一。由于GTK+简单易用,拥有强大的功能和丰富的API,而且作为一个开放的自由软件,在Linux下已经发展得比较成熟,因此在Linux系统下可以使用GTK+库方便地对机顶盒的GUI进行开发。

由于Linux下各种源码具有很复杂的依赖性,因此首先需清楚安装GTK+所需要的条件。所需的源码包包Bootloader Linux内核文件系统驱动模块应用软件图2 STi7109平台上的软件系统括:GNU make工具,GNU gettext软件包(当系统上没有gettext()函数的时候需要),GNU libiconv库(当系统上没有iconv()函数的时候需要),fontconfig库,FreeType库,libpng库,jpegsrc库,tiff库,pkg-config工具,GLib库,ATK库,Cairo库,Pango库和GTK+库。

其中很多源码包在比较新的Linux版本系统都会自带。笔者主要安装了5个源码包,即GLibATKCAIROPANGOGTK。上面5个源码包由于其依赖性必须按从前到后的顺序依次安装。在Linux上进行源码安装很容易找不到需要的某个包或文件,编译出错。需要对Linux的系统原理有比较熟悉的认识,并且要仔细阅读README,install等文件,了解安装过程。

下面总结几个关系到能否成功编译的因素:1)默认情况下,编译器只会使用/lib/usr/lib这两个目录下的库文件。如果安装了某些库,没有指定搜索路径,编译就会出错。此时可在“./configure”命令时指定“--prefix=/usr”,这样库文件就安装到了“/usr/lib”下,或是通过设置LD_LIBRARY_PATH路径,添加“/usr/local/lib”路径,即没有指定安装路径时的库的安装位置,或者保存在“/etc/ld.so.conf”文件中,因为“/etc/ld.so.conf”文件记录了编译时

使用的动态链接库的路径。2)改动库文件后一定要运行一下“ldconfig”命令,它的作用就是将“/etc/ld.so.conf”列出的路径下的库文件缓存到“/etc/ld.so.cache”以供使用。不然即使库文件就在“/usr/lib”下,也是不会被使用的。3)设定正确的PKG_CONFIG_PATH。“pkg-config”是一个向configure程序提供软件和库的版本、路径等系统信息的程序,这些信息只在编译时使用。以GLib为例,如果将glib-2.x.x装到了“/usr/local/”下,那么glib-2.0.pc就会在“/usr/local/lib/pkgconfig”下,需要将这个路径添加到PKG_CONFIG_PATH下面,另外还需要将“lib/pkgconfig”目录下不需要的glib-2.0.pc删除掉,以确保configure找到正确的glib-2.0.pc,以免提示错误信息。安装时可以把指令统一为:./configure--prefix=/usr&&make&&make install。其中&&表示当前一条命令正常结束,后面的命令才会执行。这个办法既节省时间,又可防止出错。运行完之后可以运行命令“echo$?”,表示检查上一条命令的退出状态,返回0表示程序正常退出,返回非0表示错误退出。注意到上面说的几个因素,每次安装完后运行一次ldconfig,安装过程中一般都会经过多次配置等改动。

4.2应用GTK+库采集并显示视频数据

安装了GTK+库之后,就可以利用GTK+库提供的图形界面的API进行应用程序开发。笔者参考了camoramaspaviewLinux上的USB摄像头数据采集的应用程序。具体过程为在利用V4L提供的API获取到USB摄像头的视频图像数据后,再利用GTK+中的GDKPIXBUF库中的API函数来显示获取到的图像。GDKPIXBUF库是专门用于图像处理的,它支持多种图像格式(如TIFFJPEGPNGGIF等)和动画。通过GTK+的应用程序,在窗口中可查看到USB摄像头的视频图像。

5小结

介绍了STi7109芯片为主芯片的机顶盒硬件平台及软件系统,介绍了安装配置USB摄像头驱动,利用GTK+库编写应用程序,搭建USB摄像头视频数据采集平台的整个过程。

本文主要在于过程方法的介绍,对于进一步功能的开发,如怎样用GTK+库来实现遥控器的控制等还有待进一步研究。主要创新点为使读者对怎样在Linux上进行机顶盒的开发有了更明确的认识,如对LinuxUSB摄像头驱动开发、特殊的源码包联系性以及编译原理等都有了更深的理解。同时采用具有发展潜力的GTK+库来编写图形界面应用程序使图像采集过程更加人性化。该过程的方法也适用于其他嵌入式Linux的开发,具有很好的借鉴价值。

 

点赞

深圳市中电网络技术有限公司 Copyright© www.52solution.com 粤ICP备10202284号