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