//------------------------------------------------------------------------------ // File: Utils.h // // Desc: DirectShow sample code // Helper functions // // Copyright (c) 2000-2001 Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ #include "stdafx.h" #include "utils.h" //----------------------------------------------------------------------------------------- // Function: MyMessage // Purpose: Displays a quick message box // Arguments: Input strings that will be displayed // Returns: button pushed in box //-----------------------------------------------------------------------------------------*/ DWORD MyMessage(char *sQuestion, char *sTitle) { int iReturn = AfxMessageBox( sQuestion, MB_YESNO | MB_ICONQUESTION | MB_DEFBUTTON1); return iReturn == IDYES ? FNS_PASS : FNS_FAIL; } //----------------------------------------------------------------------------------------- // Function: hresultNameLookup // Purpose: returns a string value for the given hresult // Arguments: HRESULT that needs verifying // Returns: string //-----------------------------------------------------------------------------------------*/ const char * hresultNameLookup(HRESULT hres) { switch(hres) { case VFW_E_CANNOT_RENDER: return "VFW_E_CANNOT_RENDER"; break; case VFW_E_INVALID_FILE_FORMAT: return "VFW_E_INVALID_FILE_FORMAT"; break; case VFW_E_NOT_FOUND: return "VFW_E_NOT_FOUND"; break; case VFW_E_NOT_IN_GRAPH: return "VFW_E_NOT_IN_GRAPH"; break; case VFW_E_UNKNOWN_FILE_TYPE: return "VFW_E_UNKNOWN_FILE_TYPE"; break; case VFW_E_UNSUPPORTED_STREAM: return "VFW_E_UNSUPPORTED_STREAM"; break; case VFW_E_CANNOT_CONNECT: return "VFW_E_CANNOT_CONNECT"; break; case VFW_E_CANNOT_LOAD_SOURCE_FILTER: return "VFW_E_CANNOT_LOAD_SOURCE_FILTER"; break; case VFW_S_PARTIAL_RENDER: return "VFW_S_PARTIAL_RENDER"; break; case VFW_S_VIDEO_NOT_RENDERED: return "VFW_S_VIDEO_NOT_RENDERED"; break; case VFW_S_AUDIO_NOT_RENDERED: return "VFW_S_AUDIO_NOT_RENDERED"; break; case VFW_S_DUPLICATE_NAME: return "VFW_S_DUPLICATE_NAME"; break; case VFW_S_MEDIA_TYPE_IGNORED: return "VFW_S_MEDIA_TYPE_IGNORED"; break; case E_INVALIDARG: return "E_INVALIDARG"; break; case DDERR_INCOMPATIBLEPRIMARY: return "DDERR_INCOMPATIBLEPRIMARY"; break; case DDERR_INVALIDCAPS: return "DDERR_INVALIDCAPS"; break; case DDERR_INVALIDOBJECT : return "DDERR_INVALIDOBJECT"; break; case DDERR_INVALIDPIXELFORMAT: return "DDERR_INVALIDPIXELFORMAT"; break; case DDERR_NOALPHAHW : return "DDERR_NOALPHAHW"; break; case DDERR_NOCOOPERATIVELEVELSET : return "DDERR_NOCOOPERATIVELEVELSET"; break; case DDERR_NODIRECTDRAWHW : return "DDERR_NODIRECTDRAWHW"; break; case DDERR_NOEMULATION : return "DDERR_NOEMULATION"; break; case VFW_E_BUFFERS_OUTSTANDING: return "VFW_E_BUFFERS_OUTSTANDING"; break; case DDERR_NOEXCLUSIVEMODE : return "DDERR_NOEXCLUSIVEMODE "; break; case DDERR_NOFLIPHW: return "DDERR_NOFLIPHW"; break; case DDERR_NOMIPMAPHW: return "DDERR_NOMIPMAPHW"; break; case DDERR_NOOVERLAYHW : return "DDERR_NOOVERLAYHW "; break; case E_OUTOFMEMORY: return "E_OUTOFMEMORY"; break; case VFW_E_NO_DISPLAY_PALETTE: return "VFW_E_NO_DISPLAY_PALETTE"; break; case VFW_E_NO_COLOR_KEY_FOUND: return "VFW_E_NO_COLOR_KEY_FOUND"; break; case VFW_E_PALETTE_SET: return "VFW_E_PALETTE_SET"; break; case DDERR_NOZBUFFERHW : return "DDERR_NOZBUFFERHW "; break; case DDERR_OUTOFVIDEOMEMORY : return "DDERR_OUTOFVIDEOMEMORY"; break; case DDERR_PRIMARYSURFACEALREADYEXISTS: return "DDERR_PRIMARYSURFACEALREADYEXISTS "; break; case DDERR_UNSUPPORTEDMODE: return "DDERR_UNSUPPORTEDMODE"; break; case VFW_E_NO_ADVISE_SET: return "VFW_E_NO_ADVISE_SET"; break; case S_OK: return "S_OK"; break; case S_FALSE: return "S_FALSE"; break; case VFW_S_CONNECTIONS_DEFERRED: return "VFW_S_CONNECTIONS_DEFERRED"; break; case 0x80040154: return "Class not registered"; break; case E_FAIL: return "E_FAIL"; break; case VFW_E_DVD_OPERATION_INHIBITED: return "VFW_E_DVD_OPERATION_INHIBITED"; break; case VFW_E_DVD_INVALIDDOMAIN: return "VFW_E_DVD_INVALIDDOMAIN"; break; case E_NOTIMPL: return "E_NOTIMPL"; break; case VFW_E_WRONG_STATE: return "VFW_E_WRONG_STATE"; break; case E_PROP_SET_UNSUPPORTED: return "E_PROP_SET_UNSUPPORTED"; break; case VFW_E_NO_PALETTE_AVAILABLE: return "VFW_E_NO_PALETTE_AVAILABLE"; break; case E_UNEXPECTED: return "E_UNEXPECTED"; break; case VFW_E_DVD_NO_BUTTON: return "VFW_E_DVD_NO_BUTTON"; break; case VFW_E_DVD_GRAPHNOTREADY: return "VFW_E_DVD_GRAPHNOTREADY"; break; case VFW_E_NOT_OVERLAY_CONNECTION: return "VFW_E_NOT_OVERLAY_CONNECTION"; break; case VFW_E_DVD_RENDERFAIL: return "VFW_E_DVD_RENDERFAIL"; break; case VFW_E_NOT_CONNECTED: return "VFW_E_NOT_CONNECTED"; break; case E_NOINTERFACE: return "E_NOINTERFACE"; break; case VFW_E_NO_COLOR_KEY_SET : return "VFW_E_NO_COLOR_KEY_SET "; break; case VFW_E_NO_INTERFACE: return "VFW_E_NO_INTERFACE"; break; case 0x8004020c: return "VFW_E_BUFFER_NOTSET"; break; case 0x80040225: return "VFW_E_NOT_PAUSED"; case 0x80070002: return "System cannot find the file specified"; break; case 0x80070003: return "System cannot find the path specified"; break; case VFW_E_DVD_DECNOTENOUGH: return "VFW_E_DVD_DECNOTENOUGH"; break; case VFW_E_ADVISE_ALREADY_SET: return "VFW_E_ADVISE_ALREADY_SET"; break; case VFW_E_DVD_CMD_CANCELLED: return "VFW_E_DVD_CMD_CANCELLED"; break; case VFW_E_DVD_MENU_DOES_NOT_EXIST: return "VFW_E_DVD_MENU_DOES_NOT_EXIST"; break; case VFW_E_DVD_WRONG_SPEED: return "VFW_E_DVD_WRONG_SPEED"; break; case VFW_S_DVD_NON_ONE_SEQUENTIAL: return "VFW_S_DVD_NON_ONE_SEQUENTIAL"; break; case E_POINTER: return "E_POINTER"; break; case VFW_E_DVD_NOT_IN_KARAOKE_MODE: return "VFW_E_DVD_NOT_IN_KARAOKE_MODE"; break; case VFW_E_DVD_INVALID_DISC: return "VFW_E_DVD_INVALID_DISC"; break; case VFW_E_DVD_STREAM_DISABLED: return "VFW_E_DVD_STREAM_DISABLED"; break; case VFW_E_NOT_STOPPED: return "VFW_E_NOT_STOPPED"; break; default: return "Unrecognized"; break; } } //----------------------------------------------------------------------------------------- // Function: MySleep // Purpose: if the application is in automated mode, then sleep func is turned off // Arguments: checks m_bAutomatedStatus to see if the func is in automation // Returns: true if automated, false otherwist //-----------------------------------------------------------------------------------------*/ bool MySleep(DWORD dwTime) { HANDLE hNeverHappensEvent; hNeverHappensEvent = CreateEvent(NULL, FALSE, FALSE, "EVENTTHATNEVERHAPPENS"); WaitForSingleObject( hNeverHappensEvent, dwTime); return false; } // end of checkHResult method //----------------------------------------------------------------------------------------- // Function: ShellAbort // Purpose: Prints a crash message text to the appropriate log(s) // Arguments: none // Returns: FNS_ABORTED //-----------------------------------------------------------------------------------------*/ DWORD ShellAbort(CVMRCore *core) { AfxMessageBox("Unhandled exception, press OK to abort..."); exit(-1); return NULL; } //----------------------------------------------------------------------------------------- // Function: GetMessageName // Purpose: Updates Name to the string version of the windows message // Arguments: Name, long pointer to a string that will be updated // msg - message id that we want displayed //-----------------------------------------------------------------------------------------*/ void GetMessageName(LPSTR Name, UINT msg) { switch(msg) { // For put_MessageDrain and get_MessageDrain case WM_KEYDOWN: lstrcpy(Name, "WM_KEYDOWN"); break; case WM_KEYUP: lstrcpy(Name, "WM_KEYUP"); break; case WM_LBUTTONDBLCLK: lstrcpy(Name, "WM_LBUTTONDBLCLK"); break; case WM_LBUTTONDOWN: lstrcpy(Name, "WM_LBUTTONDOWN"); break; case WM_LBUTTONUP: lstrcpy(Name, "WM_LBUTTONUP"); break; case WM_MBUTTONDBLCLK: lstrcpy(Name, "WM_MBUTTONDBLCLK"); break; case WM_MBUTTONDOWN: lstrcpy(Name, "WM_MBUTTONDOWN"); break; case WM_MBUTTONUP: lstrcpy(Name, "WM_MBUTTONUP"); break; case WM_MOUSEACTIVATE: lstrcpy(Name, "WM_MOUSEACTIVATE"); break; case WM_MOUSEMOVE: lstrcpy(Name, "WM_MOUSEMOVE"); break; case WM_NCHITTEST: lstrcpy(Name, "WM_NCHITTEST"); break; case WM_NCLBUTTONDBLCLK: lstrcpy(Name, "WM_NCLBUTTONDBLCLK"); break; case WM_NCLBUTTONDOWN: lstrcpy(Name, "WM_NCLBUTTONDOWN"); break; case WM_NCLBUTTONUP: lstrcpy(Name, "WM_NCLBUTTONUP"); break; case WM_NCMBUTTONDBLCLK: lstrcpy(Name, "WM_NCMBUTTONDBLCLK"); break; case WM_NCMBUTTONDOWN: lstrcpy(Name, "WM_NCMBUTTONDOWN"); break; case WM_NCMBUTTONUP: lstrcpy(Name, "WM_NCMBUTTONUP"); break; case WM_NCMOUSEMOVE: lstrcpy(Name, "WM_NCMOUSEMOVE"); break; case WM_NCRBUTTONDBLCLK: lstrcpy(Name, "WM_NCRBUTTONDBLCLK"); break; case WM_NCRBUTTONDOWN: lstrcpy(Name, "WM_NCRBUTTONDOWN"); break; case WM_NCRBUTTONUP: lstrcpy(Name, "WM_NCRBUTTONUP"); break; case WM_RBUTTONDBLCLK: lstrcpy(Name, "WM_RBUTTONDBLCLK"); break; case WM_RBUTTONDOWN: lstrcpy(Name, "WM_RBUTTONDOWN"); break; case WM_RBUTTONUP: lstrcpy(Name, "WM_RBUTTONUP"); break; // For NotifyOwnerMessage case WM_DEVMODECHANGE: lstrcpy(Name,"WM_DEVMODECHANGE"); break; case WM_DISPLAYCHANGE: lstrcpy(Name,"WM_DISPLAYCHANGE"); break; case WM_MOVE: lstrcpy(Name,"WM_MOVE"); break; case WM_PALETTECHANGED: lstrcpy(Name,"WM_PALETTECHANGED"); break; case WM_PALETTEISCHANGING: lstrcpy(Name,"WM_PALETTEISCHANGING"); break; case WM_QUERYNEWPALETTE: lstrcpy(Name,"WM_QUERYNEWPALETTE"); break; case WM_SYSCOLORCHANGE: lstrcpy(Name,"WM_SYSCOLORCHANGE"); break; default: wsprintf(Name, "Unknown Messgage %u", msg); } return; } /*****************************Private*Routine******************************\ * VerifyVMR * \**************************************************************************/ BOOL VerifyVMR(void) { HRESULT hres; CoInitialize(NULL); // Verify that the VMR exists on this system IBaseFilter* pBF = NULL; hres = CoCreateInstance(CLSID_VideoMixingRenderer, NULL, CLSCTX_INPROC, IID_IBaseFilter, (LPVOID *)&pBF); if(SUCCEEDED(hres)) { pBF->Release(); CoUninitialize(); return TRUE; } else { MessageBox(NULL, TEXT("This application requires the Video Mixing Renderer, which is present\r\n") TEXT("only on Windows XP.\r\n\r\n") TEXT("The Video Mixing Renderer (VMR) is also 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.") TEXT("\r\n\r\nThis sample will now exit."), TEXT("Video Mixing Renderer capabilities are required"), MB_OK); CoUninitialize(); return FALSE; } }