音频解码相关总结

最近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位表。


总的来说, 音频解码来说,技术上其实没啥核心, 现在大家比拼的更多是数据源上。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值