我正在编写代码将MP4文件中的帧转换为OpenGLES纹理,并使用AVAssetReaderTrackOutput类来访问像素缓冲区。输出的最佳像素缓冲区格式是什么?现在我正在使用我的旧代码将YUV420P转换为OpenGLES着色器中的RGB,因为我以前使用libav来提供它。现在我正在尝试使用AVFoundation并想知道我的OpenGLES着色器是否比将像素缓冲区格式设置为RGBA更快,或者我是否应该使用YUV格式并与我的着色器保持一致。
由于
答案 0 :(得分:2)
我想这取决于数据的目的地是什么。如果你所追求的只是通过数据,原生YUV应该比BGRA快。如果您需要将数据读回RGBA或BGRA,我会坚持使用BGRA并使用OpenGL纹理缓存而不是glReadPixels()。
我建议在YUV方法上阅读this SO question的答案。引用:
“视频帧在任何情况下都需要转到GPU:如果您的视频采用4:2:0采样色度,使用YCbCr可以节省25%的总线带宽。”