1

我正在编写代码以将 MP4 文件中的帧转换为 OpenGLES 纹理,并使用 AVAssetReaderTrackOutput 类来访问像素缓冲区。输出的最佳像素缓冲区格式是什么?现在,我正在使用旧代码在 OpenGLES 着色器中将 YUV420P 转换为 RGB,因为我之前使用 libav 来提供它。现在我正在尝试使用 AVFoundation 并想知道我的 OpenGLES 着色器是否比将像素缓冲区格式设置为 RGBA 更快,或者我是否应该使用 YUV 格式并保留我的着色器。

谢谢

4

1 回答 1

2

我想这取决于您的数据的目的地是什么。如果您所追求的只是传递数据,那么原生 YUV 应该比 BGRA 更快。如果您需要将数据读回 RGBA 或 BGRA,我会坚持使用 BGRA 并使用 OpenGL 纹理缓存而不是 glReadPixels()。

我建议阅读有关 YUV 方法的这个 SO 问题的答案。引用:

“无论如何,视频帧都需要进入 GPU:如果您的视频具有 4:2:0 的采样色度,使用 YCbCr 可以为您节省 25% 的总线带宽。”

于 2012-10-16T15:52:53.277 回答