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++;
}
}
...全文
464 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
leonan 2008-12-17
  • 打赏
  • 举报
回复
这个函数不是YUV-RGB转换,而是YUV-planar to YUV-packed的转换。
是两种YUV格式之间的转换,楼主可以查相关资料。
bitma 2008-10-09
  • 打赏
  • 举报
回复
size是图像的宽高的乘积

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧