directdraw创建离屏表面失败
我用directdraw来显示yuv的视频图像,只运行一个应用程序的话都很ok,如果同样再打开同样的应用程序就会提示“创建离屏表面失败”,不明白这是为什么,难道离屏表面只能创建一个吗?
以下是我的directdraw的初始化代码
HRESULT hr;
LPDIRECTDRAWCLIPPER dcClipper =NULL;
if(lpDD != NULL)
{
if(lpDDSPrimary != NULL)
{
lpDDSPrimary->Release();
lpDDSPrimary = NULL;
}
if (lpDDSBack!=NULL)
{
lpDDSBack->Release();
lpDDSBack=NULL;
}
lpDD->Release();
lpDD = NULL;
}
if (DirectDrawCreate(NULL,&lpDD,NULL)!=DD_OK)
{
MessageBox(0,("创建ddraw失败"),(""),0);
}
if (lpDD->SetCooperativeLevel(hwnd,DDSCL_NORMAL)!=DD_OK)
{
MessageBox(0,("协作层设置失败"),(""),0);
}
//创建主表面
ZeroMemory(&ddsd,sizeof(ddsd));
ddsd.dwSize=sizeof(ddsd);
ddsd.dwFlags=DDSD_CAPS;
ddsd.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE;
ddsd.dwBackBufferCount=1;
if (lpDD->CreateSurface(&ddsd,&lpDDSPrimary,NULL)!=DD_OK)
{
lpDDSBack->Release();
MessageBox(0,("创建主表面失败"),(""),0);
return(0);
}
//创建离屏表面
ZeroMemory(&ddsd,sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd) ;
ddsd.ddsCaps.dwCaps =DDSCAPS_OVERLAY;
ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT ;
ddsd.dwWidth = play_width;
ddsd.dwHeight= play_height;
ddsd.ddpfPixelFormat.dwSize=sizeof(DDPIXELFORMAT);
ddsd.ddpfPixelFormat.dwFlags = DDPF_FOURCC | DDPF_YUV ;
ddsd.ddpfPixelFormat.dwFourCC = MAKEFOURCC('Y', 'V', '1', '2') ;
ddsd.ddpfPixelFormat.dwYUVBitCount = 8 ;
hr = lpDD->CreateSurface(&ddsd, &lpDDSBack, NULL) ;
if(hr != DD_OK)
{
MessageBox(0,("创建离屏表面失败"),(""),0);//如果打开第二个应用程序就会在这里出错
lpDDSBack->Release();
lpDD->Release() ;
return(0);
}
//创建裁剪区
hr=lpDD->CreateClipper(0,&dcClipper,NULL);
if (FAILED(hr))
{
lpDD->Release();
lpDDSBack->Release();
lpDDSBack->Release();
MessageBox(0,("创建裁剪区失败"),(""),0);
return(0);
}
dcClipper->SetHWnd(0,hwnd);
lpDDSPrimary->SetClipper(dcClipper);
[解决办法]
你可以去 http://robertbaker.download.csdn.net/ 看看,有个简单封了 DirectDraw 的 dll
[解决办法]
这个我没有试过,但是我在yuv overlay的时候,发现yuv overlay一直显示在最上层。