0

有谁知道以不需要混合的方式将 2vuy 非平面数据推送到 GPU 的有效方法?

我正在从 h264 视频文件中获取原始 2vuy 数据,并成功地将其加载到我映射到 OpenGL 对象的纹理中。我注意到我的代码在glgProcessPixelsWithProcessor. 我的glTexImage2D电话如下所示:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_YCBCR_422_APPLE,
    GL_UNSIGNED_SHORT_8_8_APPLE, data);

Apple 在其 OpenGL 指南中说GL_YCBCR_422_APPLE,提供“可接受的”性能 (p103),但是

注意:如果您的数据只需要进行混杂,glgProcessPixels则执行混杂的速度相当快,尽管不如数据不需要混杂那么快。但是非本地数据格式一次转换一个字节,并且会产生最好避免的性能成本。

我假设 CPU 上正在进行某种内部格式转换。我注意到另一个线程也在glgProcessPixels运行块方法。

我的路径是最有效的吗?如果不是,那是什么?

4

1 回答 1

4

您现在的代码取决于 Apple 的扩展。我不知道里面发生了什么。

但是我的建议是,您创建三个 2D 纹理,每个纹理只有一个通道,每个纹理接收一个颜色平面;使用独立纹理使支持色度二次采样(即 422)更简单。

然后在着色器中执行色彩空间转换。在写下数学时,我建议您通过接触颜色空间(如 XYZ)来执行此操作,因为这允许您将输出设备的颜色配置文件考虑在内;ICC 配置文件提供从 XYZ 颜色空间坐标到设备颜色空间 (RGB) 坐标的转换数据。

于 2012-11-22T09:47:43.877 回答