DShow中,当receive不执行时,如何deliver数据

muqiuyu1988 2012-03-20 04:17:09
叙述下我的程序:
用的是push模式,filter继承自BaseFilter,不是TransformFilter.
通过InputPin的Receive()调用filter的ReceiveBuffer(),在ReceiveBuffer()中进行数据处理,之后调用Deliver()将数据传递给下游filter。
也就是说,整个过程都是靠Receive来带动程序逻辑运行的。如果说,在ReceiveBuffer()中处理完数据,马上调用Deliver()传出数据,那么就不存在困扰我的问题。
我的问题就是:Receive与Deliver是并发处理的,而接收到的数据会被保存在缓冲区中,发送数据是从缓冲区读取。一旦receive停止,而此时缓冲区中依然有数据,那么我该如何让程序调用deliver()呢?
补充一句:按照目前我的逻辑,一旦receive()不执行,那么之后的数据处理和向下游发送数据就都不能执行了。
请教各位大牛,请问怎么改善这种逻辑架构?
...全文
87 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
muqiuyu1988 2012-03-23
  • 打赏
  • 举报
回复
感谢楼上的兄弟,其实我已经知道怎么回事了,是我把问题想复杂了。
还是很感谢你提供的实例,让我能参考下。
顺便带一句,这个函数的位置在baseclasses/source.cpp,可能是用的SDK版本不同吧。
另外在refclock.cpp中也有类似的多线程参考,望对和我碰到同样问题的人有帮助。
rightorwrong 2012-03-21
  • 打赏
  • 举报
回复
看DShow.cpp中DoBufferProcessingLoop,可以自己写个线程,那样调用

2,554

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧