Filter的使用问答

在GraphEdit中,你可以在DirectShow Filters目录中找到这个Filter,它的名字为“Fitler Tracer”。下面,笔者就以问答的方式介绍一下这个Filter的使用。


1.    如何使用这个Filter?

答:运行GraphEdit,首先构建好你的Filter Graph链路。然后,加入“Filter Tracer” Filter,并将其接入到Filter链路的适当位置或保持其未连接状态。打开Filter的属性页进行操作即可。


2.    如何查看Filter Graph中的所有Filter的状态?

答:加入“Filter Tracer” Filter并打开其属性页,在“Graph Info”页中,你可以看到列出的当前Filter Graph中的所有Filter。在“Filter”组合框中,选择一个你想查看的Filter。于是,下面就列出了这个Filter的所有的Pin,以及每个Pin对应的当前的(如果Pin处于连接成功状态)或所有支持的Mediatype(如果Pin处于断开状态)。


3.    如何知道Filter是否进行了正确的连接?

答:一般在“Graph Info”页中查看当前Filter的连接Mediatype:看Majortype、Subtype和Formattype是否正确;查看“Format Details”中描述的信息是否与你期望的一样。通过选择单选框“Text”或“Hex”,你可以看到“Format Details”的两种不同形式。


4.    如何方面地得到指定Filter的CLSID?

答:在Filter Graph中加入你想要查看的那个Filter,然后在“Filter Tracer”的“Graph Info”页中选中这个Filter,在属性页的最下面“Filter CLSID”中便可以看到这个Filter的Friendly Name和CLSID。双击字符串,通过右键菜单可以将CLSID拷贝到剪贴板中。


5.    如何在“Filter Tracer”的属性页中直接打开指定Filter的属性页?

答:在“Graph Info”页中选中某Filter,然后直接点击“Filter”组合框右侧的“…”按钮。


6.    如何将Filter Graph的某条链路阻塞?

答:加入“Filter Tracer”Filter接入这条Filter链路,打开其属性页,在“Filter Tracer”页中,将“Receive”多选框打上勾。注意:在你停止Filter Graph之前,务必取消阻塞状态。


7.    如何在Filter传送Sample时去掉时间戳?

答:加入“Filter Tracer”Filter接入这条Filter链路,在“Filter Tracer”页中,将“TStamp”多选框打上勾。于是,Sample到达Renderer时会直接播放。


8.    如何将Quality Control的Notify断掉?

答:加入“Filter Tracer”Filter接入这条Filter链路。在“Filter Tracer”页中,将“Notify”多选框打上勾。于是,Renderer Filter发送的通知就不会沿着这条链路达到Source filter了。


9.    如何将Mediaseeking链路断开?

答:大家知道,Filter Graph Manager从Renderer filter开始一级一级往上申请的到Mediaseeking接口。我们要将这个申请链路断开,只需将“Filter Tracer”Filter接入这条Filter链路,并且在“Filter Tracer”页中将“MSeeking”多选框打上勾。


10.    我想让Filter Graph传送Sample一个一个交互进行,怎么办?

答:加入“Filter Tracer”Filter并将其接入,在“Filter Tracer”页中将“StepSample”多选框打上勾。运行Filter Graph,每次按下“Feature Diagnosing”组的“StepSample”按钮即可完成当前一个Sample的传送。注意:务必在停止Filter Graph之前取消“StepSample”状态。


11.    如何将Sample的裸数据写到文件中?

答:在“Filter Tracer”页中将“Get Sample Data”多选框打上勾。


12.    如何将每个Sample的属性信息写到文件中?

答:在“Filter Tracer”页中将“Get Sample Info”多选框打上勾。


13.    如何将当前连接的Format二进制数据写到文件中?

答:在“Filter Tracer”页中将“Get Media Format”多选框打上勾。


14.    如何统计整个链路回放实际的帧率?

答:在“Filter Tracer”页中将“Get Frame Rate”多选框打上勾。运行Filter Graph,运行的时间越久,统计的帧率越精确。


15.    如何将某个Sample的数据写成一个BMP文件?

答:请先在“Filter Tracer”页中将“Write a BMP File”多选框打上勾,然后将“Filter Tracer”Filter接入,一般在“Video Renderer”的前一个位置。注意,此时“Filter Tracer”Filter只接受RGB24或RGB32的Mediatype。另外,在“No.”后面可以指定将第几个Sample写到文件中去。


16.    如何对Filter Graph的Mediaseeking接口进行测试?

答:将“Filter Tracer”Filter接入,在其“Filter Tracer”属性页的“Feature Diagnosing”组中点击“Get_Pos”按钮:通过“Filter Tracer”Filter的Input Pin取得ImediaSeeking接口获取当前位置;“Reset_Pos”按钮:通过“Filter Tracer”Filter的Input Pin取得ImediaSeeking接口并调用“SetPosition”方法;“Reset_Graph”按钮:通过Filter Graph Manager的ImediaSeeking接口调用“SetPosition”方法。


17.    如何实时监测每一个传送的Sample?

答:将“Filter Tracer”Filter接入适当的位置,运行Filter Graph,你就可以看到一个监视窗口。在这个监视窗口中,你可以看到Filter Graph运行的系统时间,每个Sample的起讫时间,Sample传送的个数、进度等信息。你同样可以通过监视窗口的右键菜单实现一些控制,比如运行、暂停、停止Filter Graph,调整Sample的传送速度等等。


18.    如何往当前Filter Graph中加入一个其他Filter?

答:有时候,我们仅需要“Filter Tracer”Filter打印一些信息,最后面的Renderer filter可以接一个“Null Renderer”什么也不做。你只需要在“Filter Tracer”属性页中“Tools”组中,点击“Add”按钮。


19.    如何修改指定Filter的“Merit”值?

答:在“Filter Tracer”属性页中“Tools”组中,首先在“Filter CLSID”输入指定的Filter,然后点击“Get”按钮,读出了这个Filter注册的Friendly Name和现有的Merit值。你可以修改这个“Merit”值,并点击“Set”按钮进行设置。


20.    在Filter Graph中某个Filter的一个Output Pin支持很多种Mediatype,但是我只想用其中某一种进行连接,怎么办?
答:将“Filter Tracer”Filter接入到这个Filter的后面,打开属性页,在“MyOutput”页中,可以看到所有的Mediatype,选择其中一种,按下“Apply”。然后再将“Filter Tracer”Filter的Output Pin往下连接即可。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值