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

directdraw显示视频颜色不正,该如何处理

2012-02-19 
directdraw显示视频颜色不正h264流媒体播放器,用ddraw做显示部分,小弟分不多,但求知心强,请大家帮忙。h264

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; 

热点排行