- BOOL AddFilterByDisplayName(IGraphBuilder *pGraph, WCHAR *wszDisplayName,LPCWSTR wszName,
- IBaseFilter **ppF)
- {
- HRESULT hr;
- IMoniker *pMoniker=NULL;
- if(!pGraph)
- return FALSE;
- IBaseFilter *pF=0;
- IBindCtx *pBindCtx;
- hr=CreateBindCtx(0,&pBindCtx);
- ULONG chEaten=0;
- hr= MkParseDisplayName(pBindCtx,wszDisplayName,&chEaten,&pMoniker);
- pBindCtx->Release();
- if(FAILED(hr))
- {
- return FALSE;
- }
- pMoniker->AddRef();
- hr = pMoniker->BindToObject(0, 0, IID_IBaseFilter, (void**)&pF);
- if (pF == NULL)
- {
- return FALSE;
- }
- hr = pGraph->AddFilter(pF, wszName);
- if (hr != NOERROR)
- {
- return FALSE;
- }
- *ppF = pF;
- pMoniker->Release();
- return TRUE;
- }
- 举例:
- WCHAR szMon[] =L"@device:cm:{33D9A760-90C8-11D0-BD43-00A0C911CE86}//xvid"; //xvid
- if(!AddFilterByDisplayName(pFilterGraph,szMon,L"MPEG4 Encoder",&gcap.pMPEG4))
- {
- MessageBox("Add xvid Encoder Error");
- return FALSE;
- }
本文介绍了一个使用DirectShow的C++示例代码,展示了如何通过显示器名称添加过滤器到图表生成器中。该过程涉及创建绑定上下文、解析显示名称、获取对象并将其添加到图表中。

1万+

被折叠的 条评论
为什么被折叠?



