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

发布时间:2010-11-14 阅读量:1867 来源: 发布人:

中心议题
    * 提出了一种数字电视机顶盒上的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的开发,具有很好的借鉴价值。

 

相关资讯
贸泽电子深入探讨以人为本的工业5.0新变革 探索灵活的可持续未来工业机遇

本期EIT探讨了从工业4.0到工业5.0的转变,以及即将实现的技术进步

2025第24届西部全球芯片与半导体产业博览会

CWGCE2025西部芯博会总规模将达到60000㎡,同期举办光电展+工业展+智能展+军工展等相类展会,将有更多集成电路行业新装备、新产品、新材料、新技术、新工艺、新趋势及新应用集中亮相

2025第24届西部芯博会走集团化品牌化之路

CWGCE2025西部芯博会总规模将达到60000㎡,同期举办光电展+工业展+智能展+军工展等相类展会,将有更多集成电路行业新装备、新产品、新材料、新技术、新工艺、新趋势及新应用集中亮相

CWGCE2025第24届西部芯博会4月启幕

CWGCE2025西部芯博会总规模将达到60000㎡,同期举办光电展+工业展+智能展+军工展等相类展会,将有更多集成电路行业新装备、新产品、新材料、新技术、新工艺、新趋势及新应用集中亮相

CCWPE2025第24届西部光电博览会4月启幕

作为我国中西部地区历史最悠久的光电领域全产业链综合性年度盛会,规模和档次逐年增加和提高,CCWPE2025又新增了多个行业组织联办单位,同时将进一步扩容和丰富论坛内容。