1. CLSID_InfTee
一进多出的filter,把Input Pin传过来的IMediaSample拷贝多份到Output Pin。Output Pin的个数:
- 创建时为1
- 每连接一个Output Pin,就多出一个新的
- 第n个Output Pin的名字为
sprintf(szName, "Output%d", n);
如果想先搞出n个Output Pin之后慢慢连下层filter,就请参考后文。
BTW: Tee = T,想想这个字母的形状:下面一根线,上面分叉了。
2. CLSID_SmartTee
“智能的”一进二出的filter,两个Output Pin分别叫做Capture和Preview,其中Capture的数据完全等同于Input,Preview的数据视系统资源、上下层filter流量而做适当丢弃。
这个filter大量被视频捕捉程序采用,Capture流到某个muxer,Preview流到一个小的renderer。
然而“智能”这个词的意思是你完全无法控制在什么情况下产生何等数量的丢包,我做的一个应用就会在声音采集时莫明其妙地大量丢包,搞得我最终换到了InfTee。
某些时候一个标准的Tee filter其实才是我们需要的。
3. CLSID_NullRenderer
只进不出的filter,当你需要终结一个链路,且此链路末端不需要做实际事情的时候就连上这么一个东西。
4. CLSID_Colour
全称是Color Space Convertor,如果你的filter只能处理某个色彩空间,就在前面加上这个东西,于是各种色彩空间就都不在话下了。
其实我们还需要:
1. CLSID_NullInPlace
一个什么也不做的filter,最重要的是,它不会带来任何性能损失。专为弥补InfTee的缺陷。请参考DirectShow里面的NullNullInPlace例子。
2. CLSID_Tee
前面说过,一进二出的标准filter。
3. CLSID_FrameRateKeeper
按照IMediaSample的MediaTime速率往下层filter传输数据。
4. CLSID_VideoMixer
把两个Input按照时间戳合成为一路视频。
几个有用的DirectShow Filter
最新推荐文章于 2020-08-20 14:34:09 发布