topical media & game development

talk show tell print

hush-src-multi-MultiPlayer-MultiPlayer.cpp / cpp



  //------------------------------------------------------------------------------
  // File: MultiPlayer.cpp
  //
  // Desc: DirectShow sample code - MultiVMR9 MultiPlayer sample
  //       Defines the class behaviors for the application
  //
  // Copyright (c) Microsoft Corporation.  All rights reserved.
  //------------------------------------------------------------------------------
  
  include <stdafx.h>
  include <MultiPlayer.h>
  include <MultiPlayerDlg.h>
  include "MultiVMR9_i.c"
  
  ifdef _DEBUG
  define new DEBUG_NEW
  endif
  
  HINSTANCE g_hInstance = NULL;;
  
  // CMultiPlayerApp
  
  BEGIN_MESSAGE_MAP(CMultiPlayerApp, CWinApp)
      ON_COMMAND(ID_HELP, CWinApp::OnHelp)
  END_MESSAGE_MAP()
  
  // CMultiPlayerApp construction
  
  CMultiPlayerApp::CMultiPlayerApp()
  {
  }
  
  // The one and only CMultiPlayerApp object
  
  CMultiPlayerApp theApp;
  
  //----------------------------------------------------------------------------
  //  VerifyVMR9
  // 
  //  Verifies that VMR9 COM objects exist on the system and that the VMR9
  //  can be instantiated.
  //
  //  Returns: FALSE if the VMR9 can't be created
  //----------------------------------------------------------------------------
  
  BOOL CMultiPlayerApp::VerifyVMR9()
  {
      HRESULT hr;
  
      // Verify that the VMR exists on this system
      IBaseFilter* pBF = NULL;
      hr = CoCreateInstance(CLSID_VideoMixingRenderer9, NULL,
                            CLSCTX_INPROC,
                            IID_IBaseFilter,
                            (LPVOID *)&pBF);
      if(SUCCEEDED(hr))
      {
          pBF->Release();
          return TRUE;
      }
      else
      {
          MessageBox(NULL, 
              TEXT("This application requires the Video Mixing Renderer, which is present\r\n")
              TEXT("only on DirectX 9 systems with hardware video acceleration enabled.\r\n\r\n")
  
              TEXT("The Video Mixing Renderer (VMR9) is not enabled when viewing a \r\n")
              TEXT("remote Windows XP machine through a Remote Desktop session.\r\n")
              TEXT("You can run VMR-enabled applications only on your local machine.\r\n\r\n")
  
              TEXT("To verify that hardware acceleration is enabled on a Windows XP\r\n")
              TEXT("system, follow these steps:\r\n")
              TEXT("-----------------------------------------------------------------------\r\n")
              TEXT(" - Open 'Display Properties' in the Control Panel\r\n")
              TEXT(" - Click the 'Settings' tab\r\n")
              TEXT(" - Click on the 'Advanced' button at the bottom of the page\r\n")
              TEXT(" - Click on the 'Troubleshooting' tab in the window that appears\r\n")
              TEXT(" - Verify that the 'Hardware Acceleration' slider is at the rightmost position\r\n")
  
              TEXT("\r\nThis sample will now exit."),
  
              TEXT("Video Mixing Renderer (VMR9) capabilities are required"), MB_OK);
  
          return FALSE;
      }
  }
  
  // CMultiPlayerApp initialization
  
  BOOL CMultiPlayerApp::InitInstance()
  {
      CWinApp::InitInstance();
  
      CMultiPlayerDlg dlg;
      m_pMainWnd = &dlg;
  
      g_hInstance = AfxGetInstanceHandle();
      CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
  
      // Verify that the VMR9 is present on this system
      if(!VerifyVMR9())
      {
          CoUninitialize();
          return FALSE;
      }
  
      // Display the main dialog
      dlg.DoModal();
  
      // CoUninitialize();
      // Since the dialog has been closed, return FALSE so that we exit the
      //  application, rather than start the application's message pump.
      return FALSE;
  }
  
  ifdef _DEBUG
      void DbgMsg( char* szMessage, ... )
      {
          char szFullMessage[MAX_PATH];
          char szFormatMessage[MAX_PATH];
  
          // format message
          va_list ap;
          va_start(ap, szMessage);
          _vsnprintf( szFormatMessage, MAX_PATH, szMessage, ap);
          va_end(ap);
          strncat( szFormatMessage, "\n", MAX_PATH);
          strcpy( szFullMessage, "~*~*~*~*~*~ ");
          strcat( szFullMessage, szFormatMessage );
          OutputDebugStringA( szFullMessage );
      }
  else
      void DbgMsg( char* szMessage, ... ){;}
  endif
  
  


(C) Æliens 20/2/2008

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.