How to enumerate Media Foundation transforms on your system

Browse source

Download mftenum.exe

This uses MFTEnumEx to get a list of all the registered IMFTransform classes on the system.  If you’re writing a Media Foundation app, you’re likely going to use different flags than I used… see the documentation for sets of flags that match three different scenarios.

In my case I wanted as exhaustive a list of transforms as possible – so I include asynchronous MFTs, disabled MFTs, etc:

DWORD dwFlags = 0
    // enumerate all three kinds of data flow
    // include not-usually-included kinds of MFTs
    // DO NOT filter or sort the results
    // we want to include even blocked MFTs in this list

Opportunities for later improvement – I only print out the friendly name and the CLSID for each found transform.  I could add things like the MF_TRANSFORM_FLAGS_Attribute, the MF_SUPPORT_DYNAMIC_FORMAT_CHANGE attribute, the supported input types and output types, etc.  But this is good enough for now.

Output of the tool on my machine:

> MFTEnum.exe

-- Audio decoders ({9EA73FB4-EF7A-4559-8D5D-719D8F0426C7}) --
WMAudio Decoder MFT ({2EEB4ADF-4578-4D10-BCA7-BB955F56320A})
Microsoft AAC Audio Decoder MFT ({32D186A7-218F-4C75-8876-DD77273A8999})
GSM ACM Wrapper MFT ({4A76B469-7B66-4DD4-BA2D-DDF244C766DC})
WMAPro over S/PDIF MFT ({5210F8E4-B0BB-47C3-A8D9-7B2282CC79ED})
WMSpeech Decoder DMO ({874131CB-4ECC-443B-8948-746B89595D20})
G711 Wrapper MFT ({92B66080-5E2D-449E-90C4-C41F268E5514})
IMA ADPCM ACM Wrapper MFT ({A16E1BFF-A80D-48AD-AECD-A35C005685FE})
MP3 Decoder MFT ({BBEEA841-0A63-4F52-A7AB-A9B3A84ED38A})
ADPCM ACM Wrapper MFT ({CA34FE0A-5722-43AD-AF23-05F7650257DD})

-- Audio effects ({11064C48-3648-4ED0-932E-05CE8AC811B7}) --
AEC ({745057C7-F353-4F2D-A7EE-58434477730E})
Resampler MFT ({F447B69E-1884-4A7E-8055-346F74D6EDB3})

-- Audio encoders ({91C64BD0-F91E-4D8C-9276-DB248279D975}) --
WM Speech Encoder DMO ({1F1F4E1A-2252-4063-84BB-EEE75F8856D5})
WMAudio Encoder MFT ({70F598E9-F4AB-495A-99E2-A7C4D3D89ABF})
Microsoft AAC Audio Encoder MFT ({93AF0C51-2275-45D2-A35B-F2BA21CAED00})

-- Demultiplexers ({A8700A7A-939B-44C5-99D7-76226B23B3F1}) --
No IMFTransforms found.

-- Multiplexers ({059C561E-05AE-4B61-B69D-55B61EE54A7B}) --
No IMFTransforms found.

-- Miscellaneous ({90175D57-B7EA-4901-AEB3-933A8747756F}) --
No IMFTransforms found.

-- Video decoders ({D6C02D4B-6833-45B4-971A-05A4B04BAB91}) --
DV Decoder MFT ({404A6DE5-D4D6-4260-9BC7-5A6CBD882432})
Mpeg4s Decoder MFT ({5686A0D9-FE39-409F-9DFF-3FDBC849F9F5})
Microsoft H264 Video Decoder MFT ({62CE7E72-4C71-4D20-B15D-452831A87D9D})
WMV Screen decoder MFT ({7BAFB3B1-D8F4-4279-9253-27DA423108DE})
WMVideo Decoder MFT ({82D353DF-90BD-4382-8BC2-3F6192B76E34})
NVIDIA Video Decoder MFT ({ACAE6A3C-3DB0-4F71-B783-CDBD2AC6FDE8})
MJPEG Decoder MFT ({CB17E772-E1CC-4633-8450-5617AF577905})
Mpeg43 Decoder MFT ({CBA9E78B-49A3-49EA-93D4-6BCBA8C4DE07})
Mpeg4 Decoder MFT ({F371728A-6052-4D47-827C-D039335DFE0A})

-- Video effects ({12E17C21-532C-4A6E-8A1C-40825A736397}) --
Frame Rate Converter ({01F36CE2-0907-4D8B-979D-F151BE91C883})
Resizer MFT ({1EA1EA14-48F4-4054-AD1A-E8AEE10AC805})
Color Control ({798059F0-89CA-4160-B325-AEB48EFE4F9A})
Color Converter MFT ({98230571-0087-4204-B020-3282538E57D3})

-- Video encoders ({F79EAC7D-E545-4387-BDEE-D647D7BDE42A}) --
NVIDIA Video Encoder MFT ({305AFD76-ADD0-417E-AA99-3AC4FDB22B21})
H264 Encoder MFT ({6CA50344-051A-4DED-9779-A43305165E35})
WMVideo8 Encoder MFT ({7E320092-596A-41B2-BBEB-175D10504EB6})
WMVideo9 Encoder MFT ({D23B90D0-144F-46BD-841D-59E4EB19DC59})

-- Video processors ({302EA3FC-AA5F-47F9-9F7A-C2188BB16302}) --
NVIDIA Video Processor MFT ({6A8C0482-4A25-48A1-AFD1-0A7C1629352A})

-- KS data compressors ({1E84C900-7E70-11D0-A5D6-28DB04C10000}) --
No IMFTransforms found.

-- KS data decompressors ({2721AE20-7E70-11D0-A5D6-28DB04C10000}) --
No IMFTransforms found.

EDIT: the IMFAttributes::GetAllocatedString call in this app is incorrect.  I pass a NULL for the “length” output parameter.  As it turns out, this must not be NULL because the call may be marshaled out-of-proc.

One thought on “How to enumerate Media Foundation transforms on your system

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s