DebugInfoFIlter -- DirectShow调试工具

 

下载地址为:http://download.csdn.net/detail/fishjam/4863202

1.  功能介绍

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所支持的所有接口

猜你喜欢

转载自blog.csdn.net/fishjam/article/details/8274363