是否可以使用openGL Frament Shaders将ARGB图像转换为YUV420(平面或半平面)图像?
我正在寻找片段着色器代码或任何参考指南,它将帮助我实现这一目标?
我提到了RGB to YUV using GLSL。 但它没有多少信息。
我需要YUV420图像将其传递给h264编码器。 任何工作或参考着色器代码?
答案 0 :(得分:0)
您可以阅读here:
将R,G和B的加权值相加以产生Y',其度量为 整体亮度或亮度。 U和V按比例计算 Y'与B和R值之间的差异。
因此,您可以在着色器中创建一个恒定的3x3矩阵,例如:
如果您使用this标准,该矩阵将有效。因此,对原始纹理进行采样,将其乘以该矩阵,然后将结果烘焙到FBO中。这是一个非常简单的过程。
希望这是足够的信息。如果您需要更多帮助,请随时发表评论。
答案 1 :(得分:0)
除了已经解释过如何进行色彩空间变换的Dimo Markov之外,如果要进行色度子采样,还必须降低色彩平面的分辨率。
要实现这一点,你需要使用三个通道,分别用于Y,U和V.而不是矩阵向量乘法,事情可归结为一个简单的内部(=点)乘积。子采样本身是通过渲染到较小的渲染缓冲区并依赖源纹理mipmap过滤来实现的。