首页 > 代码库 > 音频解码相关总结
音频解码相关总结
最近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位表。
总的来说, 音频解码来说,技术上其实没啥核心, 现在大家比拼的更多是数据源上。
音频解码相关总结
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。