directdraw显示视频颜色不正
h264流媒体播放器,用ddraw做显示部分,小弟分不多,但求知心强,请大家帮忙。
h264解码后放到DisplayBuf中,然后sendmessage把DisplayBuf的发到窗口显示。但最后视频图像有点偏蓝,要是把U V交换就偏红,请大家帮忙看看是哪里出问题了?谢谢大家
for(i=0; i <c->height; i++)
{
memcpy(DisplayBuf+p,picture->data[0] + i * picture->linesize[0], c->width);
p+=c->width;
}
for(i=0; i <c->height/2; i++)
{
memcpy(DisplayBuf+p,picture->data[1] + i * picture->linesize[1], c->width/2);
p+=c->width/2;
}
for(i=0; i <c->height/2; i++)
{
memcpy(DisplayBuf+p,picture->data[2] + i * picture->linesize[2], c->width/2);
p+=c->width/2;
}
然后sendmessage把DisplayBuf的发到窗口显示。
LPBYTE lpSurf = (LPBYTE)ddsd.lpSurface;
LPBYTE lpY = DisplayBuf;
LPBYTE lpU = DisplayBuf+ m_src_width * m_src_height;
LPBYTE lpV = DisplayBuf+ m_src_width * m_src_width * 5 / 4;
if(lpSurf) {
int i;
// fill Y data
for(i = 0; i < m_src_height; i++)
{
memcpy(lpSurf, lpY, m_src_width);
lpY+= m_src_width;
lpSurf += ddsd.lPitch;
}
// fill V data
for(i = 0; i < m_src_height / 2; i++)
{
memcpy(lpSurf, lpU, m_src_width / 2);
lpU+= m_src_width/2;
lpSurf += ddsd.lPitch / 2;
}
// fill U data
for(i = 0; i < m_src_height / 2; i++)
{
memcpy(lpSurf, lpV, m_src_width / 2);
lpV+= m_src_width/2;
lpSurf += ddsd.lPitch/2;
}
}
[解决办法]
LPBYTE lpV = DisplayBuf+ m_src_width * m_src_width * 5 / 4; ??? or
LPBYTE lpV = DisplayBuf+ m_src_width * m_src_height * 5 / 4;