home *** CD-ROM | disk | FTP | other *** search
/ Windows Game Programming for Dummies (2nd Edition) / WinGamProgFD.iso / pc / DirectX SDK / DXSDK / samples / Multimedia / DirectShow_WinXP / VMR / VMRMix / Utils.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2001-10-08  |  12.9 KB  |  371 lines

  1. //------------------------------------------------------------------------------
  2. // File: Utils.h
  3. //
  4. // Desc: DirectShow sample code
  5. //       Helper functions
  6. //
  7. // Copyright (c) 2000-2001 Microsoft Corporation.  All rights reserved.
  8. //------------------------------------------------------------------------------
  9. #include "stdafx.h"
  10. #include "utils.h"
  11.     
  12. //-----------------------------------------------------------------------------------------
  13. //  Function:   MyMessage
  14. //  Purpose:    Displays a quick message box
  15. //  Arguments:  Input strings that will be displayed
  16. //  Returns:    button pushed in box
  17. //-----------------------------------------------------------------------------------------*/
  18. DWORD MyMessage(char *sQuestion, char *sTitle)
  19. {
  20.     int iReturn = AfxMessageBox( sQuestion, MB_YESNO | MB_ICONQUESTION | MB_DEFBUTTON1);
  21.     return iReturn == IDYES  ? FNS_PASS : FNS_FAIL;
  22. }
  23. //-----------------------------------------------------------------------------------------
  24. //  Function:   hresultNameLookup
  25. //  Purpose:    returns a string value for the given hresult
  26. //  Arguments:  HRESULT that needs verifying
  27. //  Returns:    string
  28. //-----------------------------------------------------------------------------------------*/
  29. const char * hresultNameLookup(HRESULT hres)
  30. {
  31.     switch(hres)
  32.     {
  33.     case VFW_E_CANNOT_RENDER:
  34.         return "VFW_E_CANNOT_RENDER";
  35.         break;
  36.     case VFW_E_INVALID_FILE_FORMAT:
  37.         return "VFW_E_INVALID_FILE_FORMAT";
  38.         break;
  39.     case VFW_E_NOT_FOUND:
  40.         return "VFW_E_NOT_FOUND";
  41.         break;
  42.     case VFW_E_NOT_IN_GRAPH:
  43.         return "VFW_E_NOT_IN_GRAPH";
  44.         break;
  45.     case VFW_E_UNKNOWN_FILE_TYPE:
  46.         return "VFW_E_UNKNOWN_FILE_TYPE";
  47.         break;
  48.     case VFW_E_UNSUPPORTED_STREAM:
  49.         return "VFW_E_UNSUPPORTED_STREAM";
  50.         break;
  51.     case VFW_E_CANNOT_CONNECT:
  52.         return "VFW_E_CANNOT_CONNECT";
  53.         break;
  54.     case VFW_E_CANNOT_LOAD_SOURCE_FILTER:
  55.         return "VFW_E_CANNOT_LOAD_SOURCE_FILTER";
  56.         break;
  57.     case VFW_S_PARTIAL_RENDER:
  58.         return "VFW_S_PARTIAL_RENDER";
  59.         break;
  60.     case VFW_S_VIDEO_NOT_RENDERED:
  61.         return "VFW_S_VIDEO_NOT_RENDERED";
  62.         break;
  63.     case VFW_S_AUDIO_NOT_RENDERED:
  64.         return "VFW_S_AUDIO_NOT_RENDERED";
  65.         break;
  66.     case VFW_S_DUPLICATE_NAME:
  67.         return "VFW_S_DUPLICATE_NAME";
  68.         break;
  69.     case VFW_S_MEDIA_TYPE_IGNORED:
  70.         return "VFW_S_MEDIA_TYPE_IGNORED";
  71.         break;
  72.     case E_INVALIDARG:
  73.         return "E_INVALIDARG";
  74.         break;
  75.     case DDERR_INCOMPATIBLEPRIMARY:
  76.         return "DDERR_INCOMPATIBLEPRIMARY";
  77.         break;
  78.     case DDERR_INVALIDCAPS:
  79.         return "DDERR_INVALIDCAPS";
  80.         break;
  81.     case DDERR_INVALIDOBJECT :
  82.         return "DDERR_INVALIDOBJECT";
  83.         break;
  84.     case DDERR_INVALIDPIXELFORMAT:
  85.         return "DDERR_INVALIDPIXELFORMAT";
  86.         break;
  87.     case DDERR_NOALPHAHW :
  88.         return "DDERR_NOALPHAHW";
  89.         break;
  90.     case DDERR_NOCOOPERATIVELEVELSET :
  91.         return "DDERR_NOCOOPERATIVELEVELSET";
  92.         break;
  93.     case DDERR_NODIRECTDRAWHW :
  94.         return "DDERR_NODIRECTDRAWHW";
  95.         break;
  96.     case DDERR_NOEMULATION :
  97.         return "DDERR_NOEMULATION";
  98.         break;
  99.     case VFW_E_BUFFERS_OUTSTANDING:
  100.         return "VFW_E_BUFFERS_OUTSTANDING";
  101.         break;
  102.     case DDERR_NOEXCLUSIVEMODE :
  103.         return "DDERR_NOEXCLUSIVEMODE ";
  104.         break;
  105.     case DDERR_NOFLIPHW:
  106.         return "DDERR_NOFLIPHW";
  107.         break;
  108.     case DDERR_NOMIPMAPHW:
  109.         return "DDERR_NOMIPMAPHW";
  110.         break;
  111.     case DDERR_NOOVERLAYHW :
  112.         return "DDERR_NOOVERLAYHW ";
  113.         break;
  114.     case E_OUTOFMEMORY:
  115.         return "E_OUTOFMEMORY";
  116.         break;
  117.     case VFW_E_NO_DISPLAY_PALETTE:
  118.         return "VFW_E_NO_DISPLAY_PALETTE";
  119.         break;
  120.     case VFW_E_NO_COLOR_KEY_FOUND:
  121.         return "VFW_E_NO_COLOR_KEY_FOUND";
  122.         break;
  123.     case VFW_E_PALETTE_SET:
  124.         return "VFW_E_PALETTE_SET";
  125.         break;
  126.     case DDERR_NOZBUFFERHW :
  127.         return "DDERR_NOZBUFFERHW ";
  128.         break;
  129.     case DDERR_OUTOFVIDEOMEMORY :
  130.         return "DDERR_OUTOFVIDEOMEMORY";
  131.         break;
  132.     case DDERR_PRIMARYSURFACEALREADYEXISTS:
  133.         return "DDERR_PRIMARYSURFACEALREADYEXISTS ";
  134.         break;
  135.     case DDERR_UNSUPPORTEDMODE:
  136.         return "DDERR_UNSUPPORTEDMODE";
  137.         break;
  138.     case VFW_E_NO_ADVISE_SET:
  139.         return "VFW_E_NO_ADVISE_SET";
  140.         break;
  141.     case S_OK:
  142.         return "S_OK";
  143.         break;
  144.     case S_FALSE:
  145.         return "S_FALSE";
  146.         break;
  147.     case VFW_S_CONNECTIONS_DEFERRED:
  148.         return "VFW_S_CONNECTIONS_DEFERRED";
  149.         break;
  150.     case 0x80040154:
  151.         return "Class not registered";
  152.         break;
  153.     case E_FAIL:
  154.         return "E_FAIL";
  155.         break;
  156.     case VFW_E_DVD_OPERATION_INHIBITED:
  157.         return "VFW_E_DVD_OPERATION_INHIBITED";
  158.         break;
  159.     case VFW_E_DVD_INVALIDDOMAIN:
  160.         return "VFW_E_DVD_INVALIDDOMAIN";
  161.         break;
  162.     case E_NOTIMPL:
  163.         return "E_NOTIMPL";
  164.         break;
  165.     case VFW_E_WRONG_STATE:
  166.         return "VFW_E_WRONG_STATE";
  167.         break;
  168.     case E_PROP_SET_UNSUPPORTED:
  169.         return "E_PROP_SET_UNSUPPORTED";
  170.         break;
  171.     case VFW_E_NO_PALETTE_AVAILABLE:
  172.         return "VFW_E_NO_PALETTE_AVAILABLE";
  173.         break;
  174.     case E_UNEXPECTED:
  175.         return "E_UNEXPECTED";
  176.         break;
  177.     case VFW_E_DVD_NO_BUTTON:
  178.         return "VFW_E_DVD_NO_BUTTON";
  179.         break;
  180.     case VFW_E_DVD_GRAPHNOTREADY:
  181.         return "VFW_E_DVD_GRAPHNOTREADY";
  182.         break;
  183.     case VFW_E_NOT_OVERLAY_CONNECTION:
  184.         return "VFW_E_NOT_OVERLAY_CONNECTION";
  185.         break;
  186.     case VFW_E_DVD_RENDERFAIL:
  187.         return "VFW_E_DVD_RENDERFAIL";
  188.         break;
  189.     case VFW_E_NOT_CONNECTED:
  190.         return "VFW_E_NOT_CONNECTED";
  191.         break;
  192.     case E_NOINTERFACE:
  193.         return "E_NOINTERFACE";
  194.         break;
  195.     case VFW_E_NO_COLOR_KEY_SET :
  196.         return "VFW_E_NO_COLOR_KEY_SET ";
  197.         break;
  198.     case VFW_E_NO_INTERFACE:
  199.         return "VFW_E_NO_INTERFACE";
  200.         break;
  201.     case 0x8004020c:
  202.         return "VFW_E_BUFFER_NOTSET";
  203.         break;
  204.     case 0x80040225:
  205.         return "VFW_E_NOT_PAUSED";
  206.     case 0x80070002:
  207.         return "System cannot find the file specified";
  208.         break;
  209.     case 0x80070003:
  210.         return "System cannot find the path specified";
  211.         break;
  212.     case VFW_E_DVD_DECNOTENOUGH:
  213.         return "VFW_E_DVD_DECNOTENOUGH";
  214.         break;
  215.     case VFW_E_ADVISE_ALREADY_SET:
  216.         return "VFW_E_ADVISE_ALREADY_SET";
  217.         break;
  218.     case VFW_E_DVD_CMD_CANCELLED:
  219.         return "VFW_E_DVD_CMD_CANCELLED";
  220.         break;
  221.     case VFW_E_DVD_MENU_DOES_NOT_EXIST:
  222.         return "VFW_E_DVD_MENU_DOES_NOT_EXIST";
  223.         break;
  224.     case VFW_E_DVD_WRONG_SPEED:
  225.         return "VFW_E_DVD_WRONG_SPEED";
  226.         break;
  227.     case VFW_S_DVD_NON_ONE_SEQUENTIAL:
  228.         return "VFW_S_DVD_NON_ONE_SEQUENTIAL";
  229.         break;
  230.     case E_POINTER:
  231.         return "E_POINTER";
  232.         break;
  233.     case VFW_E_DVD_NOT_IN_KARAOKE_MODE:
  234.         return "VFW_E_DVD_NOT_IN_KARAOKE_MODE";
  235.         break;
  236.     case VFW_E_DVD_INVALID_DISC:
  237.         return "VFW_E_DVD_INVALID_DISC";
  238.         break;
  239.     case VFW_E_DVD_STREAM_DISABLED:
  240.         return "VFW_E_DVD_STREAM_DISABLED";
  241.         break;
  242.     case VFW_E_NOT_STOPPED:
  243.         return "VFW_E_NOT_STOPPED";
  244.         break;
  245.     default:        
  246.         return "Unrecognized";
  247.         break;
  248.     }
  249. }
  250.  
  251. //-----------------------------------------------------------------------------------------
  252. //  Function:   MySleep
  253. //  Purpose:    if the application is in automated mode, then sleep func is turned off
  254. //  Arguments:  checks m_bAutomatedStatus to see if the func is in automation
  255. //  Returns:    true if automated, false otherwist
  256. //-----------------------------------------------------------------------------------------*/    
  257. bool MySleep(DWORD  dwTime)
  258. {
  259.     HANDLE hNeverHappensEvent;
  260.     hNeverHappensEvent = CreateEvent(NULL, FALSE, FALSE, "EVENTTHATNEVERHAPPENS");
  261.     WaitForSingleObject( hNeverHappensEvent, dwTime);
  262.     return false;
  263.  
  264. } // end of checkHResult method
  265.  
  266. //-----------------------------------------------------------------------------------------
  267. //  Function:   ShellAbort
  268. //  Purpose:    Prints a crash message text to the appropriate log(s)
  269. //  Arguments:  none
  270. //  Returns:    FNS_ABORTED
  271. //-----------------------------------------------------------------------------------------*/
  272. DWORD ShellAbort(CVMRCore *core)
  273. {
  274.     AfxMessageBox("Unhandled exception, press OK to abort...");
  275.     exit(-1);
  276.     return NULL;
  277. }
  278.  
  279. //-----------------------------------------------------------------------------------------
  280. //  Function:   GetMessageName
  281. //  Purpose:    Updates Name to the string version of the windows message
  282. //  Arguments:  Name, long pointer to a string that will be updated
  283. //              msg - message id that we want displayed
  284. //-----------------------------------------------------------------------------------------*/
  285. void GetMessageName(LPSTR Name, UINT msg)
  286. {   
  287.     switch(msg)
  288.     {
  289.         // For put_MessageDrain and get_MessageDrain   
  290.  
  291.         case WM_KEYDOWN:         lstrcpy(Name, "WM_KEYDOWN");         break;
  292.         case WM_KEYUP:           lstrcpy(Name, "WM_KEYUP");           break; 
  293.         case WM_LBUTTONDBLCLK:   lstrcpy(Name, "WM_LBUTTONDBLCLK");   break;
  294.         case WM_LBUTTONDOWN:     lstrcpy(Name, "WM_LBUTTONDOWN");     break;
  295.         case WM_LBUTTONUP:       lstrcpy(Name, "WM_LBUTTONUP");       break;
  296.         case WM_MBUTTONDBLCLK:   lstrcpy(Name, "WM_MBUTTONDBLCLK");   break;
  297.         case WM_MBUTTONDOWN:     lstrcpy(Name, "WM_MBUTTONDOWN");     break;
  298.         case WM_MBUTTONUP:       lstrcpy(Name, "WM_MBUTTONUP");       break;
  299.         case WM_MOUSEACTIVATE:   lstrcpy(Name, "WM_MOUSEACTIVATE");   break;
  300.         case WM_MOUSEMOVE:       lstrcpy(Name, "WM_MOUSEMOVE");       break;
  301.         case WM_NCHITTEST:       lstrcpy(Name, "WM_NCHITTEST");       break;
  302.         case WM_NCLBUTTONDBLCLK: lstrcpy(Name, "WM_NCLBUTTONDBLCLK"); break;
  303.         case WM_NCLBUTTONDOWN:   lstrcpy(Name, "WM_NCLBUTTONDOWN");   break;
  304.         case WM_NCLBUTTONUP:     lstrcpy(Name, "WM_NCLBUTTONUP");     break;
  305.         case WM_NCMBUTTONDBLCLK: lstrcpy(Name, "WM_NCMBUTTONDBLCLK"); break;
  306.         case WM_NCMBUTTONDOWN:   lstrcpy(Name, "WM_NCMBUTTONDOWN");   break;
  307.         case WM_NCMBUTTONUP:     lstrcpy(Name, "WM_NCMBUTTONUP");     break;
  308.         case WM_NCMOUSEMOVE:     lstrcpy(Name, "WM_NCMOUSEMOVE");     break;
  309.         case WM_NCRBUTTONDBLCLK: lstrcpy(Name, "WM_NCRBUTTONDBLCLK"); break;
  310.         case WM_NCRBUTTONDOWN:   lstrcpy(Name, "WM_NCRBUTTONDOWN");   break;
  311.         case WM_NCRBUTTONUP:     lstrcpy(Name, "WM_NCRBUTTONUP");     break;
  312.         case WM_RBUTTONDBLCLK:   lstrcpy(Name, "WM_RBUTTONDBLCLK");   break;
  313.         case WM_RBUTTONDOWN:     lstrcpy(Name, "WM_RBUTTONDOWN");     break;
  314.         case WM_RBUTTONUP:       lstrcpy(Name, "WM_RBUTTONUP");       break;
  315.  
  316.         // For NotifyOwnerMessage
  317.             
  318.         case WM_DEVMODECHANGE:     lstrcpy(Name,"WM_DEVMODECHANGE");     break;
  319.         case WM_DISPLAYCHANGE:     lstrcpy(Name,"WM_DISPLAYCHANGE");     break;
  320.         case WM_MOVE:              lstrcpy(Name,"WM_MOVE");              break;
  321.         case WM_PALETTECHANGED:    lstrcpy(Name,"WM_PALETTECHANGED");    break;
  322.         case WM_PALETTEISCHANGING: lstrcpy(Name,"WM_PALETTEISCHANGING"); break;
  323.         case WM_QUERYNEWPALETTE:   lstrcpy(Name,"WM_QUERYNEWPALETTE");   break;
  324.         case WM_SYSCOLORCHANGE:    lstrcpy(Name,"WM_SYSCOLORCHANGE");    break;
  325.  
  326.         default:                   wsprintf(Name, "Unknown Messgage %u", msg);
  327.     }
  328.  
  329.     return;
  330. }
  331.  
  332.  
  333. /*****************************Private*Routine******************************\
  334. * VerifyVMR
  335. *
  336. \**************************************************************************/
  337. BOOL VerifyVMR(void)
  338. {
  339.     HRESULT hres;
  340.  
  341.     CoInitialize(NULL);
  342.  
  343.     // Verify that the VMR exists on this system
  344.     IBaseFilter* pBF = NULL;
  345.     hres = CoCreateInstance(CLSID_VideoMixingRenderer,
  346.         NULL,
  347.         CLSCTX_INPROC,
  348.         IID_IBaseFilter,
  349.         (LPVOID *)&pBF);
  350.     if(SUCCEEDED(hres))
  351.     {
  352.         pBF->Release();
  353.         CoUninitialize();
  354.         return TRUE;
  355.     }
  356.     else
  357.     {
  358.         MessageBox(NULL, 
  359.             TEXT("This application requires the Video Mixing Renderer, which is present\r\n")
  360.             TEXT("only on Windows XP.\r\n\r\n")
  361.             TEXT("The Video Mixing Renderer (VMR) is also not enabled when viewing a \r\n")
  362.             TEXT("remote Windows XP machine through a Remote Desktop session.\r\n")
  363.             TEXT("You can run VMR-enabled applications only on your local machine.")
  364.             TEXT("\r\n\r\nThis sample will now exit."),
  365.             TEXT("Video Mixing Renderer capabilities are required"), MB_OK);
  366.  
  367.         CoUninitialize();
  368.         return FALSE;
  369.     }
  370. }
  371.