DebugInfoFIlter -- DirectShow调试工具
下载地址为:http://download.csdn.net/detail/fishjam/4863202
DirectShow中用于调试的一个Inplace Transform Filter,具有如下功能:
a. 当不起用其“Dump”功能时,对原始的Graph没有影响,但推荐只在调试时使用;
b. 能列出并动态更改前后连接的Filter采用的MediaType(参见示例1);
c. 能将流过其中的指定数据按照结构化存储的方式Dump到指定文件中,方便分析(参见示例2),个人感觉比微软Sample中的Dump好用多了;
d. 能查看当前Graph中的各个Filter的详细信息,比如名字、MediaType、Allocator、支持的接口等(参见示例3)。这个可是好东西哦,当在使用一个Filter时,至少通过其提供的接口,猜到怎么用,及应该去查什么资料了。
2. 使用示例2.1 示例1 – 动态调整连接使用的MediaType如图所示,连接 Bouncing Ball(MS Sample) => Debug Info Filter => Color SpaceConverter(必须加这个,否则VideoRender可能不支持更改后的RGB8等) => Video Render。
在Debug Info Filter 上选择属性,可以看到当前Bouncing支持的MediaType,选中一个(比如第5个RGB8),Apply后启动播放即可看到效果。
2.2 示例2 – 导出Sample数据进行分析
Graph连接还是如上,只是打开“DumpSampleToFile”的开关,并且指定从第StartIndex个Sample开始,Dump出“LimitCount”个,选择输出文件的路径。然后运行即可。Dump的结果满足微软的结构化存储规范,可以通过 docfileview (http://blog.tinybrowser.net/archives/442) 工具查看(不过说实话,想从这种二进制文件中发现问题,那对媒体文件的格式和数据需要非常清楚才行)。Dump出来的数据主要分为两类:
a. IMediaSample:: GetPointer获取的数据,即Data部分;
b. IMediaSample的各种属性,其内容为如下结构体
structMediaSampleProperty
{
BOOL IsSyncPoint;
BOOL IsPreroll;
BOOL IsDiscontinuity;
LONG Size;
LONG ActualDataLength;
LONGLONG MediaTimeStart;
LONGLONG MediaTimeEnd;
REFERENCE_TIME TimeStart;
REFERENCE_TIME TimeEnd;
};
2.3 示例3 – 查看Graph中各个Filer的信息
这个就简单了,直接切换到“Graph Info”属性页即可。为了列出尽可能多的接口,我将Render换成了WinXP默认的VMR,从中可以看到Render至少支持[f1] 22个接口,其Input Pin至少支持8个接口。
[f1]说明:采用了遍历已知接口的方式来查询接口,因此列出的接口都是能QueryInterface到的,但不保证是该Filter或Pin所支持的所有接口