首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > 多媒体 >

做h264流媒体播放器,用ddraw做显示部分的一点有关问题

2012-02-20 
做h264流媒体播放器,用ddraw做显示部分的一点问题h264解码后放到DisplayBuf中,然后sendmessage把DisplayBu

做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;
}
}

[解决办法]
你是用的YUV420吗?应该是三个颜色分量的分配有问题,你再试试

热点排行