基于Intel Xscale和嵌入式Linux的视频模块设计
时间:04-06
来源:互联网
点击:
1 引言
随着计算机进入后PC时代、多媒体技术和无线通信技术的发展,融合通信、计算和多媒体功能的各类多媒体终端(如PDA)应用正在成为开发应用的新亮点,视频则是这类应用中不可缺少的重要组成部分。多媒体终端,作为嵌入式系统,大多数应用场合是对速度、功耗、体积有严格要求的车载、移动通信、手持式设备等,那么如何设计一个体积小、实时处理能力强、功耗低、可移植性强的视频模块以满足嵌入式系统设计对速度、功耗和空间的要求和应用开发的需求就成为一个很有意义的课题。
基于XScale 技术的新型处理器PXA255 是英特尔公司推出的为无线通信设备带来更高性能和更低能耗的微处理器产品,为多媒体手机、掌上电脑、车载信息通讯系统及其它无线互联网产品提供了强大动力。本文介绍了基于PXA255 处理器和嵌入式Linux 操作系统的无线多媒体移动终端的视频模块的设计与开发,该视频模块具有实时采集、压缩、解压、显示、拍摄和存储图像等功能,经过压缩的视频信号还可以通过 Internet 进行传输。由于采用了模块化设计,该视频模块还可以很。容易的移植到别的多媒体终端应用中。
2 硬件设计
硬件设计时,视频模块的主体部分采用外置形式,与终端平台的接口采用目前广泛采用的USB 接口,视频模块的硬件原理框图如图1 所示。采用这样的硬件结构,是基于以下的考虑。①较高的传输速度,尤其是USB 总线对实时传输的良好支持可以满足图像实时性的要求。②“即插即用”操作,终端平台可以对摄像头进行自动检测和配置,节省了系统功耗。③摄像头采用外置形式,节约了系统的硬件空间,现成USB总线的固件或芯片包含低级并行/串行转换、误差校验和数据流控制算法等功能,可以简化系统设计工作。④基于USB总线的可扩展性,可方便的进行系统功能扩展,符合嵌入式系统接口串行、高速的发展方向。⑤可移植性,采用了模块化设计和USB 总线进行传输,可以很容易的移植到带有USB 接口的别的嵌入式系统中。
![](../img/eep/emb/emb-23416qa2pa4qto4m.jpg)
由于数字摄像头所采集到的图像数据是没有经过压缩处理的,数据量非常大,不符合USB 总线实时传输的要求。因此在经过USB总线传输以前必须使用视频压缩芯片对采集到的视频数据进行压缩,该类芯片的特点是将某一标准的压缩算法固化在其中, 具有开发成本低、开发周期短、运算速度快等优点,符合图像传输实时性的要求。经过对各种专用视频压缩芯片的选择,采用了OmniVision公司推出的 OV518高性能摄像机到USB 接口芯片,该芯片降低了产品的成本,极大地简化了单片CMOS图像传感器和USB的接口,可以很容易地构成基于USB的视频子系统。
OV518 最大视频传输速度的设计,使得系统能够以更加实时的方式获取大量的视频信息。片内高性能专用压缩引擎可以达到7:1 的压缩比,保证了从图像传感器到终端平台的快速图像传输。对于QVGA图像格式,OV518的压缩引擎支持高达30 帧/秒的传输速度,减少了低带宽应用中通常会出现的图像跳动现象。OV518还具有优秀的静态图像捕捉功能,使用起来和数码相机一样方便。其内部结构如图 1 中USB 连接桥部分所示。由于PXA255 的USB 接口只有从控制器,只能作为一个从设备使用,我们采用Philips公司的ISP1160为PXA255扩展了两个USB主接口。ISP1160是专门用以在嵌入式系统或便携式设备中实现USB 协议的芯片,支持所有的传输类型:控制、中断、批量及同步。该芯片还提供了节能工作模式以减少功耗,每个下行端口都有独立的过流检测输入引脚和电源供电开关控制输出引脚,使系统电源的管理更加灵活。ISP1160与CPU的接口,是专为RISC 的CPU设计的,极大的简化了设计工作,可以不加修改的移植到别的嵌入式系统应用中。总之,整个视频模块硬件设计体现了嵌入式系统设计对体积,速度和功耗的要求,既保持了很高的处理速度和很小的集成空间,又降低了系统的功耗。
3 软件设计
3.1 软件平台
微处理器PXA255 功能强大,系统资源十分丰富,十分需要一个功能强大的操作系统来管理这些资源,经过对各种嵌入式操作系统的比较,嵌入式Linux的诸多优点非常适合于作为该终端的操作系统:开放的源码,可移植性强,强大的网络功能和对USB 总线及Video设备的良好支持。终端平台采用图形用户界面,出于嵌入式系统对实时性和对GUI 的占用资源少、高性能、高可靠性及可配置的考虑,我们选择了MiniGUI图形用户界面支持系统。
3.2 视频模块软件的基本结构
视频模块软件的设计采取了模块化的设计方法,根据视频模块设计的特点和多媒体终端视频功能的需求,整个视频模块软件有4 个功能模块组成:USB 模块、摄像头驱动模块、解码模块、视频应用模块,完成了采集、解码、本地显示、本地用户控制和网络传输等功能,其基本结构如图2 所示。为了提高图像采集的实时性和系统性能,在各个模块的设计过程中,根据Linux 操作系统的特点和采用的解压缩算法的特征,我们对程序和算法进行了优化、简化,以加快计算速度,提高效率。以下将对各个模块的功能和实现进行介绍。
![](../img/eep/emb/emb-234173c02jxxqlps.jpg)
3.2.1 USB 模块
该模块包括USB 总线驱动程序(USBD)和主控制器驱动(HCD)。USBD 主要处理USB 协议中与硬件无关的部分,对协议规定的USB 总线以及USB 设备共有的操作和性质提供支持。HCD 负责对ISP1160 进行抽象和对USB 的低级支持,ISP1160 的寄存器编程来驱动ISP1160,为上层的USB 总线驱动提供软件接口来控制ISP1160。图3 给出了USB 模块的软件功能结构图。Linux 操作系统提供有稳定的USB 总线驱动程序,我们只需要编写HCD 程序。在HCD 的设计中,我们结合ISP1160 专为嵌入式设备设计的特性对实时传输和非实时传输进行不同的调度,增强了对USB 总线实时传输的支持;结合Linux对软中断的良好支持,采用底半部机制(bottom half)提高中断处理的实时性。通过这两项措施有效的提高了视频数据传输的稳定性和速度,降低了对系统资源的消耗。
![](../img/eep/emb/emb-23418ud4kpiqapdo.jpg)
3.2.2 摄像头驱动模块
该模块为摄像头的USB类型驱动(ClassDriver),其主要功能是对视频应用模块提供符合Linux 的视频捕获标准V4L2(Video for Linux Two)的接口,通过USB 模快接收图像数据。V4L2 是Linux 平台上处理和访问视频设备的最新的标准应用程序接口,通过该接口,模块对视频应用模块提供QVGA(320*240)和VGA(640*480)两种采集模式的切换,视频图像参数的调整,彩色和黑白视频流和静止图像的采集功能。该驱动采用多个帧缓冲存储空间,并使这些帧存轮流处于接收数据和存储数据状态,当收到图像帧事件发生时,将会触发相应的机制,实现了图像帧的异步接收,异步接收机制提高了程序的运行效率。除了实现V4L2 标准常规的read 接口外,还重点实现了mmap(Map device memory into application address space)接口,通过该接口,可以把内核空间的设备内存地址空间映射到用户空间的地址空间,减少了图像数据拷贝的次数,提高了图像采集的实时性。
3.2.3 解码模块
由于图像经过了压缩引擎的压缩,在本地终端进行实时显示之前必须经过解码模块的解码,如果视频流通过网络进行传输,在本地终端视频流则不必经过该模块,但是远程应用仍然需要该模块。目前图像压缩技术主要采用余弦变换(DCT),小波变换(Wavelet)和子带编码等技术,其中余弦变换具有快速算法,易于用软硬件实现,且压缩性能接近统计最佳,目前被广泛采用,这也是压缩引擎采用的算法。余弦变换用于数字图像压缩编码时,一般采用二维变换,先将整幅图像分成 8×8 或16×16 宏块,以宏块为单位进行二维变换,再对每一宏块的变换域系数用Zig - Zag 方式进行Huffman 变长编码或算术编码。在图像接收端作相反的处理,即先恢复各宏块的变换域系数,再经余弦反变换即可恢复图像数据,其解码原理和主要步骤如图4 所示。
![](../img/eep/emb/emb-234193xskfebz4pa.jpg)
该模块是提高实时性的关键所在,为提高实时性,我们对代码进行了有效的优化,主要措施有:针对Xscale微处理器的特点,合理安排程序流程,尽量做到并行处理,提高程序运行效率;采用适合整数运算的快速反余弦变换算法,变换中只用加法和移位,减少了乘法运算量,提高了运算效率;采用基于查表的快速 Huffman 解码算法,以减少运算量,提高计算速度。通过这些措施既减少了内存的开销,也加快了解码的速度,取得了满意的效果。
3.2.4 视频应用模块
视频应用模块包括两部分:本地应用子模块完成视频图像的实时显示,本地用户控制和图像的存储等功能;网络传输子模块完成基于RTP 的压缩后的视频流数据传输,远程控制等功能。借助于Linux 操作系统对多线程机制的良好支持,主线程专门负责消息的响应,使程序能够即时响应用户通过鼠标或键盘输入的命令或其他事件,辅助线程用于完成图像的实时显示、存储和网络传输等其他比较费时的工作,这样就不至于影响主线程的运行,保证在做图像解码显示和数据传输的同时,能够即时响应用户的输入。不同的线程完成不同的任务,提高了程序的模块化,便于维护和扩展,充分利用了系统资源,有利于提高应用程序的实时性。由于对视频输出设备,RGB空间格式更加直接高效,而解码模快的输出为YUV颜色空间子格式,所以在视频图像的回显之前必须进行颜色空间的转换。该模块图形界面的实现是通过调用MiniGUI 提供的API 函数来实现的,MiniGUI 提供了比较丰富的类Win32API 函数,给我们开发图形界面带来了很大的方便。
4 视频模块性能及测试效果
视频模块经过终端测试,性能结果如表1 所示。通过结果可以看出,采集的经过压缩的视频图像帧速和经过网络传输后基于PC显示的帧速都达到了理想水平,但视频图像在终端上显示时,由于嵌入式系统处理能力较PC 机弱,解码模块和显示模块虽然经过了优化,但仍然占有一定的时间,使速度下降了很多。但该速度相对于嵌入式系统来说,也达到了实用的地步,并且不影响终端基于网络的视频应用,随着嵌入式微处理器处理能力的逐渐增强,这个问题也一定能得到很好的解决。比如,集成英特尔无线MMX 技术的处理速度更快的英特尔PXA27x 处理器家族新增了一系列新技术以提供额外的性能来支持高级视频。
![](../img/eep/emb/emb-23420o1n2yf0lu0o.jpg)
终端视频模块采集的图像经过压缩、解压缩后具有较高的质量,基于PC 和终端显示并未见明显区别,图像效果及用户界面窗口如图5 所示。
![](../img/eep/emb/emb-23421ptwlrjp3plr.jpg)
5 结论
本文针对基于Intel Xscale 和嵌入式Linux 的多媒体终端对视频应用的需求,从实时性、功耗和体积等着手,提供了一种多媒体终端图像实时连续采集、显示管理和网络传输的方案,并且在实际中得到了验证。由于采用了模块化设计和设计的灵活性,只需稍加修改就还可以很容易的移植到别的嵌入式系统多媒体应用中。我们可以在该终端平台上方便地进行一些基于视频模块的网络应用开发,我们认为有价值的进一步开发与研究方向包括: 作为嵌入式视频网络接入终端满足不同方面的需要,例如远程数字监控系统, 交互式医疗,交互式可视多媒体远程教学、网络电台、视频点播等。较PC机实现的系统有具有体积小、成本低和稳定性高的特点,开发具有自主知识产权的手持式多媒体视频网络终端系统。当今世界已经进入了Internet 时代, 嵌入式系统接入Internet 已成为网络接入重要的基础信息设施。因此, 具有视频模块的嵌入式系统在交互式多媒体、嵌入式系统、消费电子产品等领域具有很强的应用背景和市场前景。
随着计算机进入后PC时代、多媒体技术和无线通信技术的发展,融合通信、计算和多媒体功能的各类多媒体终端(如PDA)应用正在成为开发应用的新亮点,视频则是这类应用中不可缺少的重要组成部分。多媒体终端,作为嵌入式系统,大多数应用场合是对速度、功耗、体积有严格要求的车载、移动通信、手持式设备等,那么如何设计一个体积小、实时处理能力强、功耗低、可移植性强的视频模块以满足嵌入式系统设计对速度、功耗和空间的要求和应用开发的需求就成为一个很有意义的课题。
基于XScale 技术的新型处理器PXA255 是英特尔公司推出的为无线通信设备带来更高性能和更低能耗的微处理器产品,为多媒体手机、掌上电脑、车载信息通讯系统及其它无线互联网产品提供了强大动力。本文介绍了基于PXA255 处理器和嵌入式Linux 操作系统的无线多媒体移动终端的视频模块的设计与开发,该视频模块具有实时采集、压缩、解压、显示、拍摄和存储图像等功能,经过压缩的视频信号还可以通过 Internet 进行传输。由于采用了模块化设计,该视频模块还可以很。容易的移植到别的多媒体终端应用中。
2 硬件设计
硬件设计时,视频模块的主体部分采用外置形式,与终端平台的接口采用目前广泛采用的USB 接口,视频模块的硬件原理框图如图1 所示。采用这样的硬件结构,是基于以下的考虑。①较高的传输速度,尤其是USB 总线对实时传输的良好支持可以满足图像实时性的要求。②“即插即用”操作,终端平台可以对摄像头进行自动检测和配置,节省了系统功耗。③摄像头采用外置形式,节约了系统的硬件空间,现成USB总线的固件或芯片包含低级并行/串行转换、误差校验和数据流控制算法等功能,可以简化系统设计工作。④基于USB总线的可扩展性,可方便的进行系统功能扩展,符合嵌入式系统接口串行、高速的发展方向。⑤可移植性,采用了模块化设计和USB 总线进行传输,可以很容易的移植到带有USB 接口的别的嵌入式系统中。
![](../img/eep/emb/emb-23416qa2pa4qto4m.jpg)
由于数字摄像头所采集到的图像数据是没有经过压缩处理的,数据量非常大,不符合USB 总线实时传输的要求。因此在经过USB总线传输以前必须使用视频压缩芯片对采集到的视频数据进行压缩,该类芯片的特点是将某一标准的压缩算法固化在其中, 具有开发成本低、开发周期短、运算速度快等优点,符合图像传输实时性的要求。经过对各种专用视频压缩芯片的选择,采用了OmniVision公司推出的 OV518高性能摄像机到USB 接口芯片,该芯片降低了产品的成本,极大地简化了单片CMOS图像传感器和USB的接口,可以很容易地构成基于USB的视频子系统。
OV518 最大视频传输速度的设计,使得系统能够以更加实时的方式获取大量的视频信息。片内高性能专用压缩引擎可以达到7:1 的压缩比,保证了从图像传感器到终端平台的快速图像传输。对于QVGA图像格式,OV518的压缩引擎支持高达30 帧/秒的传输速度,减少了低带宽应用中通常会出现的图像跳动现象。OV518还具有优秀的静态图像捕捉功能,使用起来和数码相机一样方便。其内部结构如图 1 中USB 连接桥部分所示。由于PXA255 的USB 接口只有从控制器,只能作为一个从设备使用,我们采用Philips公司的ISP1160为PXA255扩展了两个USB主接口。ISP1160是专门用以在嵌入式系统或便携式设备中实现USB 协议的芯片,支持所有的传输类型:控制、中断、批量及同步。该芯片还提供了节能工作模式以减少功耗,每个下行端口都有独立的过流检测输入引脚和电源供电开关控制输出引脚,使系统电源的管理更加灵活。ISP1160与CPU的接口,是专为RISC 的CPU设计的,极大的简化了设计工作,可以不加修改的移植到别的嵌入式系统应用中。总之,整个视频模块硬件设计体现了嵌入式系统设计对体积,速度和功耗的要求,既保持了很高的处理速度和很小的集成空间,又降低了系统的功耗。
3 软件设计
3.1 软件平台
微处理器PXA255 功能强大,系统资源十分丰富,十分需要一个功能强大的操作系统来管理这些资源,经过对各种嵌入式操作系统的比较,嵌入式Linux的诸多优点非常适合于作为该终端的操作系统:开放的源码,可移植性强,强大的网络功能和对USB 总线及Video设备的良好支持。终端平台采用图形用户界面,出于嵌入式系统对实时性和对GUI 的占用资源少、高性能、高可靠性及可配置的考虑,我们选择了MiniGUI图形用户界面支持系统。
3.2 视频模块软件的基本结构
视频模块软件的设计采取了模块化的设计方法,根据视频模块设计的特点和多媒体终端视频功能的需求,整个视频模块软件有4 个功能模块组成:USB 模块、摄像头驱动模块、解码模块、视频应用模块,完成了采集、解码、本地显示、本地用户控制和网络传输等功能,其基本结构如图2 所示。为了提高图像采集的实时性和系统性能,在各个模块的设计过程中,根据Linux 操作系统的特点和采用的解压缩算法的特征,我们对程序和算法进行了优化、简化,以加快计算速度,提高效率。以下将对各个模块的功能和实现进行介绍。
![](../img/eep/emb/emb-234173c02jxxqlps.jpg)
3.2.1 USB 模块
该模块包括USB 总线驱动程序(USBD)和主控制器驱动(HCD)。USBD 主要处理USB 协议中与硬件无关的部分,对协议规定的USB 总线以及USB 设备共有的操作和性质提供支持。HCD 负责对ISP1160 进行抽象和对USB 的低级支持,ISP1160 的寄存器编程来驱动ISP1160,为上层的USB 总线驱动提供软件接口来控制ISP1160。图3 给出了USB 模块的软件功能结构图。Linux 操作系统提供有稳定的USB 总线驱动程序,我们只需要编写HCD 程序。在HCD 的设计中,我们结合ISP1160 专为嵌入式设备设计的特性对实时传输和非实时传输进行不同的调度,增强了对USB 总线实时传输的支持;结合Linux对软中断的良好支持,采用底半部机制(bottom half)提高中断处理的实时性。通过这两项措施有效的提高了视频数据传输的稳定性和速度,降低了对系统资源的消耗。
![](../img/eep/emb/emb-23418ud4kpiqapdo.jpg)
3.2.2 摄像头驱动模块
该模块为摄像头的USB类型驱动(ClassDriver),其主要功能是对视频应用模块提供符合Linux 的视频捕获标准V4L2(Video for Linux Two)的接口,通过USB 模快接收图像数据。V4L2 是Linux 平台上处理和访问视频设备的最新的标准应用程序接口,通过该接口,模块对视频应用模块提供QVGA(320*240)和VGA(640*480)两种采集模式的切换,视频图像参数的调整,彩色和黑白视频流和静止图像的采集功能。该驱动采用多个帧缓冲存储空间,并使这些帧存轮流处于接收数据和存储数据状态,当收到图像帧事件发生时,将会触发相应的机制,实现了图像帧的异步接收,异步接收机制提高了程序的运行效率。除了实现V4L2 标准常规的read 接口外,还重点实现了mmap(Map device memory into application address space)接口,通过该接口,可以把内核空间的设备内存地址空间映射到用户空间的地址空间,减少了图像数据拷贝的次数,提高了图像采集的实时性。
3.2.3 解码模块
由于图像经过了压缩引擎的压缩,在本地终端进行实时显示之前必须经过解码模块的解码,如果视频流通过网络进行传输,在本地终端视频流则不必经过该模块,但是远程应用仍然需要该模块。目前图像压缩技术主要采用余弦变换(DCT),小波变换(Wavelet)和子带编码等技术,其中余弦变换具有快速算法,易于用软硬件实现,且压缩性能接近统计最佳,目前被广泛采用,这也是压缩引擎采用的算法。余弦变换用于数字图像压缩编码时,一般采用二维变换,先将整幅图像分成 8×8 或16×16 宏块,以宏块为单位进行二维变换,再对每一宏块的变换域系数用Zig - Zag 方式进行Huffman 变长编码或算术编码。在图像接收端作相反的处理,即先恢复各宏块的变换域系数,再经余弦反变换即可恢复图像数据,其解码原理和主要步骤如图4 所示。
![](../img/eep/emb/emb-234193xskfebz4pa.jpg)
该模块是提高实时性的关键所在,为提高实时性,我们对代码进行了有效的优化,主要措施有:针对Xscale微处理器的特点,合理安排程序流程,尽量做到并行处理,提高程序运行效率;采用适合整数运算的快速反余弦变换算法,变换中只用加法和移位,减少了乘法运算量,提高了运算效率;采用基于查表的快速 Huffman 解码算法,以减少运算量,提高计算速度。通过这些措施既减少了内存的开销,也加快了解码的速度,取得了满意的效果。
3.2.4 视频应用模块
视频应用模块包括两部分:本地应用子模块完成视频图像的实时显示,本地用户控制和图像的存储等功能;网络传输子模块完成基于RTP 的压缩后的视频流数据传输,远程控制等功能。借助于Linux 操作系统对多线程机制的良好支持,主线程专门负责消息的响应,使程序能够即时响应用户通过鼠标或键盘输入的命令或其他事件,辅助线程用于完成图像的实时显示、存储和网络传输等其他比较费时的工作,这样就不至于影响主线程的运行,保证在做图像解码显示和数据传输的同时,能够即时响应用户的输入。不同的线程完成不同的任务,提高了程序的模块化,便于维护和扩展,充分利用了系统资源,有利于提高应用程序的实时性。由于对视频输出设备,RGB空间格式更加直接高效,而解码模快的输出为YUV颜色空间子格式,所以在视频图像的回显之前必须进行颜色空间的转换。该模块图形界面的实现是通过调用MiniGUI 提供的API 函数来实现的,MiniGUI 提供了比较丰富的类Win32API 函数,给我们开发图形界面带来了很大的方便。
4 视频模块性能及测试效果
视频模块经过终端测试,性能结果如表1 所示。通过结果可以看出,采集的经过压缩的视频图像帧速和经过网络传输后基于PC显示的帧速都达到了理想水平,但视频图像在终端上显示时,由于嵌入式系统处理能力较PC 机弱,解码模块和显示模块虽然经过了优化,但仍然占有一定的时间,使速度下降了很多。但该速度相对于嵌入式系统来说,也达到了实用的地步,并且不影响终端基于网络的视频应用,随着嵌入式微处理器处理能力的逐渐增强,这个问题也一定能得到很好的解决。比如,集成英特尔无线MMX 技术的处理速度更快的英特尔PXA27x 处理器家族新增了一系列新技术以提供额外的性能来支持高级视频。
![](../img/eep/emb/emb-23420o1n2yf0lu0o.jpg)
终端视频模块采集的图像经过压缩、解压缩后具有较高的质量,基于PC 和终端显示并未见明显区别,图像效果及用户界面窗口如图5 所示。
![](../img/eep/emb/emb-23421ptwlrjp3plr.jpg)
5 结论
本文针对基于Intel Xscale 和嵌入式Linux 的多媒体终端对视频应用的需求,从实时性、功耗和体积等着手,提供了一种多媒体终端图像实时连续采集、显示管理和网络传输的方案,并且在实际中得到了验证。由于采用了模块化设计和设计的灵活性,只需稍加修改就还可以很容易的移植到别的嵌入式系统多媒体应用中。我们可以在该终端平台上方便地进行一些基于视频模块的网络应用开发,我们认为有价值的进一步开发与研究方向包括: 作为嵌入式视频网络接入终端满足不同方面的需要,例如远程数字监控系统, 交互式医疗,交互式可视多媒体远程教学、网络电台、视频点播等。较PC机实现的系统有具有体积小、成本低和稳定性高的特点,开发具有自主知识产权的手持式多媒体视频网络终端系统。当今世界已经进入了Internet 时代, 嵌入式系统接入Internet 已成为网络接入重要的基础信息设施。因此, 具有视频模块的嵌入式系统在交互式多媒体、嵌入式系统、消费电子产品等领域具有很强的应用背景和市场前景。
嵌入式系统 Linux MiniGui 通用串行总线 相关文章:
- Linux嵌入式系统开发平台选型探讨(11-09)
- 嵌入式系统中文输入法的设计(03-02)
- 基于MPC755的嵌入式计算机系统设计(05-10)
- WinCE下光电编码器的驱动程序设计(04-12)
- 为什么嵌入式开发人员要使用FPGA(05-13)
- VxWorks几种常用的延时方法介绍(05-16)