这篇写什么?
一类「音量键没动,声音自己大了一点」的投诉:
- HDMI1 接 dongle 播视频,听感正常
- 切到 HDMI2(无信号)
- 再切回 HDMI1,同一片源 → 声音 明显更大一点
查 dump 会发现:不是音量 index 变了,而是 DRC 从 LINE 变成了 RF——按平台链路,这往往就是大约 8 dB 量级的差异。
一句话:
HDMI1 播放(LINE)
→ 切 HDMI2 无信号:MS12 状态没清干净
→ 切回 HDMI1:误进 RF
→ 听感变大 ≈ 8 dB
→ 修:无信号时正确关 MS12,PCM/Patch 路径重配 DRC

电平为什么差 8 dB,详见 MS12 DRC:RF / LINE 模式详解。
一、现象与复现
| 步骤 | 操作 | 观察 |
|---|---|---|
| 1 | 开机后进 HDMI1,dongle 播视频 | dump:DRC = LINE,听感正常 |
| 2 | 切到 HDMI2(无设备 / No Signal) | — |
| 3 | 再切回 HDMI1,同一片源 | dump:DRC = RF,声音变大 |
容易误判的点:
| 检查项 | 本次结论 |
|---|---|
cat /sys/class/audiodsp/ac3_drc_control |
前后都是 3,看不出 LINE/RF 变化 |
| mixer 相关 log | mixer_main_buffer_write 字节、format 等可一致 |
| 系统音量键 | 没动 |
所以要盯 MS12 / HAL 侧 DRC 模式 dump,不能只看 ac3_drc_control 或 mixer 吞吐日志。
二、为什么变大?LINE → RF
结合 DRC 模式详解:
| 模式 | 粗线条听感 |
|---|---|
| LINE | 平台少做 ±8 dB 补偿,相对「线路」习惯 |
| RF | 常按电视 RF 习惯做头余量与补偿,同一片源听感可差约 8 dB |
本次复现路径是:
正确:保持 LINE
实际:无信号切换后,状态机把后续播放带到了 RF
用户感知就是「切一下口,声音大了一点」——音量条没变,是 DRC 策略变了。
三、根因:无信号时 MS12 没清干净
HDMI 切换过程中,走到 无信号(如 HDMI2 空口)时:
- MS12 相关状态(含 dummy / DRC 参数)未正确关闭与清理
- 切回有信号的 HDMI1 时,模块按 不完整 / 默认 路径重新起来
- DRC 落到 RF,而不是恢复切换前的 LINE
- 同时,对 本地 PCM / Patch PCM 等非杜比流,原逻辑没充分走到「给立体声 / DAP multi PCM 配 DRC」的分支,
ms12_main1_dolby_dummy等状态也容易设歪
一句话:不是片源变响了,是切换时 MS12/DRC 状态机丢了「上一次该是 LINE」这件事。
四、修复思路(三刀)
1)补齐 is_local_pcm / is_patch_pcm 判断
对「本地 PCM」或「经 patch 进来的 PCM」明确识别,并在这些情况下正确调用例如:
set_ms12_drc_params_for_stereo_and_dap_multi_pcm_output(...)
保证 非杜比 PCM 进 MS12 相关路径时,DRC 参数仍被按预期初始化,而不是靠残留状态碰运气。
2)reset_decoder 时真正关掉 MS12 main
在重置解码 / 重配输出流时,增加:
dolby_ms12_main_close(...)
让无信号、切口时 主模块被关掉并清状态,避免 HDMI2 空口留下的配置污染 HDMI1 下一次播放。
3)恢复时看清 dolby_stream_active / dummy 状态
切回有信号端口时,明确判断:
- 杜比流是否仍 active
ms12_main1_dolby_dummy处于什么状态
再决定如何恢复 DRC,避免「空口转一圈 → 默认 RF」。
五、验证与排查清单
复现固定三步:HDMI1 有片 → HDMI2 无信号 → 回 HDMI1 同片。
- 切换前 dump:DRC 是否为 LINE
- 切换后 dump:是否被带成 RF(听感是否大约大 8 dB)
- 勿只看
ac3_drc_control/ mixer 吞吐——本次它们可以不变 - 修后:无信号路径是否走到 MS12 main close
- 修后:PCM / Patch PCM 是否重新 set DRC params
- 多次来回切口,确认不再从 LINE「漂移」到 RF
六、小结
| 项目 | 内容 |
|---|---|
| 现象 | HDMI1→无信号→回 HDMI1,同片源变响 |
| 直接原因 | DRC LINE → RF(约 +8 dB 听感) |
| 根因 | 无信号时 MS12 未正确清理,切回后状态/默认路径错误 |
| 修复 | PCM/Patch 条件补齐 + dolby_ms12_main_close + 恢复时状态判断 |
口诀:切空口也要给 MS12 办离职;回来时把 DRC 身份证核验成 LINE,别默认发一张 RF。
相关阅读
评论
还没有评论,来做第一个吧
赞同、吐槽、提问都行,评论区开放