AudioReach 是高通 SoC DSP 的信號(hào)處理框架,它本身運(yùn)行于 DSP。AudioReach 是高通下一代音頻 SDK 的必要組成部分,并將被部署在后續(xù)的高通芯片中。在 Linux/Android 端,創(chuàng)建 ASoC 驅(qū)動(dòng)程序?qū)?AudioReach 框架進(jìn)行配置。AudioReach 及其 ASoC 驅(qū)動(dòng)程序中,利用 ASoC Topology 技術(shù)將音頻處理組件拓?fù)浣Y(jié)構(gòu)圖加載進(jìn) DSP 中,隨后拓?fù)浣Y(jié)構(gòu)圖由 AudioReach 內(nèi)的 APM(Audio Processing Manager,音頻處理管理器)服務(wù)管理,來 prepare/start/stop。
AudioReach 及其 ASoC 驅(qū)動(dòng)程序的簡化高層塊圖如下:
___________________________________________________________
| CPU (Application Processor) |
| +---------+ +---------+ +---------+ |
| | q6apm | | q6apm | | q6afe | |
| | dais | <------> | | <-----> | bedais | |
| +---------+ +---------+ +---------+ |
| ^ ^ |
| | | +---------+ |
| +---------+ v +---------->|topology | |
| | q6prm | +---------+ | | |
| | |<-------->| GPR | +---------+ |
| +---------+ +---------+ |
| ^ |
|____________________________|______________________________|
|
| RPMSG (IPC over GLINK)
____________________________|______________________________
| | |
| +-----------------------+ |
| | | |
| v v q6 (Audio DSP) |
|+-----+ +----------------------------------+ |
|| PRM | | APM (Audio Processing Manager) | |
|+-----+ | . Graph Management | |
| | . Command Handing | |
| | . Event Management | |
| | ... | |
| +----------------------------------+ |
| ^ |
|____________________________|______________________________|
|
| LPASS AIF
____________________________|______________________________
| | Audio I/O |
| v |
| +--------------------------------------------------+ |
| | Audio devices | |
| | CODEC | HDMI-TX | PCM | SLIMBUS | I2S |MI2S |...| |
| | | |
| +--------------------------------------------------+ |
|___________________________________________________________|
AudioReach 具有子圖、容器和模塊結(jié)構(gòu)。每個(gè)子圖可以有 N 個(gè)容器,每個(gè)容器可以有 N 個(gè)模塊,且它們之間的連接可以是線性的或非線性的。一個(gè)音頻功能可以被實(shí)現(xiàn)為一個(gè)或多個(gè)連接的子圖。模塊之間還存在控制/事件路徑,可以在構(gòu)建圖時(shí)將其連接起來,以實(shí)現(xiàn)模塊之間的各種控制機(jī)制。子圖、容器和模塊的這些概念在 ASoC 拓?fù)渲斜硎尽?/p>
這是一個(gè)簡單的 I2S 圖,在單個(gè)子圖 (1) 中包含一個(gè)寫入共享內(nèi)存和一個(gè)音量控制模塊,其中包含一個(gè)容器 (1) 和 5 個(gè)模塊。
____________________________________________________________
| Sub-Graph [1] |
| _______________________________________________________ |
| | Container [1] | |
| | [WR_SH] -> [PCM DEC] -> [PCM CONV] -> [VOL]-> [I2S-EP]| |
| |_______________________________________________________| |
|____________________________________________________________|
現(xiàn)在該圖被分成兩個(gè)子圖以實(shí)現(xiàn) dpcm,如下所示:
________________________________________________ _________________
| Sub-Graph [1] | | Sub-Graph [2] |
| ____________________________________________ | | _____________ |
| | Container [1] | | | |Container [2]| |
| | [WR_SH] -> [PCM DEC] -> [PCM CONV] -> [VOL]| | | | [I2S-EP] | |
| |____________________________________________| | | |_____________| |
|________________________________________________| |_________________|
_________________
| Sub-Graph [3] |
| _____________ |
| |Container [3]| |
| | [DMA-EP] | |
| |_____________| |
|_________________|
在最新的 Linux 內(nèi)核代碼 (v6.6.7) 中 AudioReach 的 Linux ASoC 驅(qū)動(dòng)代碼 sound/soc/qcom/qdsp6。AudioReach 的 Linux ASoC 驅(qū)動(dòng)仍然在不斷的發(fā)展完善中,如 2023 的 patch 添加了對(duì) compress-offload 接口的支持。
從實(shí)現(xiàn)上,AudioReach 的 Linux ASoC 驅(qū)動(dòng)是 AudioReach 能力的代理,或者適配器,它通過核間通信機(jī)制和 DSP 上運(yùn)行的 AudioReach 通信,對(duì)于 Linux 內(nèi)核,它實(shí)現(xiàn) ASoC 的 PCM 和 compress 接口,向用戶空間提供訪問音頻能力必不可少設(shè)備文件等接口。
除了運(yùn)行于 DSP 的 AudioReach 和它的 Linux ASoC 驅(qū)動(dòng)程序,拓?fù)渑渲檬钦麄€(gè)子系統(tǒng)運(yùn)行的另一個(gè)組成部分,Audioreach 的拓?fù)渑渲梦募梢詤⒖?Audioreach Topology。
參考文檔:
ASoC: qcom: Add AudioReach support
ASoC: qcom: Add AudioReach support
Forums - Audio development platform with AudioReach support
ASoC: qcom: audioreach: add compress offload support