void CBasePin::DisplayPinInfo(IPin *pReceivePin) { if (DbgCheckModuleLevel(LOG_TRACE, CONNECT_TRACE_LEVEL)) { PIN_INFO ConnectPinInfo; PIN_INFO ReceivePinInfo; if (FAILED(QueryPinInfo(&ConnectPinInfo))) { lstrcpyW(ConnectPinInfo.achName, L"Bad Pin"); } else { QueryPinInfoReleaseFilter(ConnectPinInfo); } if (FAILED(pReceivePin->QueryPinInfo(&ReceivePinInfo))) { lstrcpyW(ReceivePinInfo.achName, L"Bad Pin"); } else { QueryPinInfoReleaseFilter(ReceivePinInfo); } DbgLog((LOG_TRACE, CONNECT_TRACE_LEVEL, TEXT("Trying to connect Pins :"))); DbgLog((LOG_TRACE, CONNECT_TRACE_LEVEL, TEXT(" <%ls>"), ConnectPinInfo.achName)); DbgLog((LOG_TRACE, CONNECT_TRACE_LEVEL, TEXT(" <%ls>"), ReceivePinInfo.achName)); } }
/* Display pin */ 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 lstrcpy(str, pi.achName); #endif } else { lstrcpy(str, TEXT("NULL IPin")); } m_pString = (PTCHAR) new TCHAR[lstrlen(str)+64]; if (!m_pString) { return; } wsprintf(m_pString, TEXT("%hs(%s)"), GuidNames[clsid], str); }
/* Display pin */ 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")); } size_t len = lstrlen(str)+64; m_pString = (PTCHAR) new TCHAR[len]; if (!m_pString) { return; } #ifdef UNICODE LPCTSTR FORMAT_STRING = TEXT("%S(%s)"); #else LPCTSTR FORMAT_STRING = TEXT("%s(%s)"); #endif (void)StringCchPrintf(m_pString, len, FORMAT_STRING, GuidNames[clsid], str); }
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 [%x] -- failed QueryFilterInfo"), pFilter)); } else { QueryFilterInfoReleaseGraph(info); // !!! should QueryVendorInfo here! DbgLog((LOG_TRACE,dwLevel,TEXT(" Filter [%x] '%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 info; if (FAILED(pPin->QueryPinInfo(&info))) { DbgLog((LOG_TRACE,dwLevel,TEXT(" Pin [%x] -- failed QueryPinInfo"), pPin)); } else { QueryPinInfoReleaseFilter(info); IPin *pPinConnected = NULL; HRESULT hr = pPin->ConnectedTo(&pPinConnected); if (pPinConnected) { DbgLog((LOG_TRACE,dwLevel,TEXT(" Pin [%x] '%ls' [%sput]") TEXT(" Connected to pin [%x]"), pPin, info.achName, info.dir == PINDIR_INPUT ? TEXT("In") : TEXT("Out"), pPinConnected)); pPinConnected->Release(); // perhaps we should really dump the type both ways as a sanity // check? if (info.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, info.achName, info.dir == PINDIR_INPUT ? TEXT("In") : TEXT("Out"))); } } pPin->Release(); } pins->Release(); } } pFilter->Release(); } pFilters->Release(); }
//--------------------------------------------------------- // //--------------------------------------------------------- void DumpFilterGraph(IFilterGraph *pGraph) { IEnumFilters *pFilters=NULL; //return; //!!BS: debugging only dprintf(TEXT("DumpGraph [%x]"), pGraph); if (FAILED(pGraph->EnumFilters(&pFilters))) { dprintf(TEXT("EnumFilters failed!")); } IBaseFilter *pFilter=NULL; ULONG n=0; while (pFilters->Next(1, &pFilter, &n) == S_OK) { FILTER_INFO info; if (FAILED(pFilter->QueryFilterInfo(&info))) { dprintf(TEXT(" Filter [%x] -- failed QueryFilterInfo"), pFilter); } else { QueryFilterInfoReleaseGraph(info); // !!! should QueryVendorInfo here! dprintf(TEXT(" Filter [%x] '%ls'"), pFilter, info.achName); IEnumPins *pins=NULL; if (FAILED(pFilter->EnumPins(&pins))) { dprintf(TEXT("EnumPins failed!")); } else { IPin *pPin=NULL; while (pins->Next(1, &pPin, &n) == S_OK) { PIN_INFO info; if (FAILED(pPin->QueryPinInfo(&info))) { dprintf(TEXT(" Pin [%x] -- failed QueryPinInfo"), pPin); } else { QueryPinInfoReleaseFilter(info); IPin *pPinConnected = NULL; HRESULT hr = pPin->ConnectedTo(&pPinConnected); if (pPinConnected) { dprintf(TEXT(" Pin [%x] '%ls' [%sput]") TEXT(" Connected to pin [%x]"), pPin, info.achName, info.dir == PINDIR_INPUT ? TEXT("In") : TEXT("Out"), pPinConnected); // perhaps we should really dump the type both ways as a sanity // check? if (info.dir == PINDIR_OUTPUT) { AM_MEDIA_TYPE mt; hr = pPin->ConnectionMediaType(&mt); if (SUCCEEDED(hr)) { //DebugDisplayMediaType("Connection type", &mt); DebugFreeMediaType(mt); } } } else { dprintf(TEXT(" Pin [%x] '%ls' [%sput]"), pPin, info.achName, info.dir == PINDIR_INPUT ? TEXT("In") : TEXT("Out")); } if (pPinConnected!=NULL) { pPinConnected->Release(); pPinConnected=NULL; } } if (pPin!=NULL) { pPin->Release(); pPin=NULL; } } if (pins!=NULL) { pins->Release(); pins=NULL; } } } if (pFilter!=NULL) { pFilter->Release(); pFilter=NULL; } } if (pFilters!=NULL) { pFilters->Release(); pFilters=NULL; } }