GPUImage是基于GUP图像和视频处理的iOS开源框架,它采用链式传递每一层渲染的帧缓存对象,通过addTarget:方法为链条添加每层的filter,直到最后通过GPUImageView来显示。
这里通过研究GPUImage是如何将摄像头抓取的图像经过一层一层滤镜渲染最后展示给用户,来学习GPUImage的整体框架设计原理。
首先介绍GPUImage的几个主要的类
GLProgram //加载顶点着色器和片元着色器程序并进行编译链接最终使用,着色器中attribute添加等
GPUImageOutput //抽象类,实现addTarget:以及从当前帧缓存获取图像等接口
GPUImageFilter //继承自GPUImageOutput,所有滤镜的父类(除去Group滤镜),主要提供给着色器传递参数的接口,以及渲染当前的帧缓存并传递给下一层target,链式结构的实现主要就是在newFrameReadyAtTime: atIndex:方法中,下面会详细讲述
GPUImageFramebuffer //OpenGL的FBO就是通过它实现的
GPUImageFramebufferCache //实现帧缓存的重用机制
GPUImageTwoInputFilter //所有多层纹理特效都是通过它来实现的,比如抖音的“幻觉”特效
GPUImageFilterGroup //组合滤镜
GPUImageVideoCamera //实现摄像头的实时视频和音频的采集
GPUImagePicture //可以作为混合滤镜的第N个纹理,比如抖音中那些萌萌的表情就可以通过它来实现
GPUImageView //对渲染好的图像进行显示
GPUImageMovieWriter //保存视频
下面开始跑一遍流程
1. 创建GPUImageVideoCamera对象并设置代理,然后通过startCameraCapture开启抓屏
2. 我们抓取到的每一帧视频和音频数据都会通过以下回调返回给我们

本文介绍了GPUImage在iOS设备上处理图像和视频的原理,重点解析了其核心类和处理流程。从创建GPUImageVideoCamera开始,捕获视频帧,经过滤镜处理,最终在GPUImageView上显示。GPUImage利用OpenGL进行图像渲染,并通过GPUImageFramebuffer实现帧缓冲,通过链式结构的GPUImageOutput和GPUImageFilter进行滤镜应用。整个过程涉及帧缓存的创建、纹理转换、滤镜效果应用及帧缓存更新,形成了一条完整的图像处理链路。

765

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



