如何使用OpenGL片段着色器将RGB转换为YUV420

use*_*366 6 opengl

我知道如何编码使用片段着色器将平面数据(YUV420图像)转换为打包数据(RGB图像)的着色器,但如何将RGB编码为YUV420.我不需要YUV420图像进行渲染,而是将其传递给h264压缩代码.

dat*_*olf 7

来自http://www.fourcc.org/fccyvrgb.php:

RGB到YUV转换

Y =(0.257*R)+(0.504*G)+(0.098*B)+16

Cr = V =(0.439*R) - (0.368*G) - (0.071*B)+ 128

Cb = U = - (0.148*R) - (0.291*G)+(0.439*B)+ 128

在OpenGL着色器中,最后的常量偏移需要乘以1/256.另外,如果仔细观察,这是一个向量矩阵乘法.你可以表达这个

mat4 RGBtoYUV(0.257,  0.439, -0.148, 0.0,
              0.504, -0.368, -0.291, 0.0,
              0.098, -0.071,  0.439, 0.0,
              0.0625, 0.500,  0.500, 1.0 );

YUV = RGBtoYUV * RGB;
Run Code Online (Sandbox Code Playgroud)

其他一些公式在http://en.wikipedia.org/wiki/YUV上给出