Jump to content

  • Log In with Google      Sign In   
  • Create Account


Member Since 14 Nov 2012
Offline Last Active Dec 10 2012 11:25 PM

Posts I've Made

In Topic: Direct X 9 and DirectShow Fliping WMV's in Fullscreen Mode

14 November 2012 - 06:00 PM

So this is what I have thus far.
[source lang="cpp"] HRESULT PlayMedia(LPTSTR lpszMovie, HINSTANCE hInstance) { HRESULT hr = S_OK; BOOL bSleep=TRUE; /*if (!lpszMovie) return E_POINTER;*/ // Allow DirectShow to create the FilterGraph for this media file hr = pGB->RenderFile(L"C:\\MET.wmv", NULL); if (FAILED(hr)) { MessageBoxA(NULL, "Unable to to create FilterGraph, incorrect formating.", "Movie Render Error", MB_OK); return hr; } //Maddness of Alex the Clown HWND pInstance = Vision::Video.GetCurrentConfig()->m_hWnd; hr = pVW->put_Owner((OAHWND)Vision::Video.GetCurrentConfig()->m_hWnd); // Set the style of the video window if(!Vision::Video.GetCurrentConfig()->m_bFullScreen) { hr = pVW->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS); // Get the size of the window RECT rect; GetClientRect((HWND)Vision::Video.GetCurrentConfig()->m_hWnd, &rect); // Set the video size: hr = pVW->SetWindowPosition(rect.left, rect.top, rect.right, rect.bottom); }else{ // //->Flip( NULL, DDFLIP_WAIT); // pGB-> } // Set the message drain of the video window to point to our hidden // application window. This allows keyboard input to be transferred // to our main window for processing. // // If this is an audio-only or MIDI file, then put_MessageDrain will fail. // hr = pVW->put_MessageDrain((OAHWND) Vision::Video.GetCurrentConfig()->m_hWnd); if (FAILED(hr)) { MessageBoxA(NULL, "Unable to Render Video to Window.", "Movie Render Error", MB_OK); return hr; } // Set fullscreen if(Vision::Video.GetCurrentConfig()->m_bFullScreen) { hr = SetFullscreen(); if (FAILED(hr)) { MessageBoxA (NULL, "Failed to run Full Screen.","Error Playing Cutscene",MB_OK); return hr; } } // Display first frame of the movie hr = pMC->Pause(); if (FAILED(hr)) { MessageBoxA(NULL, "Unable to pause Video.", "Movie Render Error", MB_OK); return hr; } // Start playback hr = pMC->Run(); if (FAILED(hr)) { MessageBoxA(NULL, "Unable to Start Video.", "Movie Render Error", MB_OK); return hr; } // Update state variables g_bContinue = TRUE; // Enter a loop of checking for events and sampling keyboard input while (g_bContinue) { MSG msg; long lEventCode; LONG_PTR lpParam1, lpParam2; // Reset sleep flag bSleep = TRUE; // Has there been a media event? Look for end of stream condition. if(E_ABORT != pME->GetEvent(&lEventCode, &lpParam1, &lpParam2, 0)) { // Is this the end of the movie? if (lEventCode == EC_COMPLETE) { g_bContinue = FALSE; bSleep = FALSE; } // Free the media event resources hr = pME->FreeEventParams(lEventCode, lpParam1, lpParam2); if (FAILED(hr)) { /*Msg(TEXT("Failed(%08lx) to free event params (%s)!\r\n"), hr, lpszMovie);*/ MessageBoxA(NULL, "THIS HURTS YOU", "LISTEN TO YOURSELF YOU'RE INDOCTRINATED", MB_OK); } } // Give system threads time to run (and don't sample user input madly) if (bSleep) Sleep(KEYBOARD_SAMPLE_FREQ); // Check and process window messages (like our keystrokes) while (PeekMessage (&msg, g_hwndMain, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } } return hr; }HRESULT GetInterfaces(void){ HRESULT hr = S_OK; // Instantiate filter graph interface //CLSID_FilterGraph JIF(CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGB)); // Get interfaces to control playback & screensize JIF(pGB->QueryInterface(IID_IMediaControl, (void **)&pMC)); JIF(pGB->QueryInterface(IID_IVideoWindow, (void **)&pVW)); //MAYBE CODE // Get interface to allow the app to wait for completion of playback JIF(pGB->QueryInterface(IID_IMediaEventEx, (void **)&pME)); return S_OK; // In case of failure, the helper macro jumps hereCLEANUP: CleanupInterfaces(); return(hr);}[/source]