mirror of
https://github.com/Silent1566/webhtv.git
synced 2026-10-18 07:09:16 +00:00
修复:MPV 播放先出声后出画面
上游合并45a72e2d97引入的「输出快门」在本仓库是纯等待: PlaybackActivity.syncShutter() 会在自动输出决策完成前把视频 SurfaceView 的 alpha 置 0,音频不受影响,于是声画分离。 但本地 SURFACE_AUTO_STABILITY_GUARD_ENABLED 硬编码为 true, 使 isAutoSurfaceDirectEnabled() 恒为 false、自动模式恒走 GPU, 永不存在需要遮挡的「直出探测帧」;零拷贝黑名单设备同理, resolveSurfaceDirect() 对其在所有模式下都拒绝直出。快门因此 只是白等一个结论早已注定的决策。模拟器实测 start-file 到 playback-restart 相隔 4.34s,其间音频在 37.834 就绪、画面要 等到 38.813;探测另有 attempts=20 跑满 5s 的空转。 三处改动: - shouldKeepVideoShutterClosed() 增加 isAutoSurfaceDirectEnabled() 判据,无法抵达直出时不再关快门;guard 放开后自动恢复遮挡。 - prepareMpvOutputForNewItem() 改用同一判据。syncShutter 里 keepClosed 是 nativeOutputPending || 谓词 的或关系,只改谓词 会被 pending 旁路。 - 探测耗尽时释放快门。新增 mpvAutoOutputProbeGaveUp 让谓词与 pending 两侧同时释放——只调 onPlayerOutputReady() 仅清 pending, 谓词仍为 true,快门实际不会打开(首轮评审发现)。刻意不置 mpvAutoOutputEvaluated,否则会永久停掉本片后续自动决策。 未修复的既有问题(不属本次回归,另行处理):硬解失败后 mpv 报 vid=no,而探测判据要求轨道就绪,导致 tracksEmpty=true 必然跑满 20 次。 验证:leanback / mobile 两变体编译通过;全量单元测试 3483(mobile) / 2725(leanback) 例中仅 MpvPreloadControllerTest 2 例失败,该失败在剥离本次改动的同一基线上同样存在,源自 08-19 上游d41abf83c5未同步断言,非本次引入。新增的 5 条源码断言逐条 注入回归实测有效(含 latch 与回调的顺序约束)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
233b46f833
commit
6a458ec11c
2 changed files with 123 additions and 4 deletions
Loading…
Add table
Add a link
Reference in a new issue