ImageReader和SurfaceTexture在应用程序方面是异步的。 SurfaceTexture.OnFrameAvailableListener
和ImageReader.OnImageAvailableListener
将在不同的时间到来。
现在,我将制作一个AR应用程序。我使用ImageReader中的图像计算对象运动并输出对象运动信息。另一方面。调用updateTexImage
渲染背景。但是问题是,物体运动显然在背景渲染之后具有延迟。
工作流程如下:
Camera2-> ImageReader->计算对象运动->使用对象运动信息渲染虚拟对象
Camera2-> SufaceTexture->使用updateTexImage
渲染背景
在upateTexImage
中调用Render.onDrawFrame
和呈现虚拟对象
所以很明显,问题是如何将ImageReader和SurfaceTexture与Android Camera2输出进行同步
答案 0 :(得分:1)
最简单的选择是不使用两个数据路径,而是在SurfaceTexture缓冲区上进行图像分析(在EGL中或从GPU读取回CPU以进行分析),或使用ImageReader缓冲区进行绘制。 / p>
如果这不可行,则需要查看时间戳记(https://developer.android.com/reference/android/graphics/SurfaceTexture.html#getTimestamp()和https://developer.android.com/reference/android/media/Image.html#getTimestamp())。对于相同的捕获,两个路径将具有相同的时间戳,因此您可以通过匹配它们来排队并同步最终图形。