2011-03-11 32 views
1

iphone 3gs相机的本机色彩空间为YpCbCr 4:2:0。我打算在opengl中做很多亮度处理(虽然我也会做一些颜色)。有没有一种有效的方法来获取框架的opengl?如何将完整的YUV(YpCbCr)4:2:0帧传递给opengl

我已经成功使用GL_LUMINANCE进行glteximage2ding以获得亮度。只有颜色数据,我还没有成功通过另一个glteximage2d通行证。除了两次传球之外,还有更好的方法吗?如果不是,它甚至值得吗?

回答

4

我通过将每个通道放入自己的GL_LUMINANCE纹理并在片段着色器中执行颜色空间转换来实现此目的。

+1

假设使用三种不同的纹理,以便您可以直接上传返回的AVFoundation缓冲区,而不必在CPU上进行字节混洗? – Tommy 2011-03-11 20:56:52

+0

听起来像它会工作,但不知道由于额外的gltextimage2d调用是否值得它性能明智。 – akaru 2011-03-12 00:27:20

+0

@Tommy:实际上,我使用三种不同的纹理来允许通道中具有不同的空间分辨率,就像在色度子采样格式中一样(YpCbCr 4:2:0是这种格式)。德国维基百科有一个很好的图表,显示了不同的修改:http://de.wikipedia.org/wiki/Farbunterabtastung#Bezeichnungsschema除了着色器之外,还可以使用多次通过和混合modi的巧妙组合,但坦率地说:着色器在当前的硬件上更容易实现并且性能更好。 – datenwolf 2011-03-12 01:06:53

相关问题