如何从 Android GLSurfaceView 获取 YUV?

How to get YUV from Android GLSurfaceView?

有没有什么方法可以用 GLSurfaceView 从 Android 相机获取 YUV 缓冲区? (不是来自 onPreviewFrame)

您可以使用 Android 相机 API 从 Android 相机获取 YUV 缓冲区。如果您只想要一个帧,则没有理由让 OpenGL ES 参与进来。使用 ImageReader 避免数据复制。

OpenGL ES 使用 RGB,而不是 YUV,因此 GLES 渲染的任何内容都已 color-space 转换。如果愿意,您可以在片段着色器中将转换回 YUV。

无论如何,SurfaceView 类 不打算作为处理管道中的中间体;它们是显示端点。你不能从他们那里得到任何东西。详情见arch doc