【发布时间】:2013-01-13 20:19:19
【问题描述】:
我正在使用 Android 上的 OpenGL ES 2.0 处理视频。图片数据被提取为 YUV420P,我需要以某种方式在我的 OpenGL 片段着色器中以 RGBA 处理它们。
如何将 YUV420P 数据转换为 RGBA? (鉴于它的视频,性能是关键)
更新:感谢 Brad Larsson 的回答,但看起来不正确。
UPDATE2:呃,我还在使用我的 RGBA 片段着色器。当然看起来不对。现在我有另一个问题。让我进一步挖掘。
UPDATE3:好的,这里有些不对劲。
我将它用于纹理。这是正确的吗?
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, width, height, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, luminanceBuffer);
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, width / 2, height / 2, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, chrominanceBuffer);
UPDATE4:使用GL_LUMINANCE_ALPHA 对隔行扫描问题进行了排序,但图片仍然损坏但是...我刚刚得知问题出在我的字节缓冲区中,因此将其标记为已回答。
【问题讨论】:
-
如果您使用
GL_LUMINANCE,红色和绿色通道都包含相同的值。如果您想遵循布拉德的回答,您应该以某种方式使GL_RG成为可能。我不完全确定GL_LUMINANCE_ALPHA做了什么,但它可能包含红色/绿色/蓝色(它们相同)和 alpha 的单独值。 -
尝试了几种不同的组合,但除非它是 GL_LUMINANCE,否则无法使其工作。在上面的屏幕截图中,看起来上半部分具有原始视频帧下半部分的亮度级别。
标签: android opengl-es opengl-es-2.0 yuv