将 ImageReader 和 SurfaceTexture 与 Android Camera2 输出同步

Sync ImageReader and SurfaceTexture with Android Camera2 output

ImageReader 和 SurfaceTexture 与应用程序端异步。 SurfaceTexture.OnFrameAvailableListenerImageReader.OnImageAvailableListener 来的时间不同。

现在我要做一个AR App。我用 ImageReader 中的图像计算物体运动并输出物体运动信息。另一方面。调用 updateTexImage 渲染背景。但问题是对象运动在背景渲染之后有明显的延迟。

工作流程如下:

Camera2->ImageReader->calculate object motion -> Render a virtual object with object motion information

Camera2->SufaceTexture->用updateTexImage

渲染背景

upateTexImage 和渲染虚拟对象在 Render.onDrawFrame

中被调用

很明显,问题是如何将 ImageReader 和 SurfaceTexture 与 Android Camera2 输出同步

最简单的选择是不使用两个数据路径,而是在 SurfaceTexture 缓冲区上进行图像分析(在 EGL 中或从 GPU 回读到 CPU 进行分析),或者使用 ImageReader 缓冲区用来画一切。

如果这不可行,您需要查看时间戳 (https://developer.android.com/reference/android/graphics/SurfaceTexture.html#getTimestamp() and https://developer.android.com/reference/android/media/Image.html#getTimestamp())。对于同一个捕获,两条路径将具有相同的时间戳,因此您可以通过匹配它们来排队并同步您的最终绘图。