addfilterbydisplayname

本文介绍了一个使用DirectShow的C++示例代码,展示了如何通过显示器名称添加过滤器到图表生成器中。该过程涉及创建绑定上下文、解析显示名称、获取对象并将其添加到图表中。
Code:
  1. BOOL AddFilterByDisplayName(IGraphBuilder *pGraph, WCHAR *wszDisplayName,LPCWSTR wszName,   
  2. IBaseFilter **ppF)    
  3. {   
  4.   
  5.   
  6. HRESULT hr;   
  7. IMoniker *pMoniker=NULL;   
  8.   
  9. if(!pGraph)   
  10. return FALSE;    
  11.   
  12. IBaseFilter *pF=0;   
  13.   
  14.   
  15. IBindCtx *pBindCtx;   
  16.   
  17. hr=CreateBindCtx(0,&pBindCtx);   
  18. ULONG chEaten=0;   
  19. hr= MkParseDisplayName(pBindCtx,wszDisplayName,&chEaten,&pMoniker);   
  20. pBindCtx->Release();   
  21.   
  22. if(FAILED(hr))   
  23. {   
  24. return FALSE;   
  25. }   
  26.   
  27. pMoniker->AddRef();   
  28.   
  29. hr = pMoniker->BindToObject(0, 0, IID_IBaseFilter, (void**)&pF);   
  30. if (pF == NULL)    
  31. {   
  32. return FALSE;   
  33. }   
  34.   
  35. hr = pGraph->AddFilter(pF, wszName);   
  36. if (hr != NOERROR)   
  37. {   
  38.   
  39. return FALSE;   
  40. }   
  41. *ppF = pF;   
  42. pMoniker->Release();   
  43.   
  44. return TRUE;   
  45.   
  46. }   
  47.   
  48. 举例:   
  49. WCHAR szMon[] =L"@device:cm:{33D9A760-90C8-11D0-BD43-00A0C911CE86}//xvid"//xvid   
  50.   
  51. if(!AddFilterByDisplayName(pFilterGraph,szMon,L"MPEG4 Encoder",&gcap.pMPEG4))   
  52. {   
  53. MessageBox("Add xvid Encoder Error");   
  54. return FALSE;   
  55. }  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值