基于IPP的嵌入式音频解码器设计与优化
[10-10 20:38:44] 来源:http://www.88dzw.com 电子制作 阅读:8346次
文章摘要:4 MP3音频播放器图形界面GUI设计与实现本设计用QTE/QTopia作为应用程序图形界面GUI的类库和桌面开发环境。Qt/Embedded是Trolltech公司开发的面向嵌入式系统的Qt版本。采用framebuffer作为底层图形接口。Qt/Embedded类库完全采用C++封装。丰富的控件资源和较好的可移植性是Qt/Embedded最为优秀的一方面,使用X下的开发工具Qt Designer可以直接开发基于Qt/Embedded的UI(用户操作接口)界面。 鉴于篇幅,本文只给出图形界面的类定义和函数接口说明,其中封装和移植IPP低层API操作的成员函数将在文章第5部分作出相应的解释和
基于IPP的嵌入式音频解码器设计与优化,标签:电子小制作,http://www.88dzw.com4 MP3音频播放器图形界面GUI设计与实现
本设计用QTE/QTopia作为应用程序图形界面GUI的类库和桌面开发环境。Qt/Embedded是Trolltech公司开发的面向嵌入式系统的Qt版本。采用framebuffer作为底层图形接口。Qt/Embedded类库完全采用C++封装。丰富的控件资源和较好的可移植性是Qt/Embedded最为优秀的一方面,使用X下的开发工具Qt Designer可以直接开发基于Qt/Embedded的UI(用户操作接口)界面。
鉴于篇幅,本文只给出图形界面的类定义和函数接口说明,其中封装和移植IPP低层API操作的成员函数将在文章第5部分作出相应的解释和描述,播放器类在Qt中定义如下:
class MediaPlayer:public QWidget
{
public:/*构造函数初始化播放器各参数*/
MediaPlayer(QWidget *parent=0,const char *name=0);
public slots: /*Qt中的消息响应槽函数, 定义播放器的各种操作成员函数*/
void fileopen();
…
private:
/*播放状态控制、播放器界面控制和GUI插件*/
int stplayer; /* 0:stop 1:play 2:pause*/
QMenuBar *menu;
…
};播放器截图如下:
图(2)播放器界面截图
5 MP3音频解码流程与关键算法移植
5.1 IPP中提供的高效音频处理API介绍
本设计采用了IPP的MP3播放解码过程中的解码相关的高效算法,这样使得MP3播放的任务转向流程控制,而不必编写具体的解码代码。MP3解码函数和功能如下:
(1)ippsUnpackFrameHeader_MP3/*解包MP3帧头,输出IppMP3FrameHeader结构体*/
(2)ippsUnpackSideInfo_MP3/*解包MP3枝节信息,输出IppMP3SideInfo结构体*/
(3)ippsUnpackScaleFactors_MP3_1u8s/*解包比列因子,输出比列因子的指针等*/
(4)ippsHuffmanDecode_MP3_1u32s/*哈夫曼解码,输出解码后的数据*/
(5)ippsReQuantize_MP3_32s_I/*量化哈夫曼解码后的码字,输出量化后的采样值的指针*/
(6)ippsMDCTInv_MP3_32s,ippsSynthPQMF_MP3_32s16s/*第一、二阶段合成滤波*/
5.2 MP3音频解码流程
为了MP3文件能够连续的播放,需要为原始二进制在内存中建立一个FIFO缓冲区,以保证每个时刻都有足够的数据,这个缓冲区要有足够的大小,当缓冲区数据小于某个值时,就要及时写入新的数据,在程序的主循环中需要有段判FIFO数据情况和填入数据的程序。主数据也需要一个缓冲区,用来存放解码时用到的数据,播放MP3文件的大致流程如下:
图(3) MP3音频解码播放器程序流程图
除解码和播放MP3程序外,还需用户控制部分的程序。MP3播放要求实时性很高,所以不能跟用户控制程序放在一起,需要为它创建一个线程。通过Linux下的Pthread线程,它可以共享内存的数据,这使得线程间通信变得方便。MP3播放的代码就可以放到一个线程里面去,通过共享内存数据由主线程来处理用户操作、启动、暂停和结束播放线程序。引入了多线程操作后,使播放器用户界面的各操作(如按纽按下、鼠标点击等)不必等待MP3解码完成而不能得到及时响应。
5.3 MP3音频解码关键算法对IPP关键算法的API移植封装接口
鉴于篇幅关系,不对每一个API移植和具体操作都进行详细阐述,如上所述,IPP最底层的音频解码函数有ippsUnpackFrameHeader_MP3…ippsSynthPQMF_MP3_32s16s等,我们先对上述函数进行第一层移植,形成一批引用更为方便、操作更为简单的API,把这一层的移植操作全都完成在一个MyAudioApi.cpp文件里面,添加到用Qt做图形界面GUI的项目中一起编译。
《基于IPP的嵌入式音频解码器设计与优化》相关文章
- › 基于IPTV系统中的FPGA供电问题解
- › 基于IPP的嵌入式音频解码器设计与优化
- › 基于IP网络的数字音视频监控系统设计与实现
- 在百度中搜索相关文章:基于IPP的嵌入式音频解码器设计与优化
- 在谷歌中搜索相关文章:基于IPP的嵌入式音频解码器设计与优化
- 在soso中搜索相关文章:基于IPP的嵌入式音频解码器设计与优化
- 在搜狗中搜索相关文章:基于IPP的嵌入式音频解码器设计与优化