这篇写什么?
把 Soundbar 上 Dolby Atmos FlexConnect(Config W + FLAP) 从出厂到听声的整条路串起来:
打包 → 开机 → MS12 组参 → 播放 remap → 校准切 conf → Tuning / Echo → Dump 核对
一句话结论:
开机未校准,就用 vendor 默认 FlexR(Config W +
dap_init_mode=3+-o_flap_speaker);
校准成功后,App 写flext.*,经ms12_runtime切到 user 路径;
HAL 在 MS12 之后把 逻辑序 remap 成物理 ALSA 序,并在flap_mode=1时 旁路 TVSDX。
产品示例:SEIB30BARB;关键宏:ENABLE_FLEXCONNECT、ENABLE_AUDIO_3NOD、ENABLE_SOUNDBAR_DEVICES。
声道细节见 remap 篇;分流见 output routing。
文中「卫星 / Satellite」即 无线音箱。
1. 系统架构
三块一起干活:
| 块 | 职责 |
|---|---|
| 校准 App | 写 flext.sconf/.dconf,发 ms12_runtime(含 -flap_mode) |
| Audio HAL | 开机建 layout、接参数、播放路由、dump |
| MS12 | FLAP 渲染;吃 -o_flap_speaker、-sconf/-dconf |
特殊岔路:TV Tuning(标准序先转 Flex 逻辑再播)、Echo 回采(物理序转回逻辑给算法)。
2. 端到端时序
| 阶段 | 发生什么 |
|---|---|
| ① 打包 | Config W、默认 fdp_* conf、device_role_map 进镜像 |
② adev_open |
解析 JSON layout;探测 vendor flexr 是否存在 |
| ③ MS12 open | 条件满足则 dap_init_mode=3,组 -o_flap_speaker |
| ④ 播放 | 8ch CTA remap;flap_mode=1 时 bypass TVSDX,写 ALSA |
| ⑤ 校准 | App 落盘 flext.*,runtime 切 user 路径 |
三条总开关:
FLAP 开:flexr sconf 与 dconf 都在 + Config W → dap_init_mode=3
CTA remap:flexconnect_tvsdx_bypass 且 输入/ALSA 都是 8ch
conf 优先:有 flext(user)用校准;否则开机用 vendor fdp_*
3. 两套声道序(不要混)
FlexConnect 同时有两套 8ch 顺序:
| 名称 | 顺序 | 谁用 |
|---|---|---|
| 逻辑序 | FL, FC, FR, LS, RS, TpFR, TpFL, LFE | MS12 FLAP 输出、校准 solo、remap 源 |
| 物理序 | LFE, FC, FL, FR, LS, RS, TpFL, TpFR | ALSA / I2S / 功放接线 |
要点:
- HAL 不会用 CTA 表去「教」MS12 声道序;MS12 Flex 序来自
-flap_mode+-sconf/-dconf - HAL 只在 MS12 之后 把逻辑序 remap 成物理序
device_role_map.json主要给 Calibration 用,不参与 HAL 播放 remap
完整 remap 表与排查见 声道匹配篇。
4. 产品打包与路径
| 路径 | 含义 |
|---|---|
/vendor/etc/aml_audio_config.json |
Config W、8ch、物理 layout(由 flexconnect JSON 装入) |
/vendor/etc/fdp_off_num_ros_8_0.tsconf |
默认 stream(-sconf) |
/vendor/etc/fdp_on_num_ros_8_0.tdconf |
默认 device(-dconf) |
/vendor/etc/dolby/audio/device_descriptors/* |
校准设备描述 |
/data/vendor/dolby/flext.sconf / .dconf |
校准后 conf(App 写盘) |
编译产物核心是 vendor/lib/hw/audio.primary.amlogic.so。
5. 开机初始化
条件满足时打开 FLAP:
is_ms12_flexr_sconf && is_ms12_flexr_dconf && MS12_CONFIG_W
→ dap_init_mode = 3
→ 后续组参带 -o_flap_speaker / -flap_mode 1(由 init mode 决定)
开机未校准 dump 期望(示意):
| 字段 | 期望 |
|---|---|
| flexr_sconf / dconf | 1 / 1 |
| config_W ready | 1 |
| dap_init_mode | 3 |
| speaker_out_port | -o_flap_speaker |
| flap_mode / bypass | 可能仍为 0,直到 App / param_set |
也就是说:MS12 已按 FLAP 组参开机,和 HAL 侧 flexconnect_tvsdx_bypass 是否已置位 不是同一件事。
6. MS12 组参与 conf 优先级
开机未校准典型参数:
-o_flap_speaker
-flap_mode 1
-flap_max_render_outputs 8
-sconf /vendor/etc/fdp_off_num_ros_8_0.tsconf
-dconf /vendor/etc/fdp_on_num_ros_8_0.tdconf
若 user flext.* 存在 → 用校准路径
否则(且非纯 runtime 覆盖场景)→ 用 vendor fdp_*
ms12_runtime 带上 -sconf/-dconf 时,会把 user 路径记下来,供之后组参优先。
7. 正常播放与 remap
调用链(示意):
ms12_output(DAP_LPCM)
→ dap_pcm_output
→ soundbar_dap_pcm_route_sei
→ processing_multich_pcm
└─ bypass 且 8ch:CTA remap(逻辑 → 物理)
→ sei_audio_speaker_output
└─ bypass TVSDX 或走 TVSDX
→ ALSA 8ch I2S
条件示意:
if (flexconnect_tvsdx_bypass && nchannels == 8 && alsa_ch == 8) {
// 更新 remap 表并搬样本
channel_remap_process(...);
}
不足 8ch 的临时 dconf 如何先补齐再走同一套 CTA,见 Level Matching / under-8ch 篇。
本机与无线时间对齐见 Speaker Sync 补偿篇。
8. 校准更新流程
| 步骤 | 动作 |
|---|---|
| 1 | App 写 flext.sconf / flext.dconf(及 prefs) |
| 2 | ms12_runtime=-flap_mode 1 -sconf … -dconf … |
| 3 | HAL 解析后置 flexconnect_tvsdx_bypass |
| 4 | MS12 侧保存 user 路径 |
| 5 | 之后组参优先 flext,而不是 vendor fdp_* |
App Bridge / setDevices / modelName 与 JSON 的分工,见 六层校准链路。
9. TV Tuning 与 Echo 回采
9.1 TV Tuning(下行)
- 属性侧常见:
vendor.media.audio.ms12.tv_tuning=1 - 入口与正常播放不同:先拿到 标准 5.1.2,再 remap 成 Flex 逻辑序
- 之后并入同一条
soundbar_dap_pcm_route_sei链 - 常会静音另一路,避免双写杂音(细节见 分流篇)
9.2 Echo 回采(上行)
- 从硬件读到的参考是 物理 I2S 序
- 在 bypass + Echo + 8ch 条件下,remap 回 Flex 逻辑序,供 AEC / 校准算法对齐播放语义
记住方向:
播放:逻辑 → 物理
回采:物理 → 逻辑
Tuning:标准 → Flex 逻辑 →(再)物理
10. flap_mode / TVSDX
-flap_mode 1 → HAL bypass=1 → 开 CTA remap,旁路 TVSDX
-flap_mode 0 → bypass=0 → 不做 Flex CTA,可走 TVSDX
有效 bypass 还可能被属性覆盖(属性 OR HAL 标志)。
注意:param_set -flap_mode 只改 HAL 标志,不会改 dap_init_mode / -o_flap_speaker 端口本身。
11. 端到端对照
| 阶段 | MS12 | HAL 声道 | 配置文件 |
|---|---|---|---|
| 开机 | dap_init_mode=3 / -o_flap |
layout 就绪,CTA 未必开 | vendor fdp_* |
播放 flap=1 |
Flex 逻辑 8ch | CTA→物理 + bypass | vendor 或 flext |
| 校准后 | user flext 路径 | 同上 + echo 物理→逻辑 | /data/.../flext.* |
| Tuning | 标准 5.1.2 ringbuf | 先转 Flex,再同播放链 | 同 FLAP |
flap=0 |
端口仍可能是 flap | 不做 Flex CTA,可走 TVSDX | 不变 |
12. Dump / 推送 / 常见误区
Dump:
adb shell dumpsys media.audio_flinger --hal | sed -n '/FlexConnect \/ FLAP/,+8p'
推送 audio 库(示意):
m audio.primary.amlogic
adb push .../audio.primary.amlogic.so /vendor/lib/hw/
adb shell stop audioserver; adb shell start audioserver
误区:
| 误区 | 正解 |
|---|---|
| 用普通左右听感验序 | 用单通道 solo / Calibration solo / PCM dump |
看到 -flap_mode 1 启动参数就以为 HAL bypass 已置位 |
两者可能不同步,要看 dump / 运行时标志 |
param_set -flap_mode 能改 dap_init / flap 端口 |
只改 HAL bypass 一类标志 |
| 清校准只清 App data | 还要清 flext.* 文件 |
device_role_map 决定播放 remap |
它主要服务校准,播放看 CTA / layout |
| Tuning 和正常播放完全同一入口 | Tuning 先标准→Flex,再汇入同一 SEI 链 |
13. 和系列其它文章
| 文章 | 侧重 |
|---|---|
| 体验话术 | 对外卖点 |
| 方案概述 | 模块与部署概念 |
| 六层校准链路 | App Bridge / JSON / setDevices |
| MS12 分流 | DAP / SEI / Master / tv_tuning |
| 声道 remap | 逻辑序 ↔ 物理槽 |
| Speaker Sync 补偿 | 本机与无线时间对齐 |
| 不足 8ch / Level Matching | 7ch dconf 补齐 |
| 本篇 | 打包→开机→播放→校准→Tuning/Echo 总览 |
基于 SEIB30BARB / Config W + FLAP / audio.primary.amlogic FlexConnect 全流程实践整理。
评论
还没有评论,来做第一个吧
有想法?直接在这说,不用跑留言板