DirectShow技术介绍(长篇)-9

原创 2011年01月10日 10:21:00

 

3.8. 插件发布者(Plug-in Distributors

 

    Plug-in Distributors(PIDs)是扩展filter graph manager的一种方法。一个PIDfilter 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时,它查询PIDIDistributorNotify接口,如果PID支持这个接口,filter graph manager用它来通知PID有关graph的状态变化:

* filter graphrunpausestop状态之间切换时,它调用IDistributorNotify::Run, IDistributorNotify::PauseIDistributorNotify::Stop

* 如果调置了参考时钟,filter graph manager调用IDistributorNotify::SetSyncSource

* 当有filter添加或移除,或pin连接有变化时,filter graph manager调用IDistributorNotify::NotifyGraphChange

 

    当自己定制PID时,自己所创建的COM对象必须支持聚合,并且它所支持的接口是filter graph manager本身所没有的。IDistributorNotify接口是可选的。

    如果PIDfilter 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技术介绍(长篇)-6

3.5 DirectShow中的事件通告     这一节主要描述在directshow filter graph中事件是怎样发生的,以及应用程序如何接收事件通告并响应它们。3.5.1 概述     ...
  • bisword
  • bisword
  • 2011年01月10日 10:16
  • 766

DirectShow技术介绍(长篇)-5

3.4. Filter Graph中的数据流     这一节主要描述媒体数据是如何在filter graph中流动的。如果你只是为了编写DirectShow应用程序,你不需要知道这些细节,当然,知道...
  • bisword
  • bisword
  • 2011年01月10日 10:12
  • 805

DirectShow技术介绍(长篇)-1

DirectShow 用于控制多媒体数据流;它可以在运行时允许用户播放数字电影和对不同格式的声音进行解码,包括MPEG-1。这种播放性能可以让音视频卡支持Microsoft DirectX?的API,...
  • bisword
  • bisword
  • 2011年01月10日 10:05
  • 2496

DirectShow技术介绍(长篇)-2

2. 开始DirectShow旅程     这个章节的内容主要是编写DirectShow应用所需的一些基本概念,可以把它当作一个高级介绍,理解这些内容只需具备一般的编程和有关多媒体的知识。2.1. 设...
  • bisword
  • bisword
  • 2011年01月10日 10:06
  • 1152

DirectShow技术介绍(长篇)-8

3.7. Graph动态重建(Dynamic Graph Building)     如果你需要修改一个已经存在的filter graph,你可以停止,修改后再重新启动它。这通常是一种最佳的解决方法...
  • bisword
  • bisword
  • 2011年01月10日 10:20
  • 873

DirectShow技术介绍(长篇)-7

3.6. DirectShow中的时间和时钟     这一节主要概述DirectShow体系中时间和时钟。3.6.1. 参考时钟     Filter Graph Manager的一个功能,能够以同...
  • bisword
  • bisword
  • 2011年01月10日 10:17
  • 953

DirectShow技术介绍(长篇)-4

3.3. 构建Filter Graph3.3.1. 用于构建Graph的组件     DirectShow提供了一系列用于构建filter graph的组件,包括:    *Filter Grap...
  • bisword
  • bisword
  • 2011年01月10日 10:11
  • 805

DirectShow技术介绍(长篇)-3

3.2.5. 硬件如何参与Filter Graph     这一节描述了DirectShow如何与音频和视频硬件交互。         外壳filter(Wrapper Filter)     所...
  • bisword
  • bisword
  • 2011年01月10日 10:09
  • 1184

DirectShow9和QuickTime6.5或更高版本

安装过Flash 8 后,我们使用Flash 8 Video Encoder制作flv格式的文件,它会提示需要安装DirectShow9和QuickTime6.5或更高版本。 但是这两个文件并不太容...
  • changqiang08
  • changqiang08
  • 2012年08月23日 09:01
  • 1241

对一篇很长的文章做到完美的分页输出

利用统计文章字数,然后达到一定字数就截断输出,但是分页的内容就会在莫名其妙的地方截断,不是很友好。很简单,在要截断的地方附近找下面的符号:;’”?。!;".!如果后面存在或就分页。主要是要研究文章的格...
  • cn2004
  • cn2004
  • 2004年11月19日 01:54
  • 691
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DirectShow技术介绍(长篇)-9
举报原因:
原因补充:

(最多只允许输入30个字)