测量eglPresentationTimeANDROID()

时间:2016-11-26 12:25:56

标签: android-ndk opengl-es-2.0 egl pts

我正在调试一个C ++视频渲染器,它使用eglPresentationTimeANDROID()来改善lipsynk。这个egl extension并非在我测试的所有设备上都可用,但对于某些设备(例如adreno),必须手动禁用它 - 否则流会卡住。我知道有些设备实际上忽略了PTS(参见Android Native Window timestamp)。

我最近面临更多设备(非常奇特)在启用此功能时失败,我认为完全禁用它。但是为了做出这个决定,我想在我决定摆脱它之前测量这个PTS的效果。

1 个答案:

答案 0 :(得分:2)

通常情况下,查看扩展程序有效的唯一方法是使用systrace监视Grafika" scheduled swap"活动(为此目的而创建)。至少在AOSP来源中,没有理由让流卡住;我不知道OEM可能添加了哪些代码。

渲染时的逻辑应该是:

  • 如果帧的所需呈现时间是过去的,并且没有其他帧准备好用于当前显示槽,请显示它;
  • 如果所需的展示时间是过去的,并且还有另一帧准备好进入下一个展示位置,请将其删除;
  • 如果所需的展示时间是在不久的将来,请暂时保留;
  • 如果所需的展示时间超过未来一秒,请立即显示。

错误形成的PTS值应暂停显示最多一秒钟。时间戳使用单调时钟,因此不受时钟更新的影响。

只要您可以完美地调整视频帧的提交速度,就没有必要使用此功能。扩展的目的是让应用程序更容易管理同步。目标是在系统视频播放器中使用它来改善同步,但我不知道这是否真的发生了。 (我不会在AOSP来源中看到它。)