基于DSP硬解码的低成本高清屏媒系统
摘要:设计并实现了一种基于OMAP3730的低成本高清屏媒系统,能够充分发挥可编程C64+DSP的强大计算功能, 利用硬件实现常用视频格式的高清硬解码播放,利用软件兼顾不常有视频格式的解码播放,同时针对屏媒系统的特点利用DSP实现转屏,达到在横屏和竖屏上的自适应播放的效果。
随着移动互联技术的不断发展和应用,多媒体技术以其不可阻挡的趋势渗入到人们的工作和生活中,数字视频是多媒体技术里比较复杂的领域,如何在低成本、低功耗的环境中实现高质量的数字视频应用是各家公司竞争的焦点。低功耗的ARM对外设支持比较全面,但计算能力较差;基于哈佛结构的DSP计算能力强大,但对外设的支持很弱。OMAP3730是TI推出的一款ARM+DSP双核异构处理芯片,其中ARM核为1GHz COTEX-A8,DSP核为800MHz的可编程C64+DSP。
本文设计并实现了一种基于OMAP3730的低成本高清屏媒系统,能够充分发挥可编程C64+DSP的强大计算功能, 利用硬件实现常用视频格式的高清硬解码播放,利用软件兼顾不常有视频格式的解码播放。该系统还针对屏媒系统的特点利用DSP实现转屏,实现在横屏和竖屏上的自适应播放。整个系统流程如图1所示。
1 视频类型判断和解码
本文用GstDiscover来判断视频文件的类型,GstDiscover是GStreamer库提供的一个工具,接受输入URI或者URI列表,返回它们的信息。GstDiscover返回的信息一般较多,我们重点关注返回信息中的视频编码以及视频的分辨率,根据这些就能判断该视频是否可以硬件加速。GstDiscover的一个典型的输出如图2所示,给出了该文件的封装信息video/webm;音频信息:音频编码audio/x-vorbis,通道数2,比率48000;视频信息:视频编码video/x-vp8,宽度854,高度480,帧率25。
具体的实现可以利用QT中的QProcess通过命令行的形式调用GstDiscover,使用QProcess的readAllStandardOutput函数读取所有输出结果。在输出结果中用正则表达式查找关键字“audio:”和“video:”从而得到相关的视音频信息。
GStreamer是一个基于管道的多媒体框架,能够提供组件化的多媒体处理功能。框架中的所有的功能模块都被实现成可以插拔的组件,并且在需要的时候能够很方便地安装到任意一个管道上,由于所有插件都通过管道机制进行统一的数据交换,因此很容易利用已有的各种插件“组装”出一个功能完善的多媒体应用程序。这种松耦合的架构很容易实现编解码的模块化。TI的GStreamer插件使用DMAI来访问底层硬件,使得DSP的应用变得容易。GStreamer在运行时作为ARM处理器上的应用程序,并通过使用DMAI来对DSP和加速模块进行调用,以实现硬件编解码。GStreamer的应用实现了公共组建的最大可复用性,提高了系统框架的可移植性。
元素(elements)是GStreamer中最重要的概念,你可以把一组元素链接到一起组成一个链,然后让数据流依次通过这个链中的每个元素。每个元素具有某个特定的功能,比如有的元素能够从文件读数据,有的元素可以实现视频解码,有的元素负责把数据输往声卡等等。通过把元素串接在一起,可以实现管道。管道是用来实现特定任务的,比如媒体回放或者视频捕捉。GStreamer默认提供了大量的元素,这使得开发大量媒体应用成为可能。如果需要你也可以自己创建新的元素。接口(pads)是元素上数据输入和输出的地方,接口分两种,输入数据的接口(sink)和输出数据的接口(src)。通过连接接口可以把两个元素链接到一起,相连接的接口必须支持相同的数据格式。容器(bin)是一种特殊的元素,容器本来是一组连接在一起的元素的集合,但是对外容器表现的像一个元素一样。管道(pipeline)是一种高层容器,为应用层提供了总线机制,并实现元素响应的同步化。
一个简单的ogg播放器的管道如图3所示,每个小框代表一个元素。源元素从文件源读取数据发往ogg分解器。该分解器把复合数据流分解成视频数据流和音频数据流,然后分别发往视音频解码器。音频解码器接收到数据后进行解码后把数据发往音箱,视频解码器解码后数据发往显示,从而实现视音频的同步播放。
基于DSP硬解码就是把GStreamer管道中的耗费计算时间的元素替换成可以用DSP加速的元素。一个基于DSP硬解码的管道如图4所示,与上面的例子的不同在于,视频解码元素被替换成了TIViddec,音频解码元素被替换成TIAuddec,显示元素被替换成了TIDmaiVideoSink.
OMAP3730通过GStreamer的组件来提供基于硬件的视音频编解码功能,在数字视频、影像、语音和音频上可以支持H.264、MPEG4/2、H.263、VC1、JPEG、G.711/G.723、MP3、WMA等多种编解码器。所以对于OMA
OMAP3730 ARM DSP GstDiscover 硬解码 201505 相关文章:
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于ARM体系的嵌入式系统BSP的程序设计方案(04-11)
- 在Ubuntu上建立Arm Linux 开发环境(04-23)
- 达芬奇数字媒体片上系统的架构和Linux启动过程(06-02)
- SQLite嵌入式数据库系统的研究与实现(02-20)
- 革新2410D开发板试用手记(04-21)