布拉德,我在您的GPUImage框架中看到,您有一个屏幕外的帧以及在GPUImageMovieWriter.m文件中定义的渲染缓冲区,称为movieFrameBuffer和movieRenderBuffer。需要声明屏幕外的帧缓冲区。您不能使用GPUImageView.m中定义的缓冲区来捕获像素吗?是720P和1080P支持的原因吗?

最佳答案

尽管最好在GitHub项目页面上或在我的论坛上问这个问题,但我这样做有一个有趣的原因,我想我要澄清一下。

在测试AVAssetWriter时,我发现使用BGRA帧会大大提高编码性能。因此,当使用glReadPixels()抓取帧时,我需要对传入的已过滤帧应用颜色混乱的着色器,以便以BGRA颜色格式读取它们。这是使用屏幕外帧缓冲区渲染的。

在iOS 5.0上,我使用纹理缓存来避免使用glReadPixels()。因为内部纹理颜色格式在iOS设备上是BGRA,所以不需要颜色闪烁。但是,我仍然通过简单的直通着色器运行这些过滤的帧,并将它们输出到屏幕外的FBO,以防以不同的分辨率渲染到该点的滤镜链。这使您可以以一种分辨率录制影片,并以另一种分辨率显示或进行其他操作。

作为一种优化,在输入图像大小与输出电影编码大小匹配的情况下,我希望消除传递渲染步骤。这将需要对过滤器体系结构进行一些工作,因此可能暂时不会发生。

07-24 09:26