コード例 #1
0
// 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;
}
コード例 #2
0
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;
}
コード例 #3
0
ファイル: dx_video.c プロジェクト: DmitrySigaev/DSMedia
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);
}
コード例 #4
0
ファイル: dx_video.c プロジェクト: DmitrySigaev/DSMedia
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);
}
コード例 #5
0
ファイル: BasicDD.cpp プロジェクト: ellysh/ddraw-mingw
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;
}
コード例 #6
0
ファイル: enumdisplay.c プロジェクト: Hendricks266/jfbuild
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;
}
コード例 #7
0
ファイル: dx_video.c プロジェクト: DmitrySigaev/DSMedia
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;
}