Directshow中的几种结构的理解与关系


总结一下,仅仅是个人理解,也不完全正确,如有错误请指正,先谢了。


接触directShow以后,发现了几种新的东西(感觉称结构也不太对,类好像也表达不了我的想法,暂且称之为东西)
IVideoWindow
IMediaControl
IMediaEventEx
IGraphBuider
Filter
Pin


有了这几种东西以后就可以构建一个播放器了。
下边先说一下每一种东西的主要功能:


1、IViedoWindow :主要是用来设置显示窗口,通常涉及的语句有这些:
hr = m_pGraphBuilder->QueryInterface(IID_IVideoWindow, (LPVOID *) &m_pVideoWindow);
hr = m_pVideoWindow->put_Owner((OAHWND)m_hVedioWindow);//m_hVeidoWindow可以是一个dlg或者之类的hwnd。
m_pVideoWindow->SetWindowPosition(x, y, w, h);
hr = m_pVideoWindow->put_WindowStyle(WS_CHILD|WS_CLIPSIBLINGS);
hr = m_pVideoWindow->put_Visible(OATRUE);


2、IMediaControl : 主要是用来控制播放的,涉及的语句有:


hr = m_pGraphBuilder->QueryInterface(IID_IMediaControl, (LPVOID *) &m_pMediaCtrl);
m_pMediaCtrl->Run();
m_pMediaCtrl->Pause();
m_pMediaCtrl->StopWhenReady();




3、IMediaEventEx : 顾名思义,和事件有关
hr = m_pGraphBuilder->QueryInterface(IID_IMediaEventEx, (LPVOID *) &m_pMediaEvent);
hr = m_pMediaEvent->SetNotifyWindow((OAHWND)m_hVedioWindow, WM_GRAPHNOTIFY, NULL);


4、IGraphBuilder : 在播放器中builder起到的作用像是一根连接线,把window,control,event,filter都连接到一起,使他们能够配合工作,所有的filter必须放在builder中,才可以连接响应的pin,部分语句列举:


CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC,IID_IFilterGraph, (LPVOID *) &m_pGraphBuilder);
m_pGraphBuilder->AddFilter((IBaseFilter*)m_pSrcFilter,L"MY SRC FILTER");
hr = m_pGraphBuilder->Connect(m_pSrcFilter->GetPin(0),m_pin);


5、filter: filter是directShow中的关键,可以用现有的也可以自己写自己的filter,filter主要有三种:source,transform,render,可以表述为:源,转换,终端,一个graph中一般至少有一个source和render,中间的转换不一定要有。
  每个filter中至少有一个pin。source一般只有输出pin,transform 一般有输出也有输入,而render一般只有输入。

6、pin:引脚,他的作用顾名思义了。引脚有输入输出之分,本着同性相斥,异性相吸的原则,输入引脚只能和输出引脚连接。再本着一夫一妻制,一个引脚若是已经连接了引脚,就不可以再连接其他的引脚了,除非断开现有连接(离婚后,再婚)。另外pin是隶属于filter的。在pin的Receive(IMediaSample *pSample)函数中,可以查看、修改、获取传输的样本。
PBYTE pbData;
 HRESULT hr = pSample->GetPointer(&pbData);
上边语句就可以获取样本数据的指向指针了。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值