KunSpace
返回博客

FlexConnect 全流程:从打包开机到播放、校准与 Tuning

2026年8月17日
2 次阅读

读完了?别空手走啊 😏

白嫖可以,但点个赞显得有教养

写评论

有想法?直接在这说,不用跑留言板

这篇写什么?

把 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_FLEXCONNECTENABLE_AUDIO_3NODENABLE_SOUNDBAR_DEVICES
声道细节见 remap 篇;分流见 output routing

文中「卫星 / Satellite」即 无线音箱


1. 系统架构

图1 FlexConnect 系统架构图1 FlexConnect 系统架构

三块一起干活:

职责
校准 App flext.sconf/.dconf,发 ms12_runtime(含 -flap_mode
Audio HAL 开机建 layout、接参数、播放路由、dump
MS12 FLAP 渲染;吃 -o_flap_speaker-sconf/-dconf

特殊岔路:TV Tuning(标准序先转 Flex 逻辑再播)、Echo 回采(物理序转回逻辑给算法)。


2. 端到端时序

图2 端到端时序总览图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 / 功放接线
图3 设备角色 / 逻辑声道 / ALSA 槽图3 设备角色 / 逻辑声道 / ALSA 槽

要点:

  • 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. 开机初始化

图4 开机初始化图4 开机初始化

条件满足时打开 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
图5 -sconf/-dconf 加载优先级图5 -sconf/-dconf 加载优先级
若 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. 校准更新流程

图6 校准成功后如何切换到 user conf图6 校准成功后如何切换到 user conf
步骤 动作
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 回采

图7 TV Tuning 与 Echo 回采图7 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

图8 flap_mode / TVSDX bypass 决策图8 flap_mode / TVSDX bypass 决策
-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 全流程实践整理。

评论

还没有评论,来做第一个吧

有想法?直接在这说,不用跑留言板