DirectDraw显示YUV[4:2:0,YV12] (1)

	LPDIRECTDRAW lpDirectDraw;
	DDSURFACEDESC ddsd;
	LPDIRECTDRAWSURFACE lpSurface, lpYuvSurface;
	LPDIRECTDRAWCLIPPER lpClipper;
	RECT WndRect;

	if (DirectDrawCreate(NULL, &lpDirectDraw, NULL) != DD_OK)
	{
		MessageBox(lpThis->m_FrameWindow, TEXT("初始化图形失败 0x01"), TEXT("Tip"), MB_ICONERROR);
		return -1;
	}
	if (lpDirectDraw->SetCooperativeLevel(lpThis->m_FrameWindow, DDSCL_NORMAL|DDSCL_NOWINDOWCHANGES) != DD_OK)
	{
		lpDirectDraw->Release();
		MessageBox(lpThis->m_FrameWindow, TEXT("初始化图形失败 0x02"), TEXT("Tip"), MB_ICONERROR);
		return -2;
	}
	ZeroMemory(&ddsd, sizeof(ddsd));
	ddsd.dwSize = sizeof(ddsd);
	ddsd.dwFlags = DDSD_CAPS;
	ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
	if (lpDirectDraw->CreateSurface(&ddsd, &lpSurface, NULL) != DD_OK)
	{
		lpDirectDraw->Release();
		MessageBox(lpThis->m_FrameWindow, TEXT("初始化图形失败 0x03"), TEXT("Tip"), MB_ICONERROR);
		return -3;
	}
	if (lpDirectDraw->CreateClipper(0, &lpClipper, NULL) != DD_OK)
	{
		lpSurface->Release();
		lpDirectDraw->Release();
		MessageBox(lpThis->m_FrameWindow, TEXT("初始化图形失败 0x04"), TEXT("Tip"), MB_ICONERROR);
		return -4;
	}
	if (lpClipper->SetHWnd(0, lpThis->m_FrameWindow) != DD_OK || lpSurface->SetClipper(lpClipper) != DD_OK)
	{
		lpClipper->Release();
		lpSurface->Release();
		lpDirectDraw->Release();
		MessageBox(lpThis->m_FrameWindow, TEXT("初始化图形失败 0x05"), TEXT("Tip"), MB_ICONERROR);
		return -5;
	}
	lpClipper->Release();
	ZeroMemory(&ddsd, sizeof(ddsd));
	ddsd.dwSize = sizeof(ddsd);
	ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
	ddsd.dwFlags = DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT;
	GetWindowRect(lpThis->m_FrameWindow, &WndRect);
	ddsd.dwWidth = WndRect.right - WndRect.left;
	ddsd.dwHeight = WndRect.bottom - WndRect.top;
	ddsd.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
	ddsd.ddpfPixelFormat.dwFlags  = DDPF_FOURCC|DDPF_YUV;
	ddsd.ddpfPixelFormat.dwFourCC = MAKEFOURCC('Y','V', '1', '2');
	ddsd.ddpfPixelFormat.dwYUVBitCount = 8;
	if (lpDirectDraw->CreateSurface(&ddsd, &lpYuvSurface, NULL) != DD_OK)
	{
		lpSurface->Release();
		lpDirectDraw->Release();
		MessageBox(lpThis->m_FrameWindow, TEXT("初始化图形失败 0x06"), TEXT("Tip"), MB_ICONERROR);
		return -6;
	}
	//ReSender Here
	lpYuvSurface->Release();
	lpSurface->Release();
	lpDirectDraw->Release();

你可能感兴趣的:(DirectDraw显示YUV[4:2:0,YV12] (1))