使用强制延迟在 openles 2.0 中渲染相机

render camera in openles 2.0 with forced delay

是否可以强制延迟在 openles 2.0 中渲染相机?例如延迟是 5 帧?现在我正在使用 surfacetexture 和 opengles-2.0 渲染输出。

如果您每秒接收 30 帧,并且想要引入 5 帧的恒定延迟,则需要对这 5 帧做一些处理。

SurfaceTexture 不做(很多)缓冲。因为生产者端点和消费者端点在同一个进程中,所以很容易因为超过消费者而导致死锁。所以 SurfaceTexture 在 "async" 模式下使用 BufferQueue,这意味着如果消费者还没有准备好接收下一帧,它就会丢帧。

因此您需要一种方法来进行自己的缓冲,这意味着将数据从 "external" 纹理中复制出来。一种方法是将纹理渲染到一系列 FBO,您可以稍后从中渲染。请务必注意此处的内存使用情况——一张 1920x1080 的 32 位 ARGB 图像占用大约 8MB,因此保持 5 左右会使内存占用增加 40MB。

可能会导致一些颜色保真度损失,因为将涉及 YUV 到 RGB 的转换,但如果您的最终目标是 RGB,那么这应该无关紧要。

所以这是可能的,但这并不容易。你想要完成什么?