基于S3C2440的车载影音系统设计

2011-02-19 07:50:56洪耀球胡继平陈玉明
制造业自动化 2011年3期
关键词:类库播放器调用

洪耀球,胡继平,陈玉明

HONG Yao-qiu,HU Ji-ping,CHEN Yu-ming

(景德镇高等专科学校 数学与信息工程系,景德镇 333000)

0 引言

随着我国经济的腾飞,人民生活水平的不断提高,我国汽车保有量迅速攀升,汽车保有量的提高同时带动了汽车相关附属品需求量的增大,尤其是车载影音设备。车载影音设备,这一车内娱乐系统渐渐将成为一辆汽车中不可或缺一部分。开车听歌已经成为一种时尚,一种潮流。乘车人也可在车上看电影,放松精神,消除坐车的疲惫。一款时尚的车载媒体设备会成为个性车主的汽车饰品。相对于传统的车载播放器,新型的车载影音设备从各个方面进行了改进,功能上出来常见的影音播放外,增加了实用性很强的倒车视频监控功能以及防疲劳驾驶的定时报警功能,另外还增加了电子书阅读和电子相册等附属功能。

1 系统总体设计

1.1 硬件平台选择

本系统三星S3C2440(ARM9)处理器作为硬件平台核心,ARM9系列具有良好的性能,能够流畅的进行音乐、视频的播放,其低功耗性也能为车载平台提供良好的续航能力。由于要用于视频播放,所以需要一个相对较为宽大的屏幕,我们将用户的输入设备定位为触摸屏,决定选取480像素*272像素的触摸屏,综合以上条件选取TQ2440平台为开发硬件载体。在倒车视频方面,为了具有更好的通用性,方便用户更换,选取市场常见的USB摄像头作为视频捕捉设备,最后选定由集成了中微星(ZC3XX)芯片的USB摄像头作为倒车视频输入设备。

1.2 开发环境选择

在软件平台选取上,选择了Linux嵌入式操作系统作为软件开发平台,Linux为开源平台,在开发成本上较为低廉,同时Linux具有丰富硬件驱动,对于USB摄像头、SD闪存等设备支持良好,最重要的是Linux平台的可裁剪性,通过对内核和硬件驱动的裁剪,可以实现系统的小巧化。图形界面方面,选取了诺基亚公司的Qt图形界面开发框架,进行用户交互图形界面的开发。Qt拥有良好的跨平台性,具有专门用于嵌入式Linux的版本,在嵌入式环境下Qt直接访问Frame Buffer,执行效率高,而且Qt具有丰富的类库,通过调用API可实现设计的全部功能。

1.3 系统功能整体规划

基于S3C2440(AM9)的车载影音系统设计实现功能:支持多种格式的音频、视频文件的媒体播放功能,倒车视频功能,防瞌睡定时提醒功能、TXT文本阅读功能、相册功能。

根据设计功能将整体设计分为三大部分(如图1所示)。

1)影音基本功能部分,此部分为音乐播放、视频播放两个模块;

2)特色功能部分,此部分分为倒车视频、定时提醒两个模块;

3)附加功能部分,此部分分为TXT阅读器、电子相册两个模块;

图1 整体设计框图

图2 系统运行效果图

2 模块详细设计

2.1 音乐播放器模块

音乐播放器的实现利用了Qt类库中QProcess类。通过这个类调用Mplayer播放器,使用QProcess类中的write()、readLine()这两个方法与Mplayer进行管道通信,实现对Mplayer的控制。主要用到的类还有QPushButton,QTimer,QSlider等。通过点击不同的QPushButton的实例所发出的clicked()信号和相应的槽相联实现相应的功能,这些槽实现的功能有:播放/暂停,快进/快退,调节音量 ,停止等。另外,音乐播放器还有上一曲/下一曲,播放模式的切换(如图3所示)。

1)与Mplayer的交互:对Mplayer的控制主要是通过QProcess类的write()方法向Mplayer发送命令,Mplayer得到命令后执行相应的操作,对于Mplayer的输出进行如下处理:Mplayer的输出被QProcess捕获,每捕获一行,QProcess就将捕获到信息写进QProcess输出缓冲队列中,然后发送一个readyReadStandardOutput()信号通知应用程序有输出可以提取,最后应用程序通过readLine()方法从QProcess的输出缓冲队列中读取一行输出。

图3 音乐播放模块流程

2)播放控制:播放开始时,读取播放文件的播放时间长度并将这个时间值设定位QSlider滑动块类的最大值,然后通过Qtimer类的实例定期的发送timeOut()信号,将这个信号和特定的槽相联,此功能槽调用QProcess的write()方法向Mplayer播放器发送命令,当QProcess将Mplayer的输出数据收集完毕后,发送readyReadStandardOutput()信号来调用用于解析输出的槽函数获得Mplayer播放器当前的时间,并将当前时间值传给滑动块实现播放进度条。

3)播放列表的实现:在启动播放器前先遍历特定的目录,获取目录下的文件名称并添加到QStringList实例中,然后结合QListWidget类制作成播放列表。播放模式共有四种:单曲播放、单曲循环、列表循环、随机播放。这四种播放由一个整形变量来表示,每次播放完一首歌曲之后QProcess就会发送一个finished(int,QProcess::Exit Status)信号,将这个信号和相应槽链接在一起,这个槽实现播放下一曲的功能,在播放前先检查播放模式以确定下一曲的文件名。播放/暂停,快进/快退,调节音量,停止这几项功能均利用QPushButton实现,当一个QPushButton被点击时就会发送一个clicked()信号,与其对应的槽就会向Mplayer发送相应的命令,实现相应功能。

2.2 视频播放器模块

图4 视频播放模块流程

视频播放器的实现是利用QProcess和Mplayer的slave模式实现的。首先是利用QDir类、QStringList类和QListWidget类将指定目录下的视频文件做成文件列表的形式,然后为每个列表项的itemDoubleClicked(QListWidgetItem *)信号设计一个槽,并且将这个槽和itemDoubleClicked(QLis tWidgetItem *)信号连接在一起。当列表项被双击之后就激发列表项的itemDoubleClicked(QListWid getItem *)信号,此时与这个信号相联的槽就会被调用,在这个槽里面可以启动QProcess播放选中的视频文件。在播放的同时就会出现相应的控制按钮,用来控制视频播放的进度。这些控制功能的实现是利用QPushButton类,通过QPushButton类发送的clicked()信号来调用实现相关功能的槽。在播放结束后QProcess就会发送一个finished(int,QProc ess::ExitStatus),然后设计一个与这个信号相联的槽,在这个槽里面释放Mplayer播放上次所占用的资源并返回文件列表。

2.3 倒车视频模块

在视频的获取方面通过调用Linux中的Vidoe4Linux视频接口访问USB摄像头驱动。所用到Video4Linux提供的结构体有,video_capability用于设定摄像头的基本信息、vidoe_picture用于设定采集图像的各种属性、vidoe_windows用于设定采集图片的坐标和大小。采集方式为内存地址映射,主要用到video_mbuf和video_mmap结构体,通过调用Linux系统调用mmap进行内存地址映射。读取视频数据采用的方法是双缓冲技术,即一帧图片采集时,另一帧图片进行显示。具体采集过程如下:

1)打开USB摄像头设备

2)设定video_picture图片色彩、对比度等信息

3)内存地址映射,将内存映射地址与video_ mbuf绑定。

4)开始采集,同步,等待一帧采集的结束。

5)采集的数据传送给前台显示程序。

图5 倒车视频模块流程

视频显示时,使用Qt中的QImage类读取内存中由视频获取使程序传递来的图像信息,利用QTimer定时器定时循环激活QWidget中的PaintEvent事件,通过Painter类中的paintImage函数将图片显示在指定坐标区域内,同时通知视频获取程序获取下一帧信息,如此循环,实现倒车视频的显示。运行流程如图5所示。

2.4 定时提醒模块

图6 定时提醒模块流程

定时提醒的实现方法为使用定时器进行周期性的循环播放音乐。运行流程见图3-4具体实现利用Qt中的Qtimer类进行定时,QTimer类为Qt的定时器类,对其初始化一个时间量后其可以实现倒计时功能。在用户输入周期时间并开启定时提醒后,程序会通过一个启动信号激活Qtimer类开始进行倒计时,当Qtimer类倒计时减为0时,会通过信号和槽的机制发送一个信号给已构造好的槽函数,此函数功能为调用后台的mplayer播放提醒音乐并重新对QTimer类进行赋值,使其从新进行倒计时,如此循环,实现了定时播放音乐进行提醒的功能。

2.5 TXT文本阅读器

图7 TXT阅读器流程

TXT阅读器功能为一个可以加载TXT格式文本并显示的电子书阅读器。主要使用Qt类库中的QTextEdit类作为文本显示的载体,将QTextEdit类属性置为只读,屏蔽QTextEdit的编辑功能,只是使用其文本的显示和文本属性设置的功能。TXT文本阅读器模块运行流程如图7所示。在文件选择器中,使用QDir和QListWidget类,利用QDir类读取文本文件夹路径下的文件,并使用“*.txt”过滤字符串对文件名进行过滤,只读取TXT文档的文件名并将返回值传送给QListWidget类;QListWidget类为可选择列表类,使用QListWidget类显示由QDir类返回的文本名列表,供用户选择要阅读的文本。当用户选择某一文件时,QListWidget将文件已选择信号发送给openfile槽函数,openfile函数使用QFile类接收已选文件的文件名,再利用QTextStream类读取文件中的内容,最后使用QTextEdit中的setText方法使QTextEdit显示所选文件的文字内容。

图8 电子相册模块流程

利用Qt类库中的QColorDialog颜色选择对话框实现字体与背景颜色改变的功能,QColorDialo提供给用户颜色选择界面,并把用户选择的颜色返回给QTextEdit,QTextEdit最终利用Qt类库中QPalette调色板类设置文字颜色和背景颜色,达到颜色的改变效果。

2.6 电子相册

电子相册功能的实现主要是利用Qt类库中的QPixmap类,QPixmap为2D图形界面类,使用QPixmap显示图片可以方便的调整显示大小,并利用QPainter中的drawPixmap方法绘制到电子相册界面上,进行图片显示,实现图片显示功能。同时对图片显示位置添加鼠标事件响应QMouseEvent,当鼠标在图片矩阵内点击时,对此鼠标事件进行响应,进入图片浏览模式。图片浏览模式是利用QPushButton按钮类,响应按钮按下事件,按照字母顺序读取图片目录下的下一个图片文件,并加载到电子相册窗口中进行显示,实现图片的切换和浏览功能。读取图片目录中文件信息时同样使用了QDir类。电子相册运行流程如图8所示。

3 结束语

本系统在设计方面,人性化设计是本系统的特色:

1)操作界面设定为触摸屏,操作界面直观;

2)按钮大小与手指尖接近,操作方便。

在功能方面最大的特色在于以下两相功能:

1)倒车视频模块

道路上的汽车越来越多也越来越大,目前对很多大型的车辆来说倒车是一件很麻烦的是,像拖车、长途大巴等等那些特别长的汽车驾驶员根本看不见后面倒车时很容易出现事故。倒车视频主要是解决这样的问题,为司机朋友,倒车提供了方便。

2)定时提醒模块

定时提醒功能,是针对开车疲劳易引发交通事故这一现象设计的,对那些夜间驾车的驾驶员来说由于过度疲劳可能会注意力不集中,我们的定时提醒功能可以定时的放出一段声音用来提醒驾驶员朋友们。

[1]蔡志明,等.精通Qt4编程[M].电子工业出版社,2008.

[2]华清远见嵌入式培训中心.嵌入式Linux应用程序开发[M].人民邮电出版社,2010.

[3]任宏.车载视频播放系统的设计[D].中国优秀硕士学位论文全文数据库.

[4]李昔华,丁明勇,李德文.基于嵌入式平台的车载数码系统[J].重庆工商大学学报(自然科学版),2006,(02).

[5]刘步中,张曦煌,王庆磊,等.基于嵌入式Linux的视频监控系统的设计[J].计算机工程与设计,2009,(08).

猜你喜欢
类库播放器调用
用Java编写客户机/服务器端应用程序
Walkman诞生40周年 索尼适时发布NW-ZX500和NW-A100系列播放器
核电项目物项调用管理的应用研究
基于STM32的MP3播放器设计
电子制作(2019年9期)2019-05-30 09:41:44
Moon ACE播放器/放大器一体机
Python在数据可视化中的应用
LabWindows/CVI下基于ActiveX技术的Excel调用
测控技术(2018年5期)2018-12-09 09:04:46
数据结构课程教学改革方案和应用效果
软件工程(2017年12期)2018-01-29 17:35:55
数据结构可视化类库的设计与实现
基于系统调用的恶意软件检测技术研究