コード例 #1
0
        /// <summary>
        /// Enumerates available filters and returns a list of <see cref="CodecInfo"/>.
        /// </summary>
        /// <param name="filterCategory">GUID of filter category (<see cref="DirectShowLib.FilterCategory"/> members)></param>
        /// <returns></returns>
        public static List <CodecInfo> GetFiltersForCategory(Guid filterCategory)
        {
            List <CodecInfo> codecInfos  = new List <CodecInfo>();
            ICreateDevEnum   devEnum     = null;
            IEnumMoniker     enumMoniker = null;

            try
            {
                devEnum = (ICreateDevEnum) new CreateDevEnum();
                int catResult = devEnum.CreateClassEnumerator(filterCategory, out enumMoniker, CDef.None);
                if (catResult == 0)
                {
                    IMoniker[] moniker = new IMoniker[1];
                    while (enumMoniker.Next(1, moniker, IntPtr.Zero) == 0)
                    {
                        string    filterName    = FilterGraphTools.GetFriendlyName(moniker[0]);
                        Guid      filterClassId = FilterGraphTools.GetCLSID(moniker[0]);
                        CodecInfo codecInfo     = new CodecInfo(filterName, filterClassId);
                        codecInfos.Add(codecInfo);

                        FilterGraphTools.TryRelease(ref moniker[0]);
                    }
                }
                codecInfos.Sort();
                return(codecInfos);
            }
            finally
            {
                FilterGraphTools.TryRelease(ref enumMoniker);
                FilterGraphTools.TryRelease(ref devEnum);
            }
        }
コード例 #2
0
        /// <summary>
        /// Gets a list of DirectShow filter names that accept the passed MediaType/MediaSubType and output the passed MediaType/MediaSubType.
        /// </summary>
        /// <param name="inputMediaAndSubTypes">Array of MediaType/MediaSubType</param>
        /// <param name="outputMediaAndSubTypes">Array of MediaType/MediaSubType</param>
        /// <param name="merit"></param>
        /// <returns>List of names</returns>
        public static List <CodecInfo> GetFilters(Guid[] inputMediaAndSubTypes, Guid[] outputMediaAndSubTypes, Merit merit)
        {
            List <CodecInfo> filters     = new List <CodecInfo>();
            IEnumMoniker     enumMoniker = null;

            IMoniker[]     moniker = new IMoniker[1];
            IFilterMapper2 mapper  = (IFilterMapper2) new FilterMapper2();

            try
            {
                mapper.EnumMatchingFilters(
                    out enumMoniker,
                    0,
                    true,
                    merit,
                    true,
                    inputMediaAndSubTypes.Length,
                    inputMediaAndSubTypes,
                    null,
                    null,
                    false,
                    true,
                    outputMediaAndSubTypes.Length,
                    outputMediaAndSubTypes,
                    null,
                    null);
                do
                {
                    try { enumMoniker.Next(1, moniker, IntPtr.Zero); }
                    catch { }

                    if ((moniker[0] == null))
                    {
                        break;
                    }

                    string    filterName    = FilterGraphTools.GetFriendlyName(moniker[0]);
                    Guid      filterClassId = FilterGraphTools.GetCLSID(moniker[0]);
                    CodecInfo codecInfo     = new CodecInfo(filterName, filterClassId);
                    filters.Add(codecInfo);

                    FilterGraphTools.TryRelease(ref moniker[0]);
                } while (true);
                filters.Sort();
                return(filters);
            }
            finally
            {
                FilterGraphTools.TryRelease(ref enumMoniker);
                FilterGraphTools.TryRelease(ref mapper);
            }
        }