标签:音频解码
最近1年一直在做音频播放器的相关工作。
关于音频播放器,主要是做以下2项工作:
1> demux,对文件进行解析,获取Packet数据
2> 对解码器进行性能优化(主要针对软解)
对于第一点, 常见的辅助工具是阅读FFMPEG相关代码。
个人一些工作效率上的体会:
第一步: 建议在PC上利用QT等GUI工具,做一个树形控件,显示所有的数据block,
点击该块, 上面显示2进制值,下面显示相应字段的Offset, 值, 相关解释。
第二步,移植到目标平台
这里关键点是注意 Big-Endian还是Little Endian
对于性能优化, 最近2周在做苹果的ALAC和AIFF格式支持,有以下体会
1> 充分利用Cache, 主要优化手段是将数据分块处理, 一般来说4K-32K是个合理边界。
音频解码方面主要有2个Buffer池子, 一个是未解码的Packet队列, 一个是解码后的Sample队列。
Packet队列输入来自USB,硬盘,局域网, 互联网, 各自的速度和缓存大小均不同,需要结合实际做统计分析。
Sample队列输入来自解码器, 输出则是DSP芯片。对这块数据的处理主要集中在Endian转化上。
如果CPU支持SIMD,建议用汇编来优化数据打包。
2> 对解码优化来说, 主要是利用CLZ指令来优化。
对于MIPS平台来说, 搜Linux内核代码可以找到汇编版本的实现。
如果硬件不支持,可以参考libFLAC的查表法。也就是将32位分割为4个8位,然后查256位表。
总的来说, 音频解码来说,技术上其实没啥核心, 现在大家比拼的更多是数据源上。
标签:音频解码
原文地址:http://blog.csdn.net/levinjoe/article/details/41524693