Exemplo n.º 1
0
        /// <summary>
        /// Enumerate the installed MediaFoundation transforms in the specified category
        /// </summary>
        /// <param name="category">A category from MediaFoundationTransformCategories</param>
        /// <returns></returns>
        public static IEnumerable <IMFActivate> EnumerateTransforms(Guid category)
        {
            IntPtr interfacesPointer;
            int    interfaceCount;

            MediaFoundationInterop.MFTEnumEx(category, _MFT_ENUM_FLAG.MFT_ENUM_FLAG_ALL,
                                             null, null, out interfacesPointer, out interfaceCount);
            var interfaces = new IMFActivate[interfaceCount];

            for (int n = 0; n < interfaceCount; n++)
            {
                var ptr =
                    Marshal.ReadIntPtr(new IntPtr(interfacesPointer.ToInt64() + n * Marshal.SizeOf(interfacesPointer)));
                interfaces[n] = (IMFActivate)Marshal.GetObjectForIUnknown(ptr);
            }

            foreach (var i in interfaces)
            {
                yield return(i);
            }
            Marshal.FreeCoTaskMem(interfacesPointer);
        }