-
inline int clip(int value, int min, int max) {
-
return (value > max ? max : value < min ? min : value);
-
}
-
-
/*
-
* YUV420 to RGB24
-
*/
-
static void YUV420toRGB24(char* yuvFrame, char* rgbFrame, int width, int height)
-
{
-
int uIndex = width * height;
-
int vIndex = uIndex + ((width * height) >> 2);
-
int i, j;
-
int R,G,B,Y,U,V;
-
-
for (j = 0; j < height; j++)
-
{
-
for (i = 0; i < width; i++)
-
{
-
Y = yuvFrame[j * width + i];
-
U = yuvFrame[vIndex + (j / 2) * (width / 2) + i / 2];
-
V = yuvFrame[uIndex + (j / 2) * (width / 2) + i / 2];
-
// R
-
R = (int)(Y + 1.402*(V - 128));
-
rgbFrame[(j * width + i)*3] = clip(R, 0, 255);
-
-
//G
-
G = (int)(Y - 0.34414*(U-128) - 0.71414*(V-128));
-
rgbFrame[(j * width + i)*3+1] = clip(G, 0, 255);
-
// B
-
B = (int)(Y + 1.772*(U-128));
-
rgbFrame[(j * width + i)*3+2] = clip(B, 0, 255);
-
-
}
-
}
-
}
UV420 planar数据, 以720×488大小图象YUV420 planar为例,
其存储格式是: 共大小为(720×480×3>>1)字节,
分为三个部分:Y,U和V
Y分量: (720×480)个字节
U(Cb)分量:(720×480>>2)个字节
V(Cr)分量:(720×480>>2)个字节
三个部分内部均是行优先存储,三个部分之间是Y,U,V 顺序存储。
即YUV数据的0--720×480字节是Y分量值,
720×480--720×480×5/4字节是U分量
720×480×5/4 --720×480×3/2字节是V分量。
阅读(1391) | 评论(0) | 转发(0) |