目前hisixx Audio子系统的API按照功能分为4个部分:
AIO VQE Enc/Dec 内置codec
1 AIO
1.1 实现:
1)语音的输入输出单元,和其他家soc的I2S controller无本质区别
2)AI和AO完全独立,但是可共用时钟源
3)以静态库的形式提供(libmpi.a)
1.2 使用限制
当使用外接codec时,无法提供对外的mclk,需要使用外接codec晶振源
1.3 API
1.4 结论
使用这些API的时候,除了使用上的一些注意事项,如(属性的设置和外设保持一致/采样点个数的限制/API的使用顺序)
没有对硬件上的依赖。因此如果X2A的AIO设计和海思一致,可以完全porting
2 ENC/DEC
1 实现
1)所有的编解码功能都是基于独立的海思音频解码库,核心解码器工作在用户态,使用CPU软件解码。
2)编码类型有G711,G726,ADPCM_DVI4,ADPCM_ORG_DVI4,ADPCM_IMA
原始数据和压缩数据均可以.wav后缀的文件存储
关于wav,可以参考wav文件格式分析与详解 - nigaopeng - 博客园
3) 常用在语音通话中而不是流媒体中
2 使用限制
编解码部分的属性必须和AIO设备的属性一致,如采样率,帧长等
3 主要API
4 结论:
取决于海思的编解码库是否开源
3 内置codec
1 实现:
1)和外置codec一样,实现音频输出输入部分的AD/DA
2)提供软静音和软撤销静音功能(通过控制PCM数据的衰减而不是控制内部硬件的AGC)
3)软件上控制内部codec只需要一个IOCTL即可
2 使用限制:
1)不提供同步时钟,不支持pcm传输协议,因为AIO一侧需要配置成master并且为I2S传输协议
2)内部无晶振,需要AIO提供工作时钟(MCLK)
3)使用内部codec时候,AIO部分的AI和AO不能共用时钟(AI和AO完全独立分开)
3 API
对内部codec的控制只有一个API(ioctl函数)
4 结论:
如果X2A的硬件设计和海思一致,可完全porting
4 VQE
1 实现:
硬件功能:
AEC:回声消除
ANR:语音降噪
RNR:录音噪音消除
DRC:动态压缩控制
PEQ:参量均衡器
HDR:高动态范围
HPF:高通滤波
AGC:自动增益控制
EQ:均衡处理器
GAIN:音量调节
RES:重采样
1)支持裁剪
2)全部已动态库的形式提供
2 使用限制
无
3API
4 结论:
如果X2A的硬件增加了VQE,可以porting这些API
5 这些API和ALSA API的区别
1)ALSA框架不支持音效/编解码的设置,hisixx API 增加了对音效和编解码的控制
2)ALSA无论是对内置codec还是外置codec的支持,同时通过alsa的dai link方式把codec注册到声卡框架中,而hisixx 就是通过一个ioctl单独对codec控制。
3)在AIO部分,ALSA对用户的配置是通过一个API就可以实现,但是hisi是通过多个API
4)ALSA对硬件链路的管理是在kernel内部自动完成的,用户只需要在machine驱动中填充即可。
而hisi对硬件链路的管理权交给用户,如是否使能VQE,是否使用sys link