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