/// <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); } }
/// <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); } }
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); }
/// <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); } }
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);
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); }