几个有用的DirectShow Filter

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按照时间戳合成为一路视频。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值