“ SurfaceTexture”中“ nativeGetTimestamp”的实际时间

时间:2018-09-26 06:25:41

标签: android surface

我正在编写一个视频处理应用程序,需要知道每帧的实际时间。

当我使用elapsedRealtime计算时间偏移时,该应用程序起初运行良好:

long timeOffset = java.lang.System.currentTimeMillis() - android.os.SystemClock.elapsedRealtime();
long actualTime = timestamp + timeOffset;

但是当我使用其他设备时,我发现某个设备将对SurfaceTexture.timestamp使用uptimeMillis,因此代码应为:

long timeOffset = java.lang.System.currentTimeMillis() - android.os.SystemClock.uptimeMillis();
long actualTime = timestamp + timeOffset;

所以我的问题是,是否有任何方法可以知道该设备用于SurfaceTexture的时间来源

尽管我可以在应用程序启动时计算出最接近的时间源,但我认为这可能会导致另一起我不知道的事故。

有什么办法知道吗?

1 个答案:

答案 0 :(得分:1)

MediaCodec没有发明时间戳。在您将presentationTimeUs参数传递给presentationTimeUs或使用queueInputBuffer输入时,MediaCodec返回的缓冲区仅包含与Surface相同的值,这些缓冲区在输入表面上设置使用eglPresentationTimeANDROID

因此,您需要检查实际上产生时间戳的那段代码,以了解它们使用什么时间参考。