Playback / Recording / Voice 三种场景的音频数据流框图:
硬件层
BP 侧 (SPF on Modem DSP)
AP ↔ BP 边界
AP 侧 (AudioReach)
Voice 专用 (VCPM)
SPF 容器 (gen_cntr)
APM 音频处理管理器
GPR 接收
ALSA / Kernel
AGM 层
PAL 层
① Playback PCM
pcm_write
pcm_read
② Recording PCM
控制: 图配置
App / TelSDK
pal_stream_open/write/read
StreamPCM
SessionAlsaPcm / SessionAlsaVoice
graph_open/start
graph_write → gsl_write(SHMEM)
pcm_write / pcm_read
虚拟 FE PCM
gpr-lite.c
gpr_send_pkt → rpmsg
audio-pkt.c
共享内存映射
snd-soc-dummy-dai
虚拟 DAI
GPR 共享内存 Ring Buffer
SHMEM_ENDPOINT
glink modem_apps
控制命令 + 数据通知
gpr_lx.c
apm_gpr_cmd_handler
CREATE/OPEN/START/STOP
apm_graph_db
rt_proxy
读/写共享内存
模块链
gain → MFC → MBDRC → IIR
AudioIF
LPAIF I2S 驱动
VCPM 语音容器
VOICE_FLUENCE_SMECNS
EC + NS
Modem Baseband
AMR/EVS 编解码
PRI/SEC/TERT MI2S_RX
播放
PRI/SEC/TERT MI2S_TX
录音
Codec (ES8311/AK7759)
DAC / ADC
Speaker / Handset
Mic
Network
三种场景对比
1┌─────────────────────────────────────────────────────────────────────────────┐ 2│ 音频数据流三种模式对比 │ 3├─────────────┬──────────────────────┬──────────────────────────────────────┤ 4│ 场景 │ 数据是否过 AP 内存 │ 数据通道 │ 5├─────────────┼──────────────────────┼──────────────────────────────────────┤ 6│ Playback │ ✅ 必过 │ App → pcm_write → GPR共享内存 │ 7│ (播放) │ │ → rt_proxy → SPF模块链 → I2S → Codec │ 8├─────────────┼──────────────────────┼──────────────────────────────────────┤ 9│ Recording │ ✅ 必过 │ Mic → Codec → I2S → SPF模块链 │ 10│ (录音) │ │ → rt_proxy → GPR共享内存 → pcm_read │ 11├─────────────┼──────────────────────┼──────────────────────────────────────┤ 12│ Voice Call │ ❌ 不过 │ Mic → Codec → I2S → LPASS/Modem │ 13│ (通话) │ (AP仅发配置命令) │ → 网络 (全在 Modem 域内闭环) │ 14└─────────────┴──────────────────────┴──────────────────────────────────────┘ 15
分层架构简图
1┌─────────────────────────────────────────────────────────────────┐ 2│ Application Layer TelSDK / 第三方 App │ 3├─────────────────────────────────────────────────────────────────┤ 4│ PAL (策略层) StreamPCM / SessionAlsaVoice │ 5│ resourcemanager.xml 设备路由 │ 6├─────────────────────────────────────────────────────────────────┤ 7│ AGM (图管理层) graph_open/write + ACDB GKV/CKV │ 8├─────────────────────────────────────────────────────────────────┤ 9│ ALSA / Kernel (AP) 虚拟 FE PCM + gpr-lite + audio-pkt │ 10├═════════════════════════════╪═══════════════════════════════════┤ ← AP/BP 边界 11│ GPR 共享内存 + glink SHMEM_ENDPOINT / modem_apps │ 12├═════════════════════════════╪═══════════════════════════════════┤ 13│ GPR (BP) gpr_lx.c 接收 │ 14├─────────────────────────────────────────────────────────────────┤ 15│ APM (图管理) apm_gpr_cmd_handler 生命周期管理 │ 16├─────────────────────────────────────────────────────────────────┤ 17│ SPF 容器 gen_cntr / VCPM + 模块链 │ 18│ rt_proxy / gain / MFC / AudioIF │ 19├─────────────────────────────────────────────────────────────────┤ 20│ AudioIF / LPAIF I2S BCLK/WS/DATA 硬件接口控制 │ 21├─────────────────────────────────────────────────────────────────┤ 22│ Codec (外接) ES8311 / AK7759 DAC/ADC │ 23├─────────────────────────────────────────────────────────────────┤ 24│ 物理设备 Speaker / Mic / Handset / Headset │ 25└─────────────────────────────────────────────────────────────────┘ 26
设备路由(MI2S 接口分配)
1 ┌──────────────┐ 2 │ LPASS I2S │ 3 └──────┬───────┘ 4 ┌───────────────┼───────────────┐ 5 ▼ ▼ ▼ 6 PRI_MI2S SEC_MI2S TERT_MI2S 7 (PRIMARY) (SECONDARY) (TERTIARY) 8 │ │ │ 9 ┌──────┴──────┐ ┌──────┴──────┐ ┌──────┴──────┐ 10 │ ES8311 │ │ NAU8810 │ │ ES8311 │ 11 │ Speaker │ │ Handset │ │ Headphone │ 12 │ Speaker Mic │ │ Handset Mic │ │ Headset Mic │ 13 └─────────────┘ └─────────────┘ └─────────────┘ 14 15 AUXPCM ─── Bluetooth SCO 通话 16
《[V2X]音频数据流图》 是转载文章,点击查看原文。