bool WindowsHeadlessHostDx9::InitGraphics(std::string *error_message, GraphicsContext **graphicsContext) { *graphicsContext = nullptr; LoadD3DX9Dynamic(); hWnd = DxCreateWindow(); if (WINDOW_VISIBLE) { ShowWindow(hWnd, TRUE); SetFocus(hWnd); } DX9::DirectxInit(hWnd); LoadNativeAssets(); DX9::pD3Ddevice->BeginScene(); return true; }
static int vo_dx_init(void) { DDSURFACEDESC2 ddsd; dw = g_image_width = dlpctxp->pwidth; dh = g_image_height = dlpctxp->pheight; g_screen_width = GetSystemMetrics(SM_CXSCREEN); g_screen_height = GetSystemMetrics(SM_CYSCREEN); dx = (g_screen_width - dw) / 2; dy = (g_screen_height - dh) / 2; if (FALSE == DxCreateWindow()) { av_log(NULL, AV_LOG_ERROR, "DxCreateWindow step\n"); return -1; } if (FALSE == DxInitDirectDraw()) { av_log(NULL, AV_LOG_ERROR, "DxInitDirectDraw step\n"); return -1; } if (FALSE == DxCreatePrimarySurface()) { av_log(NULL, AV_LOG_ERROR, "DxCreatePrimarySurface step\n"); return -1; } if (FALSE == DxCreateOverlay()) { av_log(NULL, AV_LOG_ERROR, "DxCreateOverlay step\n"); if (FALSE == DxCreateOffbuffer()) { av_log(NULL, AV_LOG_ERROR, "DxCreateOffbuffer step\n"); return -1; } } if (FALSE == DxGetCaps()) { av_log(NULL, AV_LOG_ERROR, "DxGetCaps step\n"); return -1; } if (FALSE == DxManageOverlay()) { av_log(NULL, AV_LOG_ERROR, "DxManageOverlay step\n"); return -1; } memset(&ddsd, 0, sizeof(DDSURFACEDESC2)); ddsd.dwSize = sizeof(DDSURFACEDESC2); if (IDirectDrawSurface_Lock(g_lpddsBack, NULL, &ddsd, DDLOCK_NOSYSLOCK | DDLOCK_WAIT, NULL) != DD_OK) { av_log(NULL, AV_LOG_ERROR, "Lock Back Buffer step\n"); return -1; } g_dstride = ddsd.lPitch; g_image = ddsd.lpSurface; av_log(NULL, AV_LOG_ERROR, "vo dx init ok\n"); /* -------- create picture ----------------- */ my_pic = av_mallocz(sizeof(AVPicture)); if (-1 == avpicture_alloc(my_pic, g_image_format, g_image_width, g_image_height)) { av_log(NULL, AV_LOG_ERROR, "avpicture alloc error\n"); return -1; } g_inited = 1; return 0; }