该原创文章首发于微信公众号:字节流动
OpenGL ES 相机预览

相机开发是 OpenGL ES 的重要应用,利用 OpenGL 可以很方便地实现相机美颜、滤镜、塑型以及一些动态特效,其性能显著优于对应功能的 CPU 实现。
相机的预览实现一般有 2 种方式,一种是基于 Android 原生 SurfaceTexture 的纯 GPU 实现方式,另一种是通过相机的预览回调接口获取帧的 YUV 数据,利用 CPU 算法处理完成之后,传入显存,再利用 GPU 实现 YUV 转 RGBA 进行渲染,即 CPU + GPU 的实现方式。
基于 Android 原生 SurfaceTexture 的纯 GPU 实现方式,相机可以使用 SurfaceTexture 作为预览载体,SurfaceTexture 可来自于 GLSurfaceView、TextureView 或 SurfaceView 这些独立拥有 Surface 的封装类,也可以自定义实现。
作为预览载体的 SurfaceTexture 绑定的纹理需要是 OES 纹理,即 GLES11Ext.GL_TEXTURE_EXTERNAL_OES 纹
本文介绍了使用OpenGL ES 3.0进行相机预览的两种方式,包括基于SurfaceTexture的纯GPU实现和CPU+GPU方式。详细讨论了如何创建OES纹理,并提供了使用Camera2和ImageReader获取YUV数据的方法,以及在JNI和C++层处理这些数据的步骤。后续将探讨如何在此基础上添加滤镜效果。
订阅专栏 解锁全文
3万+

被折叠的 条评论
为什么被折叠?



