Brad,我在你的GPUImage框架中看到你有一个名为movieFrameBuffer的屏幕外帧和渲染缓冲区,以及在GPUImageMovieWriter.m文件中定义的movieRenderBuffer。有什么需要声明屏幕外帧缓冲区。你不能使用GPUImageView.m中定义的缓冲区来抓取像素吗? 720P和1080P支持的原因是什么?
答案 0 :(得分:1)
虽然在GitHub项目页面或我的论坛上可能会有更好的问题,但有一个有趣的原因可以解释为什么我会这样做。
在测试AVAssetWriter时,我发现使用BGRA帧可以显着提高编码性能。因此,当使用glReadPixels()
抓取帧时,我需要将颜色混合着色器应用于传入的滤波帧,以便以BGRA颜色格式读取它们。这是使用该屏幕外帧缓冲区渲染的。
在iOS 5.0上,我使用纹理缓存来避免使用glReadPixels()
。由于iOS设备上的内部纹理颜色格式为BGRA,因此不需要调色。但是,我仍然通过一个简单的passthrough着色器运行这些过滤的帧,并将它们输出到屏幕外FBO,以防到达该点的过滤器链以不同的分辨率呈现。这使您可以以一种分辨率录制电影,并在另一种分辨率下显示或执行其他操作。
作为一项优化,我希望在输入图像大小与输出影片编码大小匹配时,消除直通渲染步骤。这需要在过滤器架构上做一些工作,因此可能暂时不会发生。