我正在调试一个eglPresentationTimeANDROID()
用于改进lipsynk 的C++ 视频渲染器。此egl 扩展并非在我测试的所有设备上都可用,但对于某些设备(例如 adreno),必须手动禁用它 - 否则流会卡住。我知道有些设备实际上忽略了 PTS(参见 Android Native Window timestamp)。
我最近遇到了更多启用此功能时失败的设备(非常奇特),我考虑完全禁用它。但是为了做出这个决定,我想在决定摆脱它之前衡量这个 PTS 的效果。
我正在调试一个eglPresentationTimeANDROID()
用于改进lipsynk 的C++ 视频渲染器。此egl 扩展并非在我测试的所有设备上都可用,但对于某些设备(例如 adreno),必须手动禁用它 - 否则流会卡住。我知道有些设备实际上忽略了 PTS(参见 Android Native Window timestamp)。
我最近遇到了更多启用此功能时失败的设备(非常奇特),我考虑完全禁用它。但是为了做出这个决定,我想在决定摆脱它之前衡量这个 PTS 的效果。
通常,查看扩展有任何效果的唯一方法是使用 systrace 来监视诸如 Grafika 的“预定交换”活动(为此目的而创建)之类的输出。至少在 AOSP 源中,没有理由让流卡住;我不知道 OEM 可能添加了哪些代码。
渲染时的逻辑应该是:
格式错误的 PTS 值最多应暂停显示一秒钟。时间戳使用单调时钟,因此不受时钟更新的影响。
只要您可以完美地调整视频帧的提交速度,就不必使用该功能。扩展的目的是让应用程序更容易管理同步。目标是在系统视频播放器中使用它来改善同步,但我不知道这是否真的发生了。(我没有看到它在 AOSP 来源中使用。)