简单说概念

在这里插入图片描述
Front End PCMs:音频前端,一个前端对应着一个 PCM 设备
Back End DAIs:音频后端,一个后端对应着一个 DAI 接口,一个 FE PCM 能够连接到一个或多个 BE DAI
Audio Device:有 headset、speaker、earpiece、mic、bt、modem 等;不同的设备可能与不同的 DAI 接口连接,也可能与同一个 DAI 接口连接(如上图,Speaker 和 Earpiece 都连接到 DAI1)
Soc DSP:本文范围内实现路由功能:连接 FE PCMs 和 BE DAIs,例如连接 PCM0 与 DAI1:

在这里插入图片描述
高通 MSM8996 音频框图:
在这里插入图片描述
在这里插入图片描述
FE PCMs:

deep_buffer
low_latency
mutil_channel
compress_offload
audio_record
usb_audio
a2dp_audio
voice_call

BE DAIs:

SLIM_BUS
Aux_PCM
Primary_MI2S
Secondary_MI2S
Tertiary_MI2S
Quatermary_MI2S

从图中也可以看出:usecase 通俗表示音频场景,对应着音频前端

usecase :通俗的表示即音频场景,对应着一种音频前端;

low_latency:按键音,触摸音,游戏背景音等低时延
deep_buffer: 音乐、视频等对时延要求不高的音频场景;
compress_offload: 不软解过载到dsp硬件进行解码;mp3、flac、aac等格式的音源播放场景,这种音源不需要软件解码,直接把数据送到硬件解码器(aDSP),由硬件解码器(aDSP)进行解码
record:普通录音场景
record_low_latency:低延时的录音场景
voice_call:语音通话场景
voip_call:网络通话场景

音频通路连接
简单描述下高通 HAL 层音频通路的连接流程。如 音频框图概述 所示,音频通路分为三大块:FE PCMs、BE DAIs、Devices,这三块均需要打开并串联起来才能完成一个音频通路的设置。

FE_PCMs <=> BE_DAIs <=> Devices
codec与处理器之间通过I2C总线和数字音频接口DAI进行通信(digtal audio interface 包括I2S ,PCM, AC97),这句话不是针对高通平台的,但是也是适合的从图上看AP中的adsp的确是通过slimbus等总线和WCD9335codec进行数据传输的;

adcb :Audio Calibration Database 音频校准数据库,就是DSP的参数配置文件

adm :audio device management ,dsp 那边的音频数据管理器。 adm的两个作用一个是路由矩阵,一个是音频处理;
在实际路由之前通知adm以防止毛刺pop音;

a2dp : Advanced Audio Distribution Profile 蓝牙音频传输的高保真模式;

蓝牙一般有两种语音相关的模式是A2DP和SCO,前者是高质量音频播放(只进不出),后者是语音通话(有进有出)

每一个音频设备都是一个audio_hw_device 结构体的实现,那么对于audio_hw_device 的理解,能够可以更好的理解音频设备可以做什么,怎么做;

周期: 一次处理所需要的帧数;

usecase只是qcom内部定义的一个数据结构,位于hal层,用作处理处理内部声卡逻辑和输出方案。输出方案与声卡中的mixer_path_xxx.xml相联。而mixer_path等相关文件,才是具体的音频输出方案。

开发工具类:
repo是一款工具,可以让在Android环境中更轻松地使用git;

发布了24 篇原创文章 · 获赞 4 · 访问量 7682

猜你喜欢

转载自blog.csdn.net/zz_nj/article/details/96934115