Windows 7 下使用Graph Edit
通常,需要使用Graph Edit查看Pin的属性,只要将Directshow SDK中的 Extras\DirectShow\Utilities\ 目录下的proppage.dll 用regsvr32.exe进行注册;
上述方法在Windows 7下同样适用。但是对于Graph Edit的Connect to remote graph功能,开发文档上指明只能在Windows 2K/XP上可以使用。在网上搜了一下,下面这段能够说明为什么Windows 7下该功能无法正常使用的原因:
In Vista, the proxy/stub code used by the "remote graph" feature was moved from quartz.dll to proppage.dll. That means, on Vista you need to register the Vista SDK version of proppage.dll. But on a pre-Vista OS, do not register that version of proppage.dll, because then you’ll get the wrong proxy/stub version.
因此,在Windows 7(包括windows vista)上,需要注册在\Microsoft SDKs\Windows\v7.0\Bin\ 目录下的proppage.dll文件。之后,就能正常地使用Graph Edit查看Remote Graph。
关于AM_MEDIA_TYPE
刚入门DirectShow编程中,经常遇到Pin无法成功连接的情况,其中的原因基本是两个Pin的MediaType无法匹配。 因此,在此记录一下关于AM_MEDIA_TYPE的小结:
majortype:定性描述媒体类型,MEDIATYPE_Video,MEDIATYPE_Audio,MEDIATYPE_Stream;
Subtype:辅助说明。对于Video数据,可以是MEDIASUBTYPE_YUYV, MEDIASUBTYPE_YUY2, MEDIASUBTYPE_RGB24, MEDIASUBTYPE_RGB32等,对于Audio数据,可以是MEDIASUBTYPE_PCM, MEDIASUBTYPE_AC3;
formattype:指定进一步描述格式细节的数据结构类型;
pbformat:指向上述指定的数据结构的内容,包含了视频图像大小,帧率,音频采样频率,量化精度
cbformat:format数据块的字节数,在CheckMediaType()中使用。
bFixedSizeSample,bTemporalCompression,lSampleSize:可选参数! 因此在开发Filter中使用这些参数值,可能会不靠谱!
majortype,subtype,formattype都对应了GUID值,如果三个值都指定,则该媒体类型是“完全指定”的媒体类型,否则只要有一个是GUID_NULL,则为“不完全的媒体类型”。
调试MPC-HC时查看Pin的MediaType,发现配置通常是bFixedSizeSample为1,bTemporalCompression为0, lSampleSize为1的情况,而不像Mpeg4s Decoder DMO一样,lSampleSize为解码后一帧图像的字节数。 因此注意在自己开发Filter中开辟内存时,尽量避免使用lSampleSize变量,而且这里也留下一个问题,为什么在MPC-HC中,将MPC Video Decoder 输出Pin的MediaType设为lSampleSize=1,另外在网上查相关信息,貌似这种配置也比较常见,不知为何?
0 Comments.