1

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

4

1 回答 1

1

虽然在 GitHub 项目页面或我的论坛上可能会更好地问这个问题,但我这样做有一个有趣的原因,我想我会澄清一下。

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

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

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

于 2012-06-23T15:39:03.547 回答