0

I was wondering if anyone here knows how to enumerate the computer's currently installed DMO filters? I would like to make a application that enumerates all of the currently installed DMO filters.

I know this is possible as GraphEdit and GraphStudio next do it.

The reason I need this is that I work in a company that receives a lot of different types proprietary (CCTV) video on a daily basis. Many times the person sending me the video is not a very technical person, so I send him an app that exports all of the currently installed programs and DirectShow Filters (using "InstalledCodec"), and compare them to the ones our program uses to process that video on his computer, so that I can find the codecs and process the movie on my computer.

Now once in a while I receive a video (usually ASFs) which was processed using DMO filters, which unfortunately I found no way to enumerate them (yet).

Does anyone here have a clue on how to approach this?

Thanks ahead, -YS

Yotam S.
  • 141
  • 1
  • 11

1 Answers1

1

API DMOEnum function does exactly this:

The DMOEnum function enumerates DMOs listed in the registry. The caller can search by category, media type, or both.

To add to this, there is DMOEnum Sample on Windows SDK:

This sample application enumerates all of the DirectX Media Objects (DMOs) registered in the user's system, and displays information about them.

The sample uses the DMOEnum function and the IEnumDMO interface to enumerate the DMOs. It uses the IMediaObject interface and other DMO interfaces to retrieve information about each DMO.

If you want only those DMOs, which are accessible from DirectShow, you can use System Device Enumerator along with DMO category GUIDs for the enumeration:

// 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);
Roman R.
  • 68,205
  • 6
  • 94
  • 158