枚举所有已安装的DMO过滤器

时间:2013-06-26 07:33:11

标签: video filter directshow asf dmo

我想知道这里是否有人知道如何枚举计算机当前安装的DMO过滤器? 我想创建一个枚举所有当前安装的DMO过滤器的应用程序。

我知道这是可能的,因为GraphEdit和GraphStudio接下来会这样做。

我需要这个的原因是我在一家公司工作,每天接收很多不同类型的专有(CCTV)视频。 很多时候,向我发送视频的人不是技术人员,因此我向他发送了一个应用程序,该应用程序导出所有当前安装的程序和DirectShow过滤器(使用“InstalledCodec”),并将它们与我们的程序用于处理的程序进行比较那个视频在他的电脑上,这样我就可以找到编解码器并在我的电脑上处理电影。

现在我偶尔会收到一个使用DMO过滤器处理的视频(通常是ASF),遗憾的是我发现没有办法枚举它们。(

这里有没有人知道如何处理这个问题?

非常感谢, -YS

1 个答案:

答案 0 :(得分:1)

API DMOEnum函数就是这样做的:

  

DMOEnum函数枚举注册表中列出的DMO。该   呼叫者可以按类别,媒体类型或两者进行搜索。

要添加到此,Windows SDK上有DMOEnum Sample

  

此示例应用程序枚举所有DirectX媒体对象   (DMOs)在用户的系统中注册,并显示有关的信息   它们。

     

该示例使用DMOEnum函数和IEnumDMO接口   列举DMOs。它使用IMediaObject接口和其他DMO   用于检索有关每个DMO的信息的接口。

如果您只想要可从DirectShow访问的那些DMO,您可以使用System Device Enumerator以及DMO类别GUID进行枚举:

// 57f2db8b-e6bb-4513-9d43-dcd2a6593125
DEFINE_GUID(DMOCATEGORY_AUDIO_DECODER, 0x57f2db8b,0xe6bb,0x4513,0x9d,0x43,0xdc,0xd2,0xa6,0x59,0x31,0x25);
// 33D9A761-90C8-11d0-BD43-00A0C911CE86
DEFINE_GUID(DMOCATEGORY_AUDIO_ENCODER, 0x33D9A761,0x90C8,0x11d0,0xBD,0x43,0x00,0xA0,0xC9,0x11,0xCE,0x86);
// 4a69b442-28be-4991-969c-b500adf5d8a8
DEFINE_GUID(DMOCATEGORY_VIDEO_DECODER, 0x4a69b442,0x28be,0x4991,0x96,0x9c,0xb5,0x00,0xad,0xf5,0xd8,0xa8);
// 33D9A760-90C8-11d0-BD43-00A0C911CE86
DEFINE_GUID(DMOCATEGORY_VIDEO_ENCODER, 0x33D9A760,0x90C8,0x11d0,0xBD,0x43,0x00,0xA0,0xC9,0x11,0xCE,0x86);
// f3602b3f-0592-48df-a4cd-674721e7ebeb
DEFINE_GUID(DMOCATEGORY_AUDIO_EFFECT, 0xf3602b3f,0x0592,0x48df,0xa4,0xcd,0x67,0x47,0x21,0xe7,0xeb,0xeb);
// d990ee14-776c-4723-be46-3da2f56f10b9
DEFINE_GUID(DMOCATEGORY_VIDEO_EFFECT, 0xd990ee14,0x776c,0x4723,0xbe,0x46,0x3d,0xa2,0xf5,0x6f,0x10,0xb9);
// f665aaba-3e09-4920-aa5f-219811148f09
DEFINE_GUID(DMOCATEGORY_AUDIO_CAPTURE_EFFECT, 0xf665aaba,0x3e09,0x4920,0xaa,0x5f,0x21,0x98,0x11,0x14,0x8f,0x09);