BuildGraph Function for Generating a Table of Contents
The following function is a helper function in an example program that is discussed in Generating a Table of Contents Automatically.
HRESULT BuildGraph(IGraphBuilder* pGraph, IDMOWrapperFilter* pWrap)
{
IBaseFilter* pTocGeneratorBase = NULL;
HRESULT hr = pWrap->QueryInterface(IID_IBaseFilter, (VOID**)&pTocGeneratorBase);
if(SUCCEEDED(hr))
{
hr = pGraph->AddFilter(pTocGeneratorBase, L"TOC Generator");
if(SUCCEEDED(hr))
{
IBaseFilter* pSourceBase = NULL;
hr = pGraph->AddSourceFilter(g_sourceFile, L"Source", &pSourceBase);
if(SUCCEEDED(hr))
{
IEnumPins* pTocGenPins = NULL;
hr = pTocGeneratorBase->EnumPins(&pTocGenPins);
if(SUCCEEDED(hr))
{
ULONG numPins = 0;
IPin* pTocGenInput = NULL; // 1st pin is input.
hr = pTocGenPins->Next(1, &pTocGenInput, &numPins);
if(SUCCEEDED(hr))
{
numPins = 0;
IPin* pTocGenOutput = NULL; // 2nd pin is output.
hr = pTocGenPins->Next(1, &pTocGenOutput, &numPins);
if(SUCCEEDED(hr))
{
IEnumPins* pSourcePins = NULL;
hr = pSourceBase->EnumPins(&pSourcePins);
if(SUCCEEDED(hr))
{
numPins = 0;
IPin* pSourceInput = NULL;
hr = pSourcePins->Next(1, &pSourceInput, &numPins);
// We don't need the first pin, so discard it.
if(NULL != pSourceInput)
{
pSourceInput->Release();
pSourceInput = NULL;
}
IPin* pSourceOutput = NULL; // 2nd pin is output.
hr = pSourcePins->Next(1, &pSourceOutput, &numPins);
if(SUCCEEDED(hr))
{
hr = pGraph->Connect(pSourceOutput, pTocGenInput);
if(SUCCEEDED(hr))
{
hr = pGraph->Render(pTocGenOutput);
}
pSourceOutput->Release();
pSourceOutput = NULL;
}
pSourcePins->Release();
pSourcePins = NULL;
}
pTocGenOutput->Release();
pTocGenOutput = NULL;
}
pTocGenInput->Release();
pTocGenInput = NULL;
}
pTocGenPins->Release();
pTocGenPins = NULL;
}
pSourceBase->Release();
pSourceBase = NULL;
}
}
pTocGeneratorBase->Release();
pTocGeneratorBase = NULL;
}
return hr;
}
See Also
Generating a Table of Contents Automatically
Send comments about this topic to Microsoft
Build date: 4/7/2010