本文整理汇总了C++中IFilterGraph::EnumFilters方法的典型用法代码示例。如果您正苦于以下问题:C++ IFilterGraph::EnumFilters方法的具体用法?C++ IFilterGraph::EnumFilters怎么用?C++ IFilterGraph::EnumFilters使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IFilterGraph
的用法示例。
在下文中一共展示了IFilterGraph::EnumFilters方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: TryToLoadCorrectionFile
HRESULT CWavPackDSSplitter::TryToLoadCorrectionFile()
{
// Here is the nasty hacky stuff :>
HRESULT hr = S_FALSE;
IPin *pPinOutSrc = NULL;
IFileSourceFilter *pFSF = NULL;
LPOLESTR pszFileName = NULL;
IBaseFilter* pSrcFilterCorr = NULL;
IFileSourceFilter* pFSFCorr = NULL;
IEnumPins *pEnum = NULL;
IPin *pPinNew = NULL;
BOOL bCorrectionFileLoaded = FALSE;
IEnumFilters* pEnumFilers = NULL;
BOOL bSrcFileAlreadyLoaded = FALSE;
DebugLog("===> Entering CWavPackDSSplitter::TryToLoadCorrectionFile... 0x%08X", GetCurrentThreadId());
if((m_bDontTryToLoadCorrectionFileAgain == TRUE) ||
(m_pInputPinCorr == NULL) ||
(m_pInputPinCorr->IsConnected() == TRUE))
{
DebugLog("<=== Leaving CWavPackDSSplitter::TryToLoadCorrectionFile already loaded ?... 0x%08X", GetCurrentThreadId());
return hr;
}
if((m_pInputPin->m_pWavPackParser->first_wphdr.flags & HYBRID_FLAG) != HYBRID_FLAG)
{
// Not an hybrid file, don't even try
m_bDontTryToLoadCorrectionFileAgain = TRUE;
DebugLog("<=== Leaving CWavPackDSSplitter::TryToLoadCorrectionFile not hybrid... 0x%08X", GetCurrentThreadId());
return hr;
}
#define IF_FAIL_BREAK(x) if(FAILED(x)) { break; }
do {
hr = m_pInputPin->ConnectedTo(&pPinOutSrc);
IF_FAIL_BREAK(hr);
// Get a pointer on the source filter
PIN_INFO pi;
pi.pFilter = NULL;
hr = pPinOutSrc->QueryPinInfo(&pi);
IF_FAIL_BREAK(hr);
// Get source filter IFileSourceFilter interface
hr = pi.pFilter->QueryInterface(IID_IFileSourceFilter, (void **)&pFSF);
IF_FAIL_BREAK(hr);
// Get filename
hr = pFSF->GetCurFile(&pszFileName, NULL);
IF_FAIL_BREAK(hr);
// Create correction file filename
WCHAR pszFileNameC[MAX_PATH];
ZeroMemory(pszFileNameC, sizeof(WCHAR)*MAX_PATH);
int cch = lstrlenW(pszFileName);
CopyMemory(pszFileNameC, pszFileName, cch*sizeof(WCHAR));
pszFileNameC[cch] = 'c';
IFilterGraph* pFG = GetFilterGraph();
// Search in the graph in case the source filter with correction file already exist
hr = pFG->EnumFilters(&pEnumFilers);
IF_FAIL_BREAK(hr);
while(pEnumFilers->Next(1, &pSrcFilterCorr, 0) == S_OK)
{
HRESULT lhr;
lhr = pSrcFilterCorr->QueryInterface(IID_IFileSourceFilter, (void**)&pFSFCorr);
if(SUCCEEDED(lhr))
{
LPOLESTR pszFileNameCandidate = NULL;
pFSFCorr->GetCurFile(&pszFileNameCandidate, NULL);
if(memcmp(pszFileNameCandidate,pszFileNameC,(cch+1)*sizeof(WCHAR)) == 0)
{
// This is the good file
bSrcFileAlreadyLoaded = TRUE;
if(pszFileNameCandidate != NULL)
{
CoTaskMemFree(pszFileNameCandidate);
}
break;
}
if(pszFileNameCandidate != NULL)
{
CoTaskMemFree(pszFileNameCandidate);
}
}
pSrcFilterCorr->Release();
pSrcFilterCorr = NULL;
}
if(bSrcFileAlreadyLoaded == FALSE)
{
// Create new file source filter
hr = CoCreateInstance(CLSID_AsyncReader,
NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter,
(void**)&pSrcFilterCorr);
IF_FAIL_BREAK(hr);
//.........这里部分代码省略.........