DirectShow编程(3.8) - 关于DirectShow - 插件发布者(Plug-in Distributors)
来源:互联网 发布:艺动网络ceo 编辑:程序博客网 时间:2024/05/17 09:14
http://write.blog.csdn.net/postedit
3.8. 插件发布者(Plug-in Distributors)
Plug-in Distributors(PIDs)是扩展filter graph manager的一种方法。一个PID是filter graph manager在运行时聚合的一个COM对象。应用程序通过filter graph manager来进入PID。
当filter graph manager被要求查询一个它不支持的接口时,它会搜索注册表项:
HKEY_CLASSES_ROOT/Interface/IID/Distributor
IID是接口的GUID,如果注册项存在,那么键值便是支持该接口的PID类标识(CLSID)。filter graph manager聚合了PID并返回接口指针,应用程序调用这个指针时实际上就是在调用PID,但是这对于应用程序来说是透明的,对于应用程序来说,它就象 是在filter graph manager上调用这个接口一样。
PID为应用程序提供了一种简单的控制filter的方法,如通过调用IFilterGraph::EnumFilters方法,PID可以枚举graph中的所有filter并调用这些filter上的方法。
当filter graph manager聚合了一个PID时,它查询PID的IDistributorNotify接口,如果PID支持这个接口,filter graph manager用它来通知PID有关graph的状态变化:
* 当filter graph在run、pause和stop状态之间切换时,它调用IDistributorNotify::Run,IDistributorNotify::Pause或IDistributorNotify::Stop。
* 如果调置了参考时钟,filter graph manager调用IDistributorNotify::SetSyncSource。
* 当有filter添加或移除,或pin连接有变化时,filter graph manager调用IDistributorNotify::NotifyGraphChange。
当自己定制PID时,自己所创建的COM对象必须支持聚合,并且它所支持的接口是filter graph manager本身所没有的。IDistributorNotify接口是可选的。
如果PID从filter graph manager上获得一个接口,那它必须立即release这个接口,否则会在COM对象上出现循环引用的参考计数,使得filter graph manager无法被销毁。在filter graph manager上保持一个参考计数是多余的,因为PID的生命期是由filter graph manager控制的。
因为PID是明确指定是被filter graph manager聚合使用的,因此你应该在PID的构造函数中强行检查IUnknown指针是否为NULL,如果为NULL,则返回错误码 VFW_E_NEED_OWNER。同时,为了防止其它对象聚合PID,你可以在IUnknown上查询IGraphBuilder接口,如果不行则返回 错误。
- DirectShow编程(3.8) - 关于DirectShow - 插件发布者(Plug-in Distributors)
- DirectShow编程(3.8) - 关于DirectShow - 插件发布者(Plug-in Distributors)
- DirectShow编程(3.8) - 关于DirectShow - 插件发布者(Plug-in Distributors)
- [DirectShow] 026 - Plug-in Distributors
- DirectShow编程(3.1)- 关于DirectShow - DirectShow体系概述
- DirectShow编程(3.5) - 关于DirectShow - DirectShow中的事件通告
- DirectShow编程(3.1)- 关于DirectShow - DirectShow体系概述
- DirectShow编程(3.5) - 关于DirectShow - DirectShow中的事件通告
- DirectShow编程(3.1)- 关于DirectShow - DirectShow体系概述
- DirectShow编程(3.1)- 关于DirectShow - DirectShow体系概述
- DirectShow编程(3.5) - 关于DirectShow - DirectShow中的事件通告
- DirectShow编程(3.1)- 关于DirectShow - DirectShow体系概述
- DirectShow编程(3.1)- 关于DirectShow - DirectShow体系概述
- DirectShow编程(3.5) - 关于DirectShow - DirectShow中的事件通告
- DirectShow编程(3.3)- 关于DirectShow - 构建Filter Graph
- DirectShow编程(3.4) - 关于DirectShow - Filter Graph中的数据流
- DirectShow编程(3.4) - 关于DirectShow - Filter Graph中的数据流
- DirectShow编程(3.3)- 关于DirectShow - 构建Filter Graph
- android开发 java.net.UnknownHostException:URL 异常解决办法
- linux查看系统版本(distribution && version)
- 如何防止蹭网
- java 泛型讲解
- 解决腾讯微博错误{"data":null,"errcode":-103,"msg":"check sign error","ret":3}
- DirectShow编程(3.8) - 关于DirectShow - 插件发布者(Plug-in Distributors)
- x86的控制寄存器CR0,CR1,CR2,CR3
- nor flash与nand flash介绍
- Jaguar.Yuan 的Linux驱动之行——Platform驱动框架介绍(一)
- DirectShow中常见的RGB/YUV格式
- 【转】三大UML建模工具Visio、Rational Rose、PowerDesign的区别
- 一种显示函数被调用的堆栈信息的方法
- SRM 538 450
- Merkaartor介绍