使用OpenGL着色器进行颜色空间转换(ARGB->YUV420)

使用OpenGL着色器进行颜色空间转换(ARGB->YUV420),opengl,graphics,opengl-es-2.0,shader,color-space,Opengl,Graphics,Opengl Es 2.0,Shader,Color Space,是否可以使用openGL Frament着色器将ARGB图像转换为YUV420平面或半平面图像 我正在寻找一个片段着色器代码或任何参考指南,这将帮助我实现这一点 我提到过。 但它的信息量不大 我需要YUV420图像将其传递到h264编码器。 任何工作或参考着色器代码?如您所知: R、G和B的加权值相加得到Y',这是一个 整体亮度或亮度。U和V按比例计算 Y'与B和R值之间的差异 因此,可以在着色器中创建恒定的3x3矩阵,例如: 如果使用标准,该矩阵将有效。因此,对原始纹理进行采样,将其乘以该矩阵

是否可以使用openGL Frament着色器将ARGB图像转换为YUV420平面或半平面图像

我正在寻找一个片段着色器代码或任何参考指南,这将帮助我实现这一点

我提到过。 但它的信息量不大

我需要YUV420图像将其传递到h264编码器。 任何工作或参考着色器代码?

如您所知:

R、G和B的加权值相加得到Y',这是一个 整体亮度或亮度。U和V按比例计算 Y'与B和R值之间的差异

因此,可以在着色器中创建恒定的3x3矩阵,例如:

如果使用标准,该矩阵将有效。因此,对原始纹理进行采样,将其乘以该矩阵,然后在FBO中烘焙结果。这是一个非常简单的过程


希望这是足够的信息。如果您需要更多帮助,请随时发表意见。

除了Dimo Markov已经解释了如何进行颜色空间变换外,在执行色度子采样的情况下,您还必须降低颜色平面的分辨率


要实现这一点,您需要使用三个过程,Y、U和V各一个。而不是矩阵向量乘法,而是简单的内积=点积。子采样本身是通过渲染到较小的渲染缓冲区并依赖于源纹理mipmap过滤来实现的。

请发布您的代码,并描述哪些不按预期工作。感谢您提供的信息,我将遵循此方法并让您知道。我是GLSL的新手,因此正在寻找一些参考代码:我现在能给你介绍的都是。我不知道您是否已经创建并编译了第一个着色器,或者您是否正计划开始,请查看这些教程。您需要的所有信息都在这里: