我有一个自定义的 Camera2 OpenGL 管道来处理来自相机设备的帧。
我有两个目标
EGLSurface
,我只是使用直通着色器将 EXTERNAL_OES OpenGL 纹理发送到它们。
这非常高效,但我发现了来自 Android 的 ImageWriter
API,它似乎完全符合我使用 OpenGL 管道所做的事情 - 只是代码更少。
我想知道这与 OpenGL 管道相比如何?
ImageWriter
还有其他类型的额外功能或优化吗? ImageWriter
是否跳过 EXTERNAL_OES OpenGL 纹理中发生的 PRIVATE -> RGB 转换?
是否建议切换到
ImageWriter
而不是我的自定义 C++ OpenGL 管道?
OpenGL 管道将相机帧作为纹理加载到 GPU 中,让您可以对它们应用任何类型的渲染效果,然后让您将生成的帧输出到您想要它们去的任何地方。
ImageWriter 只是一个 Android 图形缓冲区队列。除了将缓冲区从生产者 A 移动到消费者 B 之外,它不执行任何操作。
那么 OpenGL 管道的目的是什么?如果您没有在着色器代码中应用任何编辑,那么它为什么存在?用于制作输入帧的多个副本,或将帧转换为 RGB?或者是其他东西? ImageWriter 更省电,因为它不需要启动 GPU 来完成工作,但它的灵活性和功能比 EGL 差得多。