【发布时间】:2016-09-15 19:45:30
【问题描述】:
是否可以在 openles 2.0 中强制延迟渲染相机?例如延迟是 5 帧?现在我正在使用表面纹理和 opengles-2.0 渲染输出。
【问题讨论】:
标签: android android-camera opengl-es-2.0 render
是否可以在 openles 2.0 中强制延迟渲染相机?例如延迟是 5 帧?现在我正在使用表面纹理和 opengles-2.0 渲染输出。
【问题讨论】:
标签: android android-camera opengl-es-2.0 render
如果您每秒接收 30 帧,并且想要引入 5 帧的恒定延迟,则需要对这 5 帧进行一些处理。
SurfaceTexture 不做(很多)缓冲。因为生产者和消费者端点在同一个进程中,所以很容易通过超越消费者而导致死锁。所以 SurfaceTexture 在“异步”模式下使用 BufferQueue,这意味着如果消费者还没有为下一个做好准备,它会丢弃帧。
因此,您需要一种方法来进行自己的缓冲,这意味着将数据从“外部”纹理中复制出来。一种方法是将纹理渲染到一系列 FBO,稍后您可以从中渲染。请务必注意此处的内存使用情况——一张 1920x1080 32 位 ARGB 图像占用大约 8MB,因此保持 5 左右会使您的内存占用增加 40MB。
可能会导致颜色保真度的损失,因为会涉及到 YUV 到 RGB 的转换,但如果您的最终目标是 RGB,那么这应该无关紧要。
所以这是可能的,但并不容易。你想完成什么?
【讨论】: