Beispiel #1
0
        /// <summary>
        /// Enumerates Mediafoundation-Transforms that match the specified search criteria.
        /// </summary>
        /// <param name="category">A <see cref="Guid" /> that specifies the category of MFTs to enumerate.
        /// For a list of MFT categories, see <see cref="MFTCategories" />.</param>
        /// <param name="flags">The bitwise OR of zero or more flags from the <see cref="MFTEnumFlags" /> enumeration.</param>
        /// <param name="inputType">Specifies an input media type to match. This parameter can be <c>null</c>. If <c>null</c>, all input types are matched.</param>
        /// <param name="outputType">Specifies an output media type to match. This parameter can be <c>null</c>. If <c>null</c>, all output types are matched.</param>
        /// <returns> A <see cref="T:System.Collections.Generic.IEnumerator`1" /> that can be used to iterate through the MFTs.</returns>
        public static IEnumerable <Activate> EnumerateTransformsEx(Guid category, MFTEnumFlags flags, TRegisterTypeInformation?inputType, TRegisterTypeInformation?outputType)
        {
            if (!(Environment.OSVersion.Version.Major >= 6 && Environment.OSVersion.Version.Minor >= 1))
            {
                throw new PlatformNotSupportedException("The EnumerateTransformsEx method requires Windows 7/Windows Server 2008 R2 or above.");
            }

            IntPtr ptr;
            int    count;

            MediaFactory.TEnumEx(category, (int)flags, inputType, outputType, out ptr, out count);
            try
            {
                for (int i = 0; i < count; i++)
                {
                    var ptr0 = ptr;
                    var ptr1 = Marshal.ReadIntPtr(new IntPtr(ptr0.ToInt64() + i * Marshal.SizeOf(ptr0)));
                    yield return(new Activate(ptr1));
                }
            }
            finally
            {
                Marshal.FreeCoTaskMem(ptr);
            }
        }
Beispiel #2
0
        /// <summary>
        /// Enumerates Mediafoundation-Transforms that match the specified search criteria.
        /// </summary>
        /// <param name="category">A <see cref="Guid" /> that specifies the category of MFTs to enumerate.
        /// For a list of MFT categories, see <see cref="MFTCategories" />.</param>
        /// <param name="flags">The bitwise OR of zero or more flags from the <see cref="MFTEnumFlags" /> enumeration.</param>
        /// <param name="inputType">Specifies an input media type to match. This parameter can be <c>null</c>. If <c>null</c>, all input types are matched.</param>
        /// <param name="outputType">Specifies an output media type to match. This parameter can be <c>null</c>. If <c>null</c>, all output types are matched.</param>
        /// <returns> A <see cref="T:System.Collections.Generic.IEnumerator`1" /> that can be used to iterate through the MFTs.</returns>
        public static IEnumerable <MFActivate> EnumerateTransformsEx(Guid category, MFTEnumFlags flags, MFTRegisterTypeInfo inputType = null, MFTRegisterTypeInfo outputType = null)
        {
            if (!(Environment.OSVersion.Version.Major >= 6 && Environment.OSVersion.Version.Minor >= 1))
            {
                throw new PlatformNotSupportedException("The EnumerateTransformsEx method requires Windows 7/Windows Server 2008 R2 or above.");
            }

            IntPtr ptr;
            int    count;
            int    res = NativeMethods.MFTEnumEx(category, flags, inputType, outputType, out ptr, out count);

            try
            {
                MediaFoundationException.Try(res, "Interops", "MFTEnumEx");
                for (int i = 0; i < count; i++)
                {
                    var ptr0 = ptr;
                    var ptr1 = Marshal.ReadIntPtr(new IntPtr(ptr0.ToInt64() + i * Marshal.SizeOf(ptr0)));
                    yield return(new MFActivate(ptr1));
                }
            }
            finally
            {
                Marshal.FreeCoTaskMem(ptr);
            }
        }
Beispiel #3
0
        public const int MF_SOURCE_READER_MEDIASOURCE = unchecked ((int)0xFFFFFFFF); //pass this to mfattributes streamindex arguments

        /// <summary>
        /// </summary>
        /// <param name="category">See CSCore.MediaFoundation.MFTCategories</param>
        public static IEnumerable <MFActivate> EnumerateTransforms(Guid category, MFTEnumFlags flags)
        {
            IntPtr ptr;
            int    count;
            int    res = MFInterops.MFTEnumEx(category, flags, null, null, out ptr, out count);

            MediaFoundationException.Try(res, "Interops", "MFTEnumEx");
            for (int i = 0; i < count; i++)
            {
                var ptr0 = ptr;
                var ptr1 = Marshal.ReadIntPtr(new IntPtr(ptr0.ToInt64() + i * Marshal.SizeOf(ptr0)));
                yield return(new MFActivate(ptr1));
            }

            Marshal.FreeCoTaskMem(ptr);
        }
Beispiel #4
0
        /// <summary>
        /// Enumerates Mediafoundation-Transforms that match the specified search criteria.
        /// </summary>
        /// <param name="category">A <see cref="Guid" /> that specifies the category of MFTs to enumerate.
        /// For a list of MFT categories, see <see cref="MFTCategories" />.</param>
        /// <param name="flags">The bitwise OR of zero or more flags from the <see cref="MFTEnumFlags" /> enumeration.</param>
        /// <param name="inputType">Specifies an input media type to match. This parameter can be <c>null</c>. If <c>null</c>, all input types are matched.</param>
        /// <param name="outputType">Specifies an output media type to match. This parameter can be <c>null</c>. If <c>null</c>, all output types are matched.</param>
        /// <returns> A <see cref="T:System.Collections.Generic.IEnumerator`1" /> that can be used to iterate through the MFTs.</returns>
        public static IEnumerable<MFActivate> EnumerateTransformsEx(Guid category, MFTEnumFlags flags, MFTRegisterTypeInfo inputType = null, MFTRegisterTypeInfo outputType = null)
        {
            if(!(Environment.OSVersion.Version.Major >= 6 && Environment.OSVersion.Version.Minor >= 1))
                throw new PlatformNotSupportedException("The EnumerateTransformsEx method requires Windows 7/Windows Server 2008 R2 or above.");

            IntPtr ptr;
            int count;
            int res = NativeMethods.MFTEnumEx(category, flags, inputType, outputType, out ptr, out count);
            try
            {
                MediaFoundationException.Try(res, "Interops", "MFTEnumEx");
                for (int i = 0; i < count; i++)
                {
                    var ptr0 = ptr;
                    var ptr1 = Marshal.ReadIntPtr(new IntPtr(ptr0.ToInt64() + i * Marshal.SizeOf(ptr0)));
                    yield return new MFActivate(ptr1);
                }
            }
            finally
            {
                Marshal.FreeCoTaskMem(ptr);
            }
        }
Beispiel #5
0
 public static extern int MFTranscodeGetAudioOutputAvailableTypes(
     [In, MarshalAs(UnmanagedType.LPStruct)] Guid guidSubType,
     [In] MFTEnumFlags dwMFTFlags,
     [In] IntPtr pCodecConfig /*IMFAttributes*/,
     [Out, MarshalAs(UnmanagedType.Interface)] out IMFCollection ppAvailableTypes);
Beispiel #6
0
 public static extern int MFTEnumEx([In] Guid category, [In] MFTEnumFlags enumflags,
                                    [In] MFTRegisterTypeInfo inputtype, [In] MFTRegisterTypeInfo outputType,
                                    [Out] out IntPtr pppMftActivate, [Out] out int mftCount);
        /// <summary>
        /// </summary>
        /// <param name="category">See CSCore.MediaFoundation.MFTCategories</param>
        public static IEnumerable<MFActivate> EnumerateTransforms(Guid category, MFTEnumFlags flags)
        {
            IntPtr ptr;
            int count;
            int res = MFInterops.MFTEnumEx(category, flags, null, null, out ptr, out count);
            MediaFoundationException.Try(res, "Interops", "MFTEnumEx");
            for (int i = 0; i < count; i++)
            {
                var ptr0 = ptr;
                var ptr1 = Marshal.ReadIntPtr(new IntPtr(ptr0.ToInt64() + i * Marshal.SizeOf(ptr0)));
                yield return new MFActivate(ptr1);
            }

            Marshal.FreeCoTaskMem(ptr);
        }