12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478 |
- #include <pjmedia-videodev/config.h>
- #if defined(PJMEDIA_VIDEO_DEV_HAS_DSHOW) && PJMEDIA_VIDEO_DEV_HAS_DSHOW != 0
- #define _WINDLL
- #include <streams.h>
- #include <stdarg.h>
- #include <stdio.h>
- #include <dvdmedia.h>
- #ifdef DEBUG
- #ifdef UNICODE
- #ifndef _UNICODE
- #define _UNICODE
- #endif
- #endif
- #endif
- #include <tchar.h>
- #include <strsafe.h>
- #ifdef DEBUG
- static void DisplayBITMAPINFO(const BITMAPINFOHEADER* pbmi);
- static void DisplayRECT(LPCTSTR szLabel, const RECT& rc);
- const INT iDEBUGINFO = 1024;
- const LPCTSTR pKeyNames[] = {
- TEXT("TIMING"),
- TEXT("TRACE"),
- TEXT("MEMORY"),
- TEXT("LOCKING"),
- TEXT("ERROR"),
- TEXT("CUSTOM1"),
- TEXT("CUSTOM2"),
- TEXT("CUSTOM3"),
- TEXT("CUSTOM4"),
- TEXT("CUSTOM5")
- };
- const TCHAR CAutoTrace::_szEntering[] = TEXT("->: %s");
- const TCHAR CAutoTrace::_szLeaving[] = TEXT("<-: %s");
- const INT iMAXLEVELS = NUMELMS(pKeyNames);
- HINSTANCE m_hInst;
- TCHAR m_ModuleName[iDEBUGINFO];
- DWORD m_Levels[iMAXLEVELS];
- CRITICAL_SECTION m_CSDebug;
- DWORD m_dwNextCookie;
- ObjectDesc *pListHead = NULL;
- DWORD m_dwObjectCount;
- BOOL m_bInit = FALSE;
- HANDLE m_hOutput = INVALID_HANDLE_VALUE;
- DWORD dwWaitTimeout = INFINITE;
- DWORD dwTimeOffset;
- bool g_fUseKASSERT = false;
- bool g_fDbgInDllEntryPoint = false;
- bool g_fAutoRefreshLevels = false;
- LPCTSTR pBaseKey = TEXT("SOFTWARE\\Microsoft\\DirectShow\\Debug");
- LPCTSTR pGlobalKey = TEXT("GLOBAL");
- static CHAR *pUnknownName = "UNKNOWN";
- LPCTSTR TimeoutName = TEXT("TIMEOUT");
- void WINAPI DbgInitialise(HINSTANCE hInst)
- {
- InitializeCriticalSection(&m_CSDebug);
- m_bInit = TRUE;
- m_hInst = hInst;
- DbgInitModuleName();
- if (GetProfileInt(m_ModuleName, TEXT("BreakOnLoad"), 0))
- DebugBreak();
- DbgInitModuleSettings(false);
- DbgInitGlobalSettings(true);
- dwTimeOffset = timeGetTime();
- }
- void WINAPI DbgTerminate()
- {
- if (m_hOutput != INVALID_HANDLE_VALUE) {
- EXECUTE_ASSERT(CloseHandle(m_hOutput));
- m_hOutput = INVALID_HANDLE_VALUE;
- }
- DeleteCriticalSection(&m_CSDebug);
- m_bInit = FALSE;
- }
- void WINAPI DbgInitKeyLevels(HKEY hKey, bool fTakeMax)
- {
- LONG lReturn;
- LONG lKeyPos;
- DWORD dwKeySize;
- DWORD dwKeyType;
- DWORD dwKeyValue;
-
- for (lKeyPos = 0;lKeyPos < iMAXLEVELS;lKeyPos++) {
- dwKeySize = sizeof(DWORD);
- lReturn = RegQueryValueEx(
- hKey,
- pKeyNames[lKeyPos],
- NULL,
- &dwKeyType,
- (LPBYTE) &dwKeyValue,
- &dwKeySize );
-
- if (lReturn != ERROR_SUCCESS || dwKeyType != REG_DWORD) {
- dwKeyValue = 0;
- lReturn = RegSetValueEx(
- hKey,
- pKeyNames[lKeyPos],
- (DWORD) 0,
- REG_DWORD,
- (PBYTE) &dwKeyValue,
- sizeof(DWORD));
- if (lReturn != ERROR_SUCCESS) {
- DbgLog((LOG_ERROR,1,TEXT("Could not create subkey %s"),pKeyNames[lKeyPos]));
- dwKeyValue = 0;
- }
- }
- if(fTakeMax)
- {
- m_Levels[lKeyPos] = max(dwKeyValue,m_Levels[lKeyPos]);
- }
- else
- {
- if((m_Levels[lKeyPos] & LOG_FORCIBLY_SET) == 0) {
- m_Levels[lKeyPos] = dwKeyValue;
- }
- }
- }
-
- dwKeySize = sizeof(DWORD);
- lReturn = RegQueryValueEx(
- hKey,
- TimeoutName,
- NULL,
- &dwKeyType,
- (LPBYTE) &dwWaitTimeout,
- &dwKeySize );
-
- if (lReturn != ERROR_SUCCESS || dwKeyType != REG_DWORD) {
- dwWaitTimeout = INFINITE;
- lReturn = RegSetValueEx(
- hKey,
- TimeoutName,
- (DWORD) 0,
- REG_DWORD,
- (PBYTE) &dwWaitTimeout,
- sizeof(DWORD));
- if (lReturn != ERROR_SUCCESS) {
- DbgLog((LOG_ERROR,1,TEXT("Could not create subkey %s"),pKeyNames[lKeyPos]));
- dwWaitTimeout = INFINITE;
- }
- }
- }
- void WINAPI DbgOutString(LPCTSTR psz)
- {
- if (m_hOutput != INVALID_HANDLE_VALUE) {
- UINT cb = lstrlen(psz);
- DWORD dw;
- #ifdef UNICODE
- CHAR szDest[2048];
- WideCharToMultiByte(CP_ACP, 0, psz, -1, szDest, NUMELMS(szDest), 0, 0);
- WriteFile (m_hOutput, szDest, cb, &dw, NULL);
- #else
- WriteFile (m_hOutput, psz, cb, &dw, NULL);
- #endif
- } else {
- OutputDebugString (psz);
- }
- }
- HRESULT DbgUniqueProcessName(LPCTSTR inName, LPTSTR outName)
- {
- HRESULT hr = S_OK;
- const TCHAR *pIn = inName;
- int dotPos = -1;
-
- while (*pIn && (pIn - inName) < MAX_PATH)
- {
- if ( TEXT('.') == *pIn )
- dotPos = (int)(pIn-inName);
- ++pIn;
- }
- if (*pIn)
- return E_INVALIDARG;
- DWORD dwProcessId = GetCurrentProcessId();
- if (dotPos < 0)
- {
-
- hr = StringCchPrintf(outName, MAX_PATH, TEXT("%s_%d"), inName, dwProcessId);
- }
- else
- {
- TCHAR pathAndBasename[MAX_PATH] = {0};
-
-
- hr = StringCchCopyN(pathAndBasename, MAX_PATH, inName, (size_t)dotPos);
-
- if (SUCCEEDED(hr))
- hr = StringCchPrintf(outName, MAX_PATH, TEXT("%s_%d%s"), pathAndBasename, dwProcessId, inName + dotPos);
- }
- return hr;
- }
- void WINAPI DbgInitLogTo (
- HKEY hKey)
- {
- LONG lReturn;
- DWORD dwKeyType;
- DWORD dwKeySize;
- TCHAR szFile[MAX_PATH] = {0};
- static const TCHAR cszKey[] = TEXT("LogToFile");
- dwKeySize = MAX_PATH;
- lReturn = RegQueryValueEx(
- hKey,
- cszKey,
- NULL,
- &dwKeyType,
- (LPBYTE) szFile,
- &dwKeySize);
-
-
- if (lReturn != ERROR_SUCCESS || dwKeyType != REG_SZ)
- {
- dwKeySize = sizeof(TCHAR);
- lReturn = RegSetValueEx(
- hKey,
- cszKey,
- (DWORD) 0,
- REG_SZ,
- (PBYTE)szFile,
- dwKeySize);
- }
-
-
- if (m_hOutput != INVALID_HANDLE_VALUE) {
- EXECUTE_ASSERT(CloseHandle (m_hOutput));
- m_hOutput = INVALID_HANDLE_VALUE;
- }
- if (szFile[0] != 0)
- {
- if (!lstrcmpi(szFile, TEXT("Console"))) {
- m_hOutput = GetStdHandle (STD_OUTPUT_HANDLE);
- if (m_hOutput == INVALID_HANDLE_VALUE) {
- AllocConsole ();
- m_hOutput = GetStdHandle (STD_OUTPUT_HANDLE);
- }
- SetConsoleTitle (TEXT("ActiveX Debug Output"));
- } else if (szFile[0] &&
- lstrcmpi(szFile, TEXT("Debug")) &&
- lstrcmpi(szFile, TEXT("Debugger")) &&
- lstrcmpi(szFile, TEXT("Deb")))
- {
- m_hOutput = CreateFile(szFile, GENERIC_WRITE,
- FILE_SHARE_READ,
- NULL, OPEN_ALWAYS,
- FILE_ATTRIBUTE_NORMAL,
- NULL);
- if (INVALID_HANDLE_VALUE == m_hOutput &&
- GetLastError() == ERROR_SHARING_VIOLATION)
- {
- TCHAR uniqueName[MAX_PATH] = {0};
- if (SUCCEEDED(DbgUniqueProcessName(szFile, uniqueName)))
- {
- m_hOutput = CreateFile(uniqueName, GENERIC_WRITE,
- FILE_SHARE_READ,
- NULL, OPEN_ALWAYS,
- FILE_ATTRIBUTE_NORMAL,
- NULL);
- }
- }
-
- if (INVALID_HANDLE_VALUE != m_hOutput)
- {
- static const TCHAR cszBar[] = TEXT("\r\n\r\n=====DbgInitialize()=====\r\n\r\n");
- SetFilePointer (m_hOutput, 0, NULL, FILE_END);
- DbgOutString (cszBar);
- }
- }
- }
- }
- void WINAPI DbgInitGlobalSettings(bool fTakeMax)
- {
- LONG lReturn;
- TCHAR szInfo[iDEBUGINFO];
- HKEY hGlobalKey;
-
- (void)StringCchPrintf(szInfo,NUMELMS(szInfo),TEXT("%s\\%s"),pBaseKey,pGlobalKey);
-
- lReturn = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
- szInfo,
- (DWORD) 0,
- NULL,
- (DWORD) 0,
- GENERIC_READ | GENERIC_WRITE,
- NULL,
- &hGlobalKey,
- NULL);
- if (lReturn != ERROR_SUCCESS) {
- lReturn = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
- szInfo,
- (DWORD) 0,
- NULL,
- (DWORD) 0,
- GENERIC_READ,
- NULL,
- &hGlobalKey,
- NULL);
- if (lReturn != ERROR_SUCCESS) {
- DbgLog((LOG_ERROR,1,TEXT("Could not access GLOBAL module key")));
- }
- return;
- }
- DbgInitKeyLevels(hGlobalKey, fTakeMax);
- RegCloseKey(hGlobalKey);
- }
- void WINAPI DbgInitModuleSettings(bool fTakeMax)
- {
- LONG lReturn;
- TCHAR szInfo[iDEBUGINFO];
- HKEY hModuleKey;
-
- (void)StringCchPrintf(szInfo,NUMELMS(szInfo),TEXT("%s\\%s"),pBaseKey,m_ModuleName);
-
- lReturn = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
- szInfo,
- (DWORD) 0,
- NULL,
- (DWORD) 0,
- GENERIC_READ | GENERIC_WRITE,
- NULL,
- &hModuleKey,
- NULL);
- if (lReturn != ERROR_SUCCESS) {
- lReturn = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
- szInfo,
- (DWORD) 0,
- NULL,
- (DWORD) 0,
- GENERIC_READ,
- NULL,
- &hModuleKey,
- NULL);
- if (lReturn != ERROR_SUCCESS) {
- DbgLog((LOG_ERROR,1,TEXT("Could not access module key")));
- }
- return;
- }
- DbgInitLogTo(hModuleKey);
- DbgInitKeyLevels(hModuleKey, fTakeMax);
- RegCloseKey(hModuleKey);
- }
- void WINAPI DbgInitModuleName()
- {
- TCHAR FullName[iDEBUGINFO];
- LPTSTR pName;
- GetModuleFileName(m_hInst,FullName,iDEBUGINFO);
- pName = _tcsrchr(FullName,'\\');
- if (pName == NULL) {
- pName = FullName;
- } else {
- pName++;
- }
- (void)StringCchCopy(m_ModuleName,NUMELMS(m_ModuleName), pName);
- }
- struct MsgBoxMsg
- {
- HWND hwnd;
- LPCTSTR szTitle;
- LPCTSTR szMessage;
- DWORD dwFlags;
- INT iResult;
- };
- DWORD WINAPI MsgBoxThread(
- __inout LPVOID lpParameter
- )
- {
- MsgBoxMsg *pmsg = (MsgBoxMsg *)lpParameter;
- pmsg->iResult = MessageBox(
- pmsg->hwnd,
- pmsg->szTitle,
- pmsg->szMessage,
- pmsg->dwFlags);
- return 0;
- }
- INT MessageBoxOtherThread(
- HWND hwnd,
- LPCTSTR szTitle,
- LPCTSTR szMessage,
- DWORD dwFlags)
- {
- if(g_fDbgInDllEntryPoint)
- {
-
-
-
-
- return IDCANCEL;
- }
- else
- {
- MsgBoxMsg msg = {hwnd, szTitle, szMessage, dwFlags, 0};
- DWORD dwid;
- HANDLE hThread = CreateThread(
- 0,
- 0,
- MsgBoxThread,
- (void *)&msg,
- 0,
- &dwid);
- if(hThread)
- {
- WaitForSingleObject(hThread, INFINITE);
- CloseHandle(hThread);
- return msg.iResult;
- }
-
- return IDCANCEL;
- }
- }
- void WINAPI DbgAssert(LPCTSTR pCondition,LPCTSTR pFileName,INT iLine)
- {
- if(g_fUseKASSERT)
- {
- DbgKernelAssert(pCondition, pFileName, iLine);
- }
- else
- {
- TCHAR szInfo[iDEBUGINFO];
- (void)StringCchPrintf(szInfo, NUMELMS(szInfo),TEXT("%s \nAt line %d of %s\nContinue? (Cancel to debug)"),
- pCondition, iLine, pFileName);
- INT MsgId = MessageBoxOtherThread(NULL,szInfo,TEXT("ASSERT Failed"),
- MB_SYSTEMMODAL |
- MB_ICONHAND |
- MB_YESNOCANCEL |
- MB_SETFOREGROUND);
- switch (MsgId)
- {
- case IDNO:
- FatalAppExit(FALSE, TEXT("Application terminated"));
- break;
- case IDCANCEL:
- DebugBreak();
- break;
- case IDYES:
- break;
- }
- }
- }
- void WINAPI DbgBreakPoint(LPCTSTR pCondition,LPCTSTR pFileName,INT iLine)
- {
- if(g_fUseKASSERT)
- {
- DbgKernelAssert(pCondition, pFileName, iLine);
- }
- else
- {
- TCHAR szInfo[iDEBUGINFO];
- (void)StringCchPrintf(szInfo, NUMELMS(szInfo),TEXT("%s \nAt line %d of %s\nContinue? (Cancel to debug)"),
- pCondition, iLine, pFileName);
- INT MsgId = MessageBoxOtherThread(NULL,szInfo,TEXT("Hard coded break point"),
- MB_SYSTEMMODAL |
- MB_ICONHAND |
- MB_YESNOCANCEL |
- MB_SETFOREGROUND);
- switch (MsgId)
- {
- case IDNO:
- FatalAppExit(FALSE, TEXT("Application terminated"));
- break;
- case IDCANCEL:
- DebugBreak();
- break;
- case IDYES:
- break;
- }
- }
- }
- void WINAPI DbgBreakPoint(LPCTSTR pFileName,INT iLine,__format_string LPCTSTR szFormatString,...)
- {
-
-
-
-
-
- const DWORD MAX_BREAK_POINT_MESSAGE_SIZE = 2000;
- TCHAR szBreakPointMessage[MAX_BREAK_POINT_MESSAGE_SIZE];
- va_list va;
- va_start( va, szFormatString );
- HRESULT hr = StringCchVPrintf( szBreakPointMessage, NUMELMS(szBreakPointMessage), szFormatString, va );
- va_end(va);
- if( FAILED(hr) ) {
- DbgBreak( "ERROR in DbgBreakPoint(). The variable length debug message could not be displayed because StringCchVPrintf() failed." );
- return;
- }
- ::DbgBreakPoint( szBreakPointMessage, pFileName, iLine );
- }
- BOOL WINAPI DbgCheckModuleLevel(DWORD Type,DWORD Level)
- {
- if(g_fAutoRefreshLevels)
- {
-
-
- static DWORD g_dwLastRefresh = 0;
- DWORD dwTime = timeGetTime();
- if(dwTime - g_dwLastRefresh > 1000) {
- g_dwLastRefresh = dwTime;
-
-
-
- DbgInitModuleSettings(false);
- }
- }
- DWORD Mask = 0x01;
-
- if ((Type & ((1<<iMAXLEVELS)-1))) {
-
- if (0==Level)
- return(TRUE);
-
- for (LONG lKeyPos = 0;lKeyPos < iMAXLEVELS;lKeyPos++) {
- if (Type & Mask) {
- if (Level <= (m_Levels[lKeyPos] & ~LOG_FORCIBLY_SET)) {
- return TRUE;
- }
- }
- Mask <<= 1;
- }
- }
- return FALSE;
- }
- void WINAPI DbgSetModuleLevel(DWORD Type, DWORD Level)
- {
- DWORD Mask = 0x01;
- for (LONG lKeyPos = 0;lKeyPos < iMAXLEVELS;lKeyPos++) {
- if (Type & Mask) {
- m_Levels[lKeyPos] = Level | LOG_FORCIBLY_SET;
- }
- Mask <<= 1;
- }
- }
- void WINAPI DbgSetAutoRefreshLevels(bool fAuto)
- {
- g_fAutoRefreshLevels = fAuto;
- }
- #ifdef UNICODE
- void WINAPI DbgLogInfo(DWORD Type,DWORD Level,__format_string LPCSTR pFormat,...)
- {
-
- BOOL bAccept = DbgCheckModuleLevel(Type,Level);
- if (bAccept == FALSE) {
- return;
- }
- TCHAR szInfo[2000];
-
- va_list va;
- va_start(va, pFormat);
- (void)StringCchPrintf(szInfo, NUMELMS(szInfo),
- TEXT("%s(tid %x) %8d : "),
- m_ModuleName,
- GetCurrentThreadId(), timeGetTime() - dwTimeOffset);
- CHAR szInfoA[2000];
- WideCharToMultiByte(CP_ACP, 0, szInfo, -1, szInfoA, NUMELMS(szInfoA), 0, 0);
- (void)StringCchVPrintfA(szInfoA + lstrlenA(szInfoA), NUMELMS(szInfoA) - lstrlenA(szInfoA), pFormat, va);
- (void)StringCchCatA(szInfoA, NUMELMS(szInfoA), "\r\n");
- WCHAR wszOutString[2000];
- MultiByteToWideChar(CP_ACP, 0, szInfoA, -1, wszOutString, NUMELMS(wszOutString));
- DbgOutString(wszOutString);
- va_end(va);
- }
- void WINAPI DbgAssert(LPCSTR pCondition,LPCSTR pFileName,INT iLine)
- {
- if(g_fUseKASSERT)
- {
- DbgKernelAssert(pCondition, pFileName, iLine);
- }
- else
- {
- TCHAR szInfo[iDEBUGINFO];
- (void)StringCchPrintf(szInfo, NUMELMS(szInfo), TEXT("%hs \nAt line %d of %hs\nContinue? (Cancel to debug)"),
- pCondition, iLine, pFileName);
- INT MsgId = MessageBoxOtherThread(NULL,szInfo,TEXT("ASSERT Failed"),
- MB_SYSTEMMODAL |
- MB_ICONHAND |
- MB_YESNOCANCEL |
- MB_SETFOREGROUND);
- switch (MsgId)
- {
- case IDNO:
- FatalAppExit(FALSE, TEXT("Application terminated"));
- break;
- case IDCANCEL:
- DebugBreak();
- break;
- case IDYES:
- break;
- }
- }
- }
- void WINAPI DbgBreakPoint(LPCSTR pCondition,LPCSTR pFileName,INT iLine)
- {
- if(g_fUseKASSERT)
- {
- DbgKernelAssert(pCondition, pFileName, iLine);
- }
- else
- {
- TCHAR szInfo[iDEBUGINFO];
- (void)StringCchPrintf(szInfo, NUMELMS(szInfo),TEXT("%hs \nAt line %d of %hs\nContinue? (Cancel to debug)"),
- pCondition, iLine, pFileName);
- INT MsgId = MessageBoxOtherThread(NULL,szInfo,TEXT("Hard coded break point"),
- MB_SYSTEMMODAL |
- MB_ICONHAND |
- MB_YESNOCANCEL |
- MB_SETFOREGROUND);
- switch (MsgId)
- {
- case IDNO:
- FatalAppExit(FALSE, TEXT("Application terminated"));
- break;
- case IDCANCEL:
- DebugBreak();
- break;
- case IDYES:
- break;
- }
- }
- }
- void WINAPI DbgKernelAssert(LPCSTR pCondition,LPCSTR pFileName,INT iLine)
- {
- DbgLog((LOG_ERROR,0,TEXT("Assertion FAILED (%hs) at line %d in file %hs"),
- pCondition, iLine, pFileName));
- DebugBreak();
- }
- #endif
- void WINAPI DbgLogInfo(DWORD Type,DWORD Level,LPCTSTR pFormat,...)
- {
-
- BOOL bAccept = DbgCheckModuleLevel(Type,Level);
- if (bAccept == FALSE) {
- return;
- }
- TCHAR szInfo[2000];
-
- va_list va;
- va_start(va, pFormat);
- (void)StringCchPrintf(szInfo, NUMELMS(szInfo),
- TEXT("%s(tid %x) %8d : "),
- m_ModuleName,
- GetCurrentThreadId(), timeGetTime() - dwTimeOffset);
- (void)StringCchVPrintf(szInfo + lstrlen(szInfo), NUMELMS(szInfo) - lstrlen(szInfo), pFormat, va);
- (void)StringCchCat(szInfo, NUMELMS(szInfo), TEXT("\r\n"));
- DbgOutString(szInfo);
- va_end(va);
- }
- void WINAPI DbgKernelAssert(LPCTSTR pCondition,LPCTSTR pFileName,INT iLine)
- {
- DbgLog((LOG_ERROR,0,TEXT("Assertion FAILED (%s) at line %d in file %s"),
- pCondition, iLine, pFileName));
- DebugBreak();
- }
- DWORD WINAPI DbgRegisterObjectCreation(LPCSTR szObjectName,
- LPCWSTR wszObjectName)
- {
-
- ASSERT(!!szObjectName ^ !!wszObjectName);
-
- ObjectDesc *pObject = new ObjectDesc;
- ASSERT(pObject);
-
- if (pObject == NULL) {
- return FALSE;
- }
-
- if (m_bInit == FALSE) {
- DbgInitialise(GetModuleHandle(NULL));
- }
-
- EnterCriticalSection(&m_CSDebug);
-
- if (!szObjectName && !wszObjectName) {
- szObjectName = pUnknownName;
- }
-
- pObject->m_szName = szObjectName;
- pObject->m_wszName = wszObjectName;
- pObject->m_dwCookie = ++m_dwNextCookie;
- pObject->m_pNext = pListHead;
- pListHead = pObject;
- m_dwObjectCount++;
- DWORD ObjectCookie = pObject->m_dwCookie;
- ASSERT(ObjectCookie);
- if(wszObjectName) {
- DbgLog((LOG_MEMORY,2,TEXT("Object created %d (%ls) %d Active"),
- pObject->m_dwCookie, wszObjectName, m_dwObjectCount));
- } else {
- DbgLog((LOG_MEMORY,2,TEXT("Object created %d (%hs) %d Active"),
- pObject->m_dwCookie, szObjectName, m_dwObjectCount));
- }
- LeaveCriticalSection(&m_CSDebug);
- return ObjectCookie;
- }
- BOOL WINAPI DbgRegisterObjectDestruction(DWORD dwCookie)
- {
-
- EnterCriticalSection(&m_CSDebug);
- ObjectDesc *pObject = pListHead;
- ObjectDesc *pPrevious = NULL;
-
- while (pObject) {
- if (pObject->m_dwCookie == dwCookie) {
- break;
- }
- pPrevious = pObject;
- pObject = pObject->m_pNext;
- }
- if (pObject == NULL) {
- DbgBreak("Apparently destroying a bogus object");
- LeaveCriticalSection(&m_CSDebug);
- return FALSE;
- }
-
- if (pPrevious == NULL) {
- pListHead = pObject->m_pNext;
- } else {
- pPrevious->m_pNext = pObject->m_pNext;
- }
-
- m_dwObjectCount--;
- if(pObject->m_wszName) {
- DbgLog((LOG_MEMORY,2,TEXT("Object destroyed %d (%ls) %d Active"),
- pObject->m_dwCookie, pObject->m_wszName, m_dwObjectCount));
- } else {
- DbgLog((LOG_MEMORY,2,TEXT("Object destroyed %d (%hs) %d Active"),
- pObject->m_dwCookie, pObject->m_szName, m_dwObjectCount));
- }
- delete pObject;
- LeaveCriticalSection(&m_CSDebug);
- return TRUE;
- }
- void WINAPI DbgDumpObjectRegister()
- {
- TCHAR szInfo[iDEBUGINFO];
-
- EnterCriticalSection(&m_CSDebug);
- ObjectDesc *pObject = pListHead;
-
- DbgLog((LOG_MEMORY,2,TEXT("")));
- DbgLog((LOG_MEMORY,2,TEXT(" ID Object Description")));
- DbgLog((LOG_MEMORY,2,TEXT("")));
- while (pObject) {
- if(pObject->m_wszName) {
- (void)StringCchPrintf(szInfo,NUMELMS(szInfo),TEXT("%5d (%p) %30ls"),pObject->m_dwCookie, &pObject, pObject->m_wszName);
- } else {
- (void)StringCchPrintf(szInfo,NUMELMS(szInfo),TEXT("%5d (%p) %30hs"),pObject->m_dwCookie, &pObject, pObject->m_szName);
- }
- DbgLog((LOG_MEMORY,2,szInfo));
- pObject = pObject->m_pNext;
- }
- (void)StringCchPrintf(szInfo,NUMELMS(szInfo),TEXT("Total object count %5d"),m_dwObjectCount);
- DbgLog((LOG_MEMORY,2,TEXT("")));
- DbgLog((LOG_MEMORY,1,szInfo));
- LeaveCriticalSection(&m_CSDebug);
- }
- DWORD WINAPI DbgWaitForSingleObject(HANDLE h)
- {
- DWORD dwWaitResult;
- do {
- dwWaitResult = WaitForSingleObject(h, dwWaitTimeout);
- ASSERT(dwWaitResult == WAIT_OBJECT_0);
- } while (dwWaitResult == WAIT_TIMEOUT);
- return dwWaitResult;
- }
- DWORD WINAPI DbgWaitForMultipleObjects(DWORD nCount,
- __in_ecount(nCount) CONST HANDLE *lpHandles,
- BOOL bWaitAll)
- {
- DWORD dwWaitResult;
- do {
- dwWaitResult = WaitForMultipleObjects(nCount,
- lpHandles,
- bWaitAll,
- dwWaitTimeout);
- ASSERT((DWORD)(dwWaitResult - WAIT_OBJECT_0) < MAXIMUM_WAIT_OBJECTS);
- } while (dwWaitResult == WAIT_TIMEOUT);
- return dwWaitResult;
- }
- void WINAPI DbgSetWaitTimeout(DWORD dwTimeout)
- {
- dwWaitTimeout = dwTimeout;
- }
- #endif
- #ifdef _OBJBASE_H_
-
- GUID_STRING_ENTRY g_GuidNames[] = {
- #define OUR_GUID_ENTRY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
- { #name, { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } },
- #include <uuids.h>
- };
- CGuidNameList GuidNames;
- int g_cGuidNames = sizeof(g_GuidNames) / sizeof(g_GuidNames[0]);
- char *CGuidNameList::operator [] (const GUID &guid)
- {
- for (int i = 0; i < g_cGuidNames; i++) {
- if (g_GuidNames[i].guid == guid) {
- return g_GuidNames[i].szName;
- }
- }
- if (guid == GUID_NULL) {
- return "GUID_NULL";
- }
-
-
-
- return "Unknown GUID Name";
- }
- #endif
- CDisp::CDisp(LONGLONG ll, int Format)
- {
-
-
- LARGE_INTEGER li;
- li.QuadPart = ll;
- switch (Format) {
- case CDISP_DEC:
- {
- TCHAR temp[20];
- int pos=20;
- temp[--pos] = 0;
- int digit;
-
- do {
-
- digit = li.LowPart % 10;
- li.QuadPart /= 10;
- temp[--pos] = (TCHAR) digit+L'0';
- } while (li.QuadPart);
- (void)StringCchCopy(m_String, NUMELMS(m_String), temp+pos);
- break;
- }
- case CDISP_HEX:
- default:
- (void)StringCchPrintf(m_String, NUMELMS(m_String), TEXT("0x%X%8.8X"), li.HighPart, li.LowPart);
- }
- };
- CDisp::CDisp(REFCLSID clsid)
- {
- #ifdef UNICODE
- (void)StringFromGUID2(clsid, m_String, NUMELMS(m_String));
- #else
- WCHAR wszTemp[50];
- (void)StringFromGUID2(clsid, wszTemp, NUMELMS(wszTemp));
- (void)StringCchPrintf(m_String, NUMELMS(m_String), TEXT("%S"), wszTemp);
- #endif
- };
- #ifdef __STREAMS__
- CDisp::CDisp(CRefTime llTime)
- {
- LONGLONG llDiv;
- if (llTime < 0) {
- llTime = -llTime;
- (void)StringCchCopy(m_String, NUMELMS(m_String), TEXT("-"));
- }
- llDiv = (LONGLONG)24 * 3600 * 10000000;
- if (llTime >= llDiv) {
- (void)StringCchPrintf(m_String + lstrlen(m_String), NUMELMS(m_String) - lstrlen(m_String), TEXT("%d days "), (LONG)(llTime / llDiv));
- llTime = llTime % llDiv;
- }
- llDiv = (LONGLONG)3600 * 10000000;
- if (llTime >= llDiv) {
- (void)StringCchPrintf(m_String + lstrlen(m_String), NUMELMS(m_String) - lstrlen(m_String), TEXT("%d hrs "), (LONG)(llTime / llDiv));
- llTime = llTime % llDiv;
- }
- llDiv = (LONGLONG)60 * 10000000;
- if (llTime >= llDiv) {
- (void)StringCchPrintf(m_String + lstrlen(m_String), NUMELMS(m_String) - lstrlen(m_String), TEXT("%d mins "), (LONG)(llTime / llDiv));
- llTime = llTime % llDiv;
- }
- (void)StringCchPrintf(m_String + lstrlen(m_String), NUMELMS(m_String) - lstrlen(m_String), TEXT("%d.%3.3d sec"),
- (LONG)llTime / 10000000,
- (LONG)((llTime % 10000000) / 10000));
- };
- #endif
- CDisp::CDisp(IPin *pPin)
- {
- PIN_INFO pi;
- TCHAR str[MAX_PIN_NAME];
- CLSID clsid;
- if (pPin) {
- pPin->QueryPinInfo(&pi);
- pi.pFilter->GetClassID(&clsid);
- QueryPinInfoReleaseFilter(pi);
- #ifndef UNICODE
- WideCharToMultiByte(GetACP(), 0, pi.achName, lstrlenW(pi.achName) + 1,
- str, MAX_PIN_NAME, NULL, NULL);
- #else
- (void)StringCchCopy(str, NUMELMS(str), pi.achName);
- #endif
- } else {
- (void)StringCchCopy(str, NUMELMS(str), TEXT("NULL IPin"));
- }
- m_pString = (PTCHAR) new TCHAR[lstrlen(str)+64];
- if (!m_pString) {
- return;
- }
- (void)StringCchPrintf(m_pString, lstrlen(str) + 64, TEXT("%hs(%s)"), GuidNames[clsid], str);
- }
- CDisp::CDisp(IUnknown *pUnk)
- {
- IBaseFilter *pf;
- HRESULT hr = pUnk->QueryInterface(IID_IBaseFilter, (void **)&pf);
- if(SUCCEEDED(hr))
- {
- FILTER_INFO fi;
- hr = pf->QueryFilterInfo(&fi);
- if(SUCCEEDED(hr))
- {
- QueryFilterInfoReleaseGraph(fi);
- size_t len = lstrlenW(fi.achName) + 1;
- m_pString = new TCHAR[len];
- if(m_pString)
- {
- #ifdef UNICODE
- (void)StringCchCopy(m_pString, len, fi.achName);
- #else
- (void)StringCchPrintf(m_pString, len, "%S", fi.achName);
- #endif
- }
- }
- pf->Release();
- return;
- }
- IPin *pp;
- hr = pUnk->QueryInterface(IID_IPin, (void **)&pp);
- if(SUCCEEDED(hr))
- {
- CDisp::CDisp(pp);
- pp->Release();
- return;
- }
- }
- CDisp::~CDisp()
- {
- }
- CDispBasic::~CDispBasic()
- {
- if (m_pString != m_String) {
- delete [] m_pString;
- }
- }
- CDisp::CDisp(double d)
- {
- (void)StringCchPrintf(m_String, NUMELMS(m_String), TEXT("%d.%03d"), (int) d, (int) ((d - (int) d) * 1000));
- }
- #ifdef DEBUG
- void WINAPI DisplayType(LPCTSTR label, const AM_MEDIA_TYPE *pmtIn)
- {
-
- DbgLog((LOG_TRACE,5,TEXT("")));
- DbgLog((LOG_TRACE,2,TEXT("%s M type %hs S type %hs"), label,
- GuidNames[pmtIn->majortype],
- GuidNames[pmtIn->subtype]));
- DbgLog((LOG_TRACE,5,TEXT("Subtype description %s"),GetSubtypeName(&pmtIn->subtype)));
-
- if (pmtIn->bTemporalCompression) {
- DbgLog((LOG_TRACE,5,TEXT("Temporally compressed")));
- } else {
- DbgLog((LOG_TRACE,5,TEXT("Not temporally compressed")));
- }
- if (pmtIn->bFixedSizeSamples) {
- DbgLog((LOG_TRACE,5,TEXT("Sample size %d"),pmtIn->lSampleSize));
- } else {
- DbgLog((LOG_TRACE,5,TEXT("Variable size samples")));
- }
- if (pmtIn->formattype == FORMAT_VideoInfo) {
- VIDEOINFOHEADER *pVideoInfo = (VIDEOINFOHEADER *)pmtIn->pbFormat;
- DisplayRECT(TEXT("Source rectangle"),pVideoInfo->rcSource);
- DisplayRECT(TEXT("Target rectangle"),pVideoInfo->rcTarget);
- DisplayBITMAPINFO(HEADER(pmtIn->pbFormat));
- } if (pmtIn->formattype == FORMAT_VideoInfo2) {
- VIDEOINFOHEADER2 *pVideoInfo2 = (VIDEOINFOHEADER2 *)pmtIn->pbFormat;
- DisplayRECT(TEXT("Source rectangle"),pVideoInfo2->rcSource);
- DisplayRECT(TEXT("Target rectangle"),pVideoInfo2->rcTarget);
- DbgLog((LOG_TRACE, 5, TEXT("Aspect Ratio: %d:%d"),
- pVideoInfo2->dwPictAspectRatioX,
- pVideoInfo2->dwPictAspectRatioY));
- DisplayBITMAPINFO(&pVideoInfo2->bmiHeader);
- } else if (pmtIn->majortype == MEDIATYPE_Audio) {
- DbgLog((LOG_TRACE,2,TEXT(" Format type %hs"),
- GuidNames[pmtIn->formattype]));
- DbgLog((LOG_TRACE,2,TEXT(" Subtype %hs"),
- GuidNames[pmtIn->subtype]));
- if ((pmtIn->subtype != MEDIASUBTYPE_MPEG1Packet)
- && (pmtIn->cbFormat >= sizeof(PCMWAVEFORMAT)))
- {
-
- WAVEFORMATEX *pwfx = (WAVEFORMATEX *) pmtIn->pbFormat;
- DbgLog((LOG_TRACE,2,TEXT("wFormatTag %u"), pwfx->wFormatTag));
- DbgLog((LOG_TRACE,2,TEXT("nChannels %u"), pwfx->nChannels));
- DbgLog((LOG_TRACE,2,TEXT("nSamplesPerSec %lu"), pwfx->nSamplesPerSec));
- DbgLog((LOG_TRACE,2,TEXT("nAvgBytesPerSec %lu"), pwfx->nAvgBytesPerSec));
- DbgLog((LOG_TRACE,2,TEXT("nBlockAlign %u"), pwfx->nBlockAlign));
- DbgLog((LOG_TRACE,2,TEXT("wBitsPerSample %u"), pwfx->wBitsPerSample));
-
- if (pmtIn->cbFormat >= sizeof(WAVEFORMATEX)) {
- DbgLog((LOG_TRACE,2,TEXT("cbSize %u"), pwfx->cbSize));
- }
- } else {
- }
- } else {
- DbgLog((LOG_TRACE,2,TEXT(" Format type %hs"),
- GuidNames[pmtIn->formattype]));
- }
- }
- void DisplayBITMAPINFO(const BITMAPINFOHEADER* pbmi)
- {
- DbgLog((LOG_TRACE,5,TEXT("Size of BITMAPINFO structure %d"),pbmi->biSize));
- if (pbmi->biCompression < 256) {
- DbgLog((LOG_TRACE,2,TEXT("%dx%dx%d bit (%d)"),
- pbmi->biWidth, pbmi->biHeight,
- pbmi->biBitCount, pbmi->biCompression));
- } else {
- DbgLog((LOG_TRACE,2,TEXT("%dx%dx%d bit '%4.4hs'"),
- pbmi->biWidth, pbmi->biHeight,
- pbmi->biBitCount, &pbmi->biCompression));
- }
- DbgLog((LOG_TRACE,2,TEXT("Image size %d"),pbmi->biSizeImage));
- DbgLog((LOG_TRACE,5,TEXT("Planes %d"),pbmi->biPlanes));
- DbgLog((LOG_TRACE,5,TEXT("X Pels per metre %d"),pbmi->biXPelsPerMeter));
- DbgLog((LOG_TRACE,5,TEXT("Y Pels per metre %d"),pbmi->biYPelsPerMeter));
- DbgLog((LOG_TRACE,5,TEXT("Colours used %d"),pbmi->biClrUsed));
- }
- void DisplayRECT(LPCTSTR szLabel, const RECT& rc)
- {
- DbgLog((LOG_TRACE,5,TEXT("%s (Left %d Top %d Right %d Bottom %d)"),
- szLabel,
- rc.left,
- rc.top,
- rc.right,
- rc.bottom));
- }
- void WINAPI DumpGraph(IFilterGraph *pGraph, DWORD dwLevel)
- {
- if( !pGraph )
- {
- return;
- }
- IEnumFilters *pFilters;
- DbgLog((LOG_TRACE,dwLevel,TEXT("DumpGraph [%x]"), pGraph));
- if (FAILED(pGraph->EnumFilters(&pFilters))) {
- DbgLog((LOG_TRACE,dwLevel,TEXT("EnumFilters failed!")));
- }
- IBaseFilter *pFilter;
- ULONG n;
- while (pFilters->Next(1, &pFilter, &n) == S_OK) {
- FILTER_INFO info;
- if (FAILED(pFilter->QueryFilterInfo(&info))) {
- DbgLog((LOG_TRACE,dwLevel,TEXT(" Filter [%p] -- failed QueryFilterInfo"), pFilter));
- } else {
- QueryFilterInfoReleaseGraph(info);
-
-
- DbgLog((LOG_TRACE,dwLevel,TEXT(" Filter [%p] '%ls'"), pFilter, info.achName));
- IEnumPins *pins;
- if (FAILED(pFilter->EnumPins(&pins))) {
- DbgLog((LOG_TRACE,dwLevel,TEXT("EnumPins failed!")));
- } else {
- IPin *pPin;
- while (pins->Next(1, &pPin, &n) == S_OK) {
- PIN_INFO pinInfo;
- if (FAILED(pPin->QueryPinInfo(&pinInfo))) {
- DbgLog((LOG_TRACE,dwLevel,TEXT(" Pin [%x] -- failed QueryPinInfo"), pPin));
- } else {
- QueryPinInfoReleaseFilter(pinInfo);
- IPin *pPinConnected = NULL;
- HRESULT hr = pPin->ConnectedTo(&pPinConnected);
- if (pPinConnected) {
- DbgLog((LOG_TRACE,dwLevel,TEXT(" Pin [%p] '%ls' [%sput]")
- TEXT(" Connected to pin [%p]"),
- pPin, pinInfo.achName,
- pinInfo.dir == PINDIR_INPUT ? TEXT("In") : TEXT("Out"),
- pPinConnected));
- pPinConnected->Release();
-
-
- if (pinInfo.dir == PINDIR_OUTPUT) {
- AM_MEDIA_TYPE mt;
- hr = pPin->ConnectionMediaType(&mt);
- if (SUCCEEDED(hr)) {
- DisplayType(TEXT("Connection type"), &mt);
- FreeMediaType(mt);
- }
- }
- } else {
- DbgLog((LOG_TRACE,dwLevel,
- TEXT(" Pin [%x] '%ls' [%sput]"),
- pPin, pinInfo.achName,
- pinInfo.dir == PINDIR_INPUT ? TEXT("In") : TEXT("Out")));
- }
- }
- pPin->Release();
- }
- pins->Release();
- }
- }
-
- pFilter->Release();
- }
- pFilters->Release();
- }
- #endif
- #endif
|