各位好,现在在做一个实时视频画中画,使用ddraw来做显示,显示UYVY数据,采用的是offscreen,创建了两个离屏表面,一个用于主画面数据,一个用于子画面数据。然后先Blt主画面到前表面,再Blt从画面到前表面,
现在的问题是,当主从画面同时显示时,每隔一定的时间,在从画面显示的rect中,就有一个闪烁长条自rect的上方移动到下方,并且长条里的画面内容是主画面的图像。
具体代码如下://创建主表面
DDSURFACEDESC2 ddsdFront;
ZeroMemory(&ddsdFront, sizeof(ddsdFront));
ddsdFront.dwSize = sizeof(ddsdFront);
ddsdFront.dwFlags = DDSD_CAPS;
ddsdFront.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE|DDSCAPS_LIVEVIDEO;//|DDSCAPS_VIDEOMEMORY;if( FAILED(pDD->CreateSurface(&ddsdFront, &pddsFront, NULL)) )
   return FALSE;
//创建离屏表面
DDSURFACEDESC2 ddsd;
ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags        = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT |DDSD_PIXELFORMAT;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
ddsd.dwWidth        = m_dwWidth ;
ddsd.dwHeight       = m_dwHeight;
//直接显示YUV
ddsd.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
ddsd.ddpfPixelFormat.dwFlags = DDPF_FOURCC | DDPF_YUV;
ddsd.ddpfPixelFormat.dwFourCC = MAKEFOURCC('U', 'Y','V', 'Y');
ddsd.ddpfPixelFormat.dwYUVBitCount = 8;HRESULT hr = 0;
//创建主画面离屏表面
if( FAILED(hr = pDD->CreateSurface(&ddsd, &pddsBack, NULL)) )
{
  PRINT_ERR(hr);
  return FALSE;
}
//创建从画面离屏表面
if (FAILED(hr = pDD->CreateSurface(&ddsd, &pddsBackPIP, NULL)))
{
  PRINT_ERR(hr);
  return FALSE;
}//显示
DDSURFACEDESC2  ddsdRender;
ZeroMemory(&ddsdRender, sizeof(ddsdRender));
ddsdRender.dwSize     = sizeof(ddsdRender);
//拷贝主画面数据
pddsBack->Lock(NULL, &ddsdRender, DDLOCK_NOSYSLOCK|DDLOCK_WRITEONLY | DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT, NULL);
 CopyData(pddsBack);
pddsBack->Unloak(NULL);
//Blt主画面数据
pddsFront->Blt(&rcWnd, pddsBack, &rcPic, DDBLT_WAIT, NULL);//拷贝从画面数据
pddsBackPIP->Lock(NULL, &ddsdRender, DDLOCK_NOSYSLOCK|DDLOCK_WRITEONLY | DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT, NULL);
 CopyData(pddsBackPIP);
pddsBackPIP->Unloak(NULL);
//Blt主画面数据
RECT rcPIP;
//rcPIP = rcWnd/4;
pddsFront->Blt(&rcPIP, pddsBackPIP, &rcPic, DDBLT_WAIT, NULL);
麻烦各位给分析下问题可能出在哪里,或者有什么好的方法来实现画中画,(显示的数据是实时视频流)谢谢!