将ImageReader和SurfaceTexture与Android Camera2输出同步

时间:2018-12-14 09:41:53

标签: android android-ndk android-camera

ImageReader和SurfaceTexture在应用程序方面是异步的。 SurfaceTexture.OnFrameAvailableListenerImageReader.OnImageAvailableListener将在不同的时间到来。

现在,我将制作一个AR应用程序。我使用ImageReader中的图像计算对象运动并输出对象运动信息。另一方面。调用updateTexImage渲染背景。但是问题是,物体运动显然在背景渲染之后具有延迟。

工作流程如下:

Camera2-> ImageReader->计算对象运动->使用对象运动信息渲染虚拟对象

Camera2-> SufaceTexture->使用updateTexImage渲染背景

upateTexImage中调用Render.onDrawFrame和呈现虚拟对象

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

1 个答案:

答案 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())。对于相同的捕获,两个路径将具有相同的时间戳,因此您可以通过匹配它们来排队并同步最终图形。