// This is it... HRESULT DDVideo::Play(ZString& strPath, bool bWindowed) { m_bWindowed = bWindowed; HRESULT hr; if( FAILED( hr = InitDirectDraw() ) ) { ZDebugOutput("InitDirectDraw() failed\n"); return hr; } m_pVideo=new CDShow(); if (m_pVideo==NULL) return FALSE; if(!( m_pVideo->Open(strPath,m_lpDD) )) { // remember to destroy DShow (pVideo) object to clean up after us. // Return FALSE to let caller know we failed. ZDebugOutput("m_pVideo->Open failed\n"); return FALSE; } else m_pVideo->Start(); return S_OK; }
unsigned long GS_PlayStream(unsigned long nPort,HWND hWnd) { //初始化渲染设备,开启线程 PSTREAMCONFIG pm = GetStream(nPort); if(pm==NULL) { return S_FALSE; } if(pm->pVideoConfig) { //初始化视频渲染设备 pm->pVideoConfig->m_hWnd = hWnd; if(InitDirectDraw(pm->pVideoConfig,1920,1080)==S_FALSE) { pm->nLastError = GENTEK_DDRAW_INIT_FAILED; if(InitGDIPlus(pm->pVideoConfig)==S_FALSE) { pm->nLastError = GENTEK_VIDEO_RENDER_FAILED; return S_FALSE; } else { pm->pVideoConfig->m_bUsingGDIPLUS = true; } } else { pm->pVideoConfig->m_bUsingGDIPLUS = false; } } if(pm->pAudioConfig) { //为初始化音频做准备 pm->pAudioConfig->m_hwnd = pm->pVideoConfig->m_hWnd; //初始化音频设备 if(InitDirectSound(pm->pAudioConfig)==S_FALSE) { pm->nLastError = GENTEK_AUDIO_RENDER_FAILED; return S_FALSE; } } //创建线程 pm->pContrlConfig->nPort = nPort; pm->pContrlConfig->bDataOver = false; pm->pContrlConfig->bCallStreamOver = false; if(PlayStream(pm->pContrlConfig,pm->pCodecConfig,pm->pVideoConfig,pm->pAudioConfig)==S_OK) { char str[128]; sprintf(str," Play GentekPlatformStream %d\n",nPort); OutputDebugStringA(str); return S_OK; } pm->nLastError = GENTEK_THREAD_CREAT_FAILED; return S_FALSE; }
M4Err DD_SetupHardware(VideoOutput *dr, void *os_handle, Bool no_proc_override, M4GLConfig *cfg) { RECT rc; DDCONTEXT dd->hWnd = (HWND) os_handle; DD_SetupWindow(dr); /*fatal error*/ if (!dd->hWnd) return M4IOErr; GetWindowRect(dd->hWnd, &rc); dd->is_3D_out = cfg ? 1 : 0; return InitDirectDraw(dr, rc.right - rc.left, rc.bottom - rc.top); }
static M4Err DD_Resize(VideoOutput *dr, u32 width, u32 height) { DDCONTEXT; if (dd->is_3D_out) { dd->width = width; dd->height = height; return DD_SetupOpenGL(dr); } if (!dd->ddraw_init) return InitDirectDraw(dr, width, height); else return CreateBackBuffer(dr, width, height); }
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // TODO: Place code here. g_hInst = hInstance; g_hMainWnd = InitWindow(nCmdShow); if(!g_hMainWnd) return -1; if(InitDirectDraw() < 0) { CleanUp(); MessageBox(g_hMainWnd, "Could start DirectX engine in your computer. Make sure you have at least version 7 of DirectX installed.", "Error", MB_OK | MB_ICONEXCLAMATION); return 0; } g_surfCar.Create(g_pDD, 1500, 280); g_surfCar.LoadBitmap(g_hInst, IDB_GREENCAR, 0, 0, 1500, 280); while( TRUE ) { MSG msg; if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ) { // Check for a quit message if( msg.message == WM_QUIT ) break; TranslateMessage( &msg ); DispatchMessage( &msg ); } else { ProcessIdle(); } } CleanUp(); return 0; }
int main(int argc, char **argv) { int i; DEVMODE devmode; HRESULT hresult; for (i=1; i<argc; i++) { if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "-?") || !strcmp(argv[i], "--help")) { usage(); return 0; } else if (!strcmp(argv[i], "-o")) { outputfile = argv[++i]; } } if (!strcmp(outputfile, "-")) { output = fdopen(1, "wt"); outputfile = NULL; } else { output = fopen(outputfile, "wt"); if (!output) { fprintf(stderr, "enumdisplay: failed to open %s for output\n", outputfile); return 1; } } fprintf(output, "enumdisplay results\n" "\n" "Display settings:\n" ); ZeroMemory(&devmode, sizeof(devmode)); devmode.dmSize = sizeof(DEVMODE); if (!EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &devmode)) { fprintf(output, "\tEnumDisplaySettings() FAILED!\n"); } else { dumpdevmode(&devmode); } fprintf(output, "\n" "All modes from EnumDisplaySettings:\n" ); ZeroMemory(&devmode, sizeof(devmode)); devmode.dmSize = sizeof(DEVMODE); i = 0; while (EnumDisplaySettings(NULL, i, &devmode)) { dumpdevmode(&devmode); fprintf(output, "\n"); ZeroMemory(&devmode, sizeof(devmode)); devmode.dmSize = sizeof(DEVMODE); i++; } if (!InitDirectDraw()) { fprintf(output, "\n" "All modes from IDirectDraw::EnumDisplayModes:\n" ); hresult = IDirectDraw_EnumDisplayModes(lpDD, 0, NULL, (LPVOID)0, ddenum); if (hresult != DD_OK) { fprintf(output, "\tIDirectDraw::EnumDisplayModes() FAILED! (%d)\n", hresult); } } UninitDirectDraw(); if (outputfile) fclose(output); return 0; }
static M4Err DD_SetFullScreen(VideoOutput *dr, Bool bOn, u32 *outWidth, u32 *outHeight) { M4Err e; char *sOpt; u32 MaxWidth, MaxHeight; DDCONTEXT; if (!dd->width ||!dd->height) return M4BadParam; if (bOn == dd->fullscreen) return M4OK; dd->fullscreen = bOn; /*whenever changing card display mode relocate fastest YUV format for blit (since it depends on the dest pixel format)*/ dd->yuv_init = 0; if (dd->fullscreen) { char *sOpt = PMI_GetOpt(dr, "Video", "SwitchResolution"); if (sOpt && !stricmp(sOpt, "yes")) dd->switch_res = 1; /*get current or best fitting mode*/ if (GetDisplayMode(dd) != M4OK) return M4IOErr; } MaxWidth = MaxHeight = 0; sOpt = PMI_GetOpt(dr, "Video", "MaxResolution"); if (sOpt) sscanf(sOpt, "%dx%d", &MaxWidth, &MaxHeight); dd->is_resizing = 1; if (dd->is_3D_out) { DEVMODE settings; e = M4OK; /*recreate the GL context whenever changing display settings, it's safer...*/ DestroyObjects(dd); /*Setup FS*/ if (dd->fullscreen) { /*change display mode*/ if (dd->switch_res) { /*when switching res weird messages are sent to parent -> store current rect and post a size/pos message on restore */ if (!dd->owns_hwnd) { HWND hWnd = GetParent(dd->hWnd); if (!hWnd) hWnd = dd->hWnd; GetWindowRect(hWnd, &dd->rcWnd); } } if ((MaxWidth && (dd->fs_width >= MaxWidth)) || (MaxHeight && (dd->fs_height >= MaxHeight)) ) { dd->fs_width = MaxWidth; dd->fs_height = MaxHeight; } /*force size change (we do it whether we own or not the window)*/ dd->prev_styles = GetWindowLong(dd->hWnd, GWL_STYLE); GetWindowRect(dd->hWnd, &dd->rcChildWnd); SetWindowLong(dd->hWnd, GWL_STYLE, WS_POPUP); SetWindowPos(dd->hWnd, NULL, 0, 0, dd->fs_width, dd->fs_height, SWP_NOZORDER | SWP_SHOWWINDOW); SetForegroundWindow(dd->hWnd); memset(&settings, 0, sizeof(DEVMODE)); settings.dmSize = sizeof(DEVMODE); settings.dmPelsWidth = dd->fs_width; settings.dmPelsHeight = dd->fs_height; settings.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT; if ( ChangeDisplaySettings(&settings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL ) { fprintf(stdout, "cannot change display settings...\n"); e = M4IOErr; } dd->NeedRestore = 1; dd->fs_store_width = dd->fs_width; dd->fs_store_height = dd->fs_height; } if (!e) e = DD_SetupOpenGL(dr); } else { e = InitDirectDraw(dr, dd->width, dd->height); } dd->is_resizing = 0; if (bOn) { dd->store_width = *outWidth; dd->store_height = *outHeight; *outWidth = dd->fs_width; *outHeight = dd->fs_height; } else { *outWidth = dd->store_width; *outHeight = dd->store_height; } return e; }