YUV422转RGB中的一个问题
bitma 2008-10-09 06:57:50 YUV422,是UYVY标准 [U0 Y0 V0 Y1] [U1 Y2 V1 Y3] [U2 Y4 V2 Y5]
现在进行YUV422->RGB的转换,有一部分看不明白
yuvBuf是存放输出格式为YUV422的视频的buffer。问题是,既然内存存放格式是UYVY,那为什么要进行一下这三步呢?
memcpy(Ybuf, yuvBuf, size);
memcpy(Ubuf, yuvBuf+size, size/2);
memcpy(Vbuf, yuvBuf+size*3/2, size/2);
看字面意思,貌似是Ybuf里面全是存的Y分量,Ubuf和Vbuf同样,这里就不明白了,YUV422到底是以什么形式进行存放的呢?
如果认识是[U0 Y0 V0 Y1] [U1 Y2 V1 Y3] [U2 Y4 V2 Y5]形式的存放,循环内的操作应该是UYVY->YUV这种排列顺序的转换,但是按照循环内操作并不能得到YUV这种分量的排列方式。请大家讲讲,谢谢!
附带程序:
memcpy(Ybuf, yuvBuf, size);
memcpy(Ubuf, yuvBuf+size, size/2);
memcpy(Vbuf, yuvBuf+size*3/2, size/2);
BYTE * pBuf = pRgbBuf;
byte y, u, v;
CSizeConvert m_SizeConver;
int yuvindex = 0;
for(int i=0; i<nHeight; i++)
{
for(int j=0; j<(nWidth>>1); j++)
{
// UYVY标准 [U0 Y0 V0 Y1] [U1 Y2 V1 Y3] [U2 Y4 V2 Y5]
yuv_u0 = *Vbuf;
Vbuf++;
yuv_y0 = *Ybuf;
Ybuf++;
yuvBuffer[yuvindex] = yuv_y0; yuvindex++;
yuvBuffer[yuvindex] = yuv_u0; yuvindex++;
yuvBuffer[yuvindex] = yuv_v0; yuvindex++;
yuv_v0 = *Ubuf;
Ubuf++;
yuv_y0 = *Ybuf;
Ybuf++;
yuvBuffer[yuvindex] = yuv_y0; yuvindex++;
yuvBuffer[yuvindex] = yuv_u0; yuvindex++;
yuvBuffer[yuvindex] = yuv_v0; yuvindex++;
}
}