My favorites | Sign in
Project Home Downloads Wiki Issues Source
Checkout   Browse   Changes    
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <dshow.h>

void DumpGraph(const IGraphBuilder *pGraph)
{
using std::cout;
using std::endl;
IBaseFilter *pFlt = NULL;
IEnumFilters *pEnumFlt = NULL;
FILTER_INFO fltInfo;

IEnumPins *pEnumPin = NULL;
IPin *pPin = NULL;
PIN_INFO pinInfo;
HRESULT hr, hr2;
TCHAR ptr[32] = {0};
hr = const_cast<IGraphBuilder*>(pGraph)->EnumFilters(&pEnumFlt);
if(FAILED(hr))
return;
do
{
hr = pEnumFlt->Next(1, &pFlt, NULL);
if(S_OK != hr || NULL == pFlt)
break;

pFlt->QueryFilterInfo(&fltInfo);
OutputDebugString(TEXT("\t"));
wsprintf(ptr, TEXT("0x%08X "), pFlt);
OutputDebugString(ptr);
OutputDebugString(fltInfo.achName);
OutputDebugString(TEXT("\n"));
cout << fltInfo.achName << endl;

hr2 = pFlt->EnumPins(&pEnumPin);
do
{
hr2 = pEnumPin->Next(1, &pPin, NULL);
if(S_OK != hr2 || NULL == pPin)
break;

pPin->QueryPinInfo(&pinInfo);
OutputDebugString(TEXT("\t\t"));
wsprintf(ptr, TEXT("0x%08X "), pPin);
OutputDebugString(ptr);
if(PINDIR_INPUT == pinInfo.dir)
OutputDebugString(TEXT("[In ]\t"));
else
OutputDebugString(TEXT("[Out]\t"));
OutputDebugString(pinInfo.achName);
IPin *pConnected = NULL;
if(S_OK == pPin->ConnectedTo(&pConnected) && NULL != pConnected)
wsprintf(ptr, TEXT("\t\tConnected to:0x%08X\n"), pConnected);
else
wsprintf(ptr, TEXT("\t\tNot Connected\n"));
OutputDebugString(ptr);

pPin->Release();
} while(S_OK == hr2);
pEnumPin->Release();

pFlt->Release();
pFlt = NULL;
} while(S_OK == hr);
pEnumFlt->Release();
}

Change log

r55 by rx.wen218 on Apr 8, 2010   Diff
dump pin connection status
Go to: 
Project members, sign in to write a code review

Older revisions

r54 by rx.wen218 on Apr 2, 2010   Diff
add directshow graph dumpper
All revisions of this file

File info

Size: 1606 bytes, 64 lines
Powered by Google Project Hosting