DirectShow中Pull模式下的代码执行流程

刚刚弄明白了Dshow中在pull模式下程序执行的整个流程。整理一下,做个笔记。有些可能没有完全弄透,以后慢慢在补充。

废话少说,直接进入正题。

第一步, 客户程序 取得Filter Graph Manager对象和接口,构建 Filter Graph。 举例,包含一个Source Filter(pSource). 后面是Parse

fielter(pParse, 后面是 Render Filter(pRender); 构建后连接好各个PIN。这里过程不表。

 

第二步, 客户程序从 Filter Graph Manager 取得IMediaControl 接口,执行 Run().  程序进入filter

 

第三步,各个Filter的执行Run().在Run()中判断当前状态,如果是stop,则先 执行pause(),pause()中Filter会调用各个Pin的active()。

Pin的active()中创建并运行Pin的数据线程(CSourceStream::ThreadProc。)

 

第四步,在ThreadProc中 pSource现在开始在该线程中不断的执行DoBufferProcessingLoop把数据推给下一个Filter. 直到 m_dwParam

为 STOP,m_dwParam 是pSource的变量,pSource通过设置它来通知ThreadProc是否停止。

 

第五步,DoBufferProcessingLoop怎么把数据推给下一个Filter呢,先得到buffer,填充,然后调用与它连接下一个Filter(pParse)的

inputPin的Receive()方法, inputPin的Receive()中又会调用下一个Filter 的什么方法(没跟下去,应该是这样),直到函数返回。

 

自此整个数据流就清楚了。具体的要查看dshow的代码了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值