1

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

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

4

1 回答 1

3

通常,查看扩展有任何效果的唯一方法是使用 systrace 来监视诸如 Grafika 的“预定交换”活动(为此目的而创建)之类的输出。至少在 AOSP 源中,没有理由让流卡住;我不知道 OEM 可能添加了哪些代码。

渲染时的逻辑应该是:

  • 如果一帧所需的显示时间已经过去,并且当前显示槽没有其他帧准备好,则显示它;
  • 如果所需的演示时间已经过去,并且有另一帧准备好用于下一个显示槽,则将其丢弃;
  • 如果所需的演示时间是在不久的将来,请暂时搁置;
  • 如果所需的演示时间超过一秒后,请立即显示。

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

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

于 2016-11-28T17:38:35.127 回答