public void DoTests()
        {
            int hr;

            int            x;
            CreateDevEnum  cde     = new CreateDevEnum();
            ICreateDevEnum devEnum = cde as ICreateDevEnum;
            IEnumMoniker   em;

            IMoniker[] monikers = new IMoniker[5];
            IntPtr     p        = Marshal.AllocCoTaskMem(4);

            try
            {
                hr = devEnum.CreateClassEnumerator(FilterCategory.ActiveMovieCategories, out em, CDef.None);
                DsError.ThrowExceptionForHR(hr);

                hr = em.Next(monikers.Length, monikers, p);
                DsError.ThrowExceptionForHR(hr);

                x = Marshal.ReadInt32(p);
            }
            finally
            {
                Marshal.FreeCoTaskMem(p);
            }

            Debug.Assert(x > 0, "CreateClassEnumerator");
        }
Beispiel #2
0
        public static List <FilterProps> GetAllFilters()
        {
            List <FilterProps> list = new List <FilterProps>();

            try
            {
                Application.UseWaitCursor = true;
                Cursor.Current            = Cursors.WaitCursor;
                ICreateDevEnum devenum = new CreateDevEnum() as ICreateDevEnum;
                foreach (KeyValuePair <string, Guid> p in catguids)
                {
                    Guid cg = p.Value;
                    if (dmo_cats.ContainsKey(p.Key))
                    {
                        list.AddRange(GetDMOFilters(p.Key));
                    }
                    else
                    if (cg != FilterCategory.ActiveMovieCategories)
                    {
                        IEnumMoniker emon;
                        int          hr = devenum.CreateClassEnumerator(cg, out emon, 0);
                        if (hr >= 0)
                        {
                            list.AddRange(GetFiltersFromEnum(emon, cg));
                        }
                    }
                }
            }
            finally
            {
                Cursor.Current            = Cursors.Default;
                Application.UseWaitCursor = false;
            }
            return(list);
        }
Beispiel #3
0
        public static List <FilterProps> GetFiltersOfCategory(string cat_name)
        {
            if (dmo_cats.ContainsKey(cat_name))
            {
                return(GetDMOFilters(cat_name));
            }
            ICreateDevEnum devenum = new CreateDevEnum() as ICreateDevEnum;
            IEnumMoniker   emon;
            Guid           cg = catguids[cat_name];
            int            hr = devenum.CreateClassEnumerator(cg, out emon, 0);

            if (hr < 0)
            {
                return(new List <FilterProps>());
            }
            return(GetFiltersFromEnum(emon, cg));
        }
Beispiel #4
0
        public static IBaseFilter CreateCaptureDevice(Guid filterCategory, string captureDeviceName)
        {
            // FilterCategory.VideoInputDevice, FilterCategory.AudioInputDevice

            ICreateDevEnum devEnum = null;
            IEnumMoniker   enumCat = null;

            IMoniker[] moniker = new IMoniker[1] {
                null
            };
            IPropertyBag propBag = null;

            int hr = 0;

            try
            {
                devEnum = new CreateDevEnum() as ICreateDevEnum;
                if (devEnum == null)
                {
                    throw new COMException("Cannot create CLSID_SystemDeviceEnum");
                }

                // Obtain enumerator for the capture category.
                hr = devEnum.CreateClassEnumerator(filterCategory, out enumCat, 0);
                DsError.ThrowExceptionForHR(hr);

                if (enumCat == null)
                {
                    return(null);
                }

                // Enumerate the monikers.
                IntPtr fetchedCount = new IntPtr(0);
                while (0 == enumCat.Next(1, moniker, fetchedCount))
                {
                    Guid   bagId = typeof(IPropertyBag).GUID;
                    object bagObj;
                    moniker[0].BindToStorage(null, null, ref bagId, out bagObj);

                    propBag = bagObj as IPropertyBag;

                    if (propBag != null)
                    {
                        object val;
                        string friendlyName = null;
                        string displayName  = null;

                        hr = propBag.Read("FriendlyName", out val, null);
                        if (hr == 0)
                        {
                            friendlyName = val as string;
                        }

                        Util.ReleaseComObject(ref propBag);

                        moniker[0].GetDisplayName(null, null, out displayName);

                        // create an instance of the filter
                        Guid   baseFilterId = typeof(IBaseFilter).GUID;
                        object filter;
                        try
                        {
                            moniker[0].BindToObject(null, null, ref baseFilterId, out filter);
                            if (filter != null)
                            {
                                if ((captureDeviceName == null) || (captureDeviceName == friendlyName))
                                {
                                    return(filter as IBaseFilter);
                                }

                                Util.ReleaseComObject(ref filter);
                            }
                        }
                        catch
                        {
                            System.Diagnostics.Trace.WriteLine("Cannot use input device " + friendlyName);
                        }
                    } // if IPropertyBag

                    Util.ReleaseComObject(ref moniker[0]);
                } // while enum devices
            }
            catch (COMException ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.ToString());
            }
            finally
            {
                Util.ReleaseComObject(ref propBag);
                Util.ReleaseComObject(ref moniker[0]);
                Util.ReleaseComObject(ref enumCat);
                Util.ReleaseComObject(ref devEnum);
            }

            return(null);
        } // EnumInputDev
Beispiel #5
0
        void EnumInputDev(Guid filterCategory, ComboBox list)
        {
            if (list == null)
            {
                return;
            }

            ICreateDevEnum devEnum = null;
            IEnumMoniker   enumCat = null;

            IMoniker[] moniker = new IMoniker[1] {
                null
            };
            IPropertyBag propBag = null;

            int hr = 0;

            try
            {
                devEnum = new CreateDevEnum() as ICreateDevEnum;
                if (devEnum == null)
                {
                    throw new COMException("Cannot create CLSID_SystemDeviceEnum");
                }

                // Obtain enumerator for the capture category.
                hr = devEnum.CreateClassEnumerator(filterCategory, out enumCat, 0);
                DsError.ThrowExceptionForHR(hr);

                if (enumCat == null)
                {
                    if (filterCategory == FilterCategory.AudioInputDevice)
                    {
                        MessageBox.Show("No audio devices found");
                    }
                    else if (filterCategory == FilterCategory.VideoInputDevice)
                    {
                        MessageBox.Show("No video devices found");
                    }

                    return;
                }

                // Enumerate the monikers.
                IntPtr fetchedCount = new IntPtr(0);
                while (0 == enumCat.Next(1, moniker, fetchedCount))
                {
                    Guid   bagId = typeof(IPropertyBag).GUID;
                    object bagObj;
                    moniker[0].BindToStorage(null, null, ref bagId, out bagObj);

                    propBag = bagObj as IPropertyBag;

                    if (propBag != null)
                    {
                        object val;
                        string friendlyName = null;
                        string displayName  = null;

                        hr = propBag.Read("FriendlyName", out val, null);
                        if (hr == 0)
                        {
                            friendlyName = val as string;
                        }
                        Util.ReleaseComObject(ref propBag);

                        moniker[0].GetDisplayName(null, null, out displayName);

                        // create an instance of the filter
                        Guid   baseFilterId = typeof(IBaseFilter).GUID;
                        object filter;
                        bool   addFilter = false;
                        try
                        {
                            moniker[0].BindToObject(null, null, ref baseFilterId, out filter);
                            if (filter != null)
                            {
                                addFilter = true;
                                Util.ReleaseComObject(ref filter);
                            }
                        }
                        catch
                        {
                            System.Diagnostics.Trace.WriteLine("Cannot use input device " + friendlyName);
                        }

                        if (addFilter == true &&
                            friendlyName != null &&
                            displayName != null)
                        {
                            DevItem fi = new DevItem(friendlyName, displayName);
                            list.Items.Add(fi);
                        }
                    } // if IPropertyBag

                    Util.ReleaseComObject(ref moniker[0]);
                } // while enum devices
            }
            catch (COMException ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                Util.ReleaseComObject(ref propBag);
                Util.ReleaseComObject(ref moniker[0]);
                Util.ReleaseComObject(ref enumCat);
                Util.ReleaseComObject(ref devEnum);
            }
        } // EnumInputDev
Beispiel #6
0
        public void RefreshCategories()
        {
            object old_selection = catcombo.SelectedItem;

            //clear values
            catcombo.Items.Clear();
            catnames.Clear();
            catguids.Clear();
            all_filters = null;

            try
            {
                //fill catnames dictionary (guid_string => category_name)
                ICreateDevEnum devenum = new CreateDevEnum() as ICreateDevEnum;
                IEnumMoniker   emon;
                int            hr = devenum.CreateClassEnumerator(FilterCategory.ActiveMovieCategories, out emon, 0);

                if (0 == hr)
                {
                    IMoniker[] mon = new IMoniker[1];
                    while (0 == emon.Next(1, mon, IntPtr.Zero))
                    {
                        string name;
                        mon[0].GetDisplayName(null, null, out name);
                        string sg = name.Substring(name.Length - 38, 38).ToUpperInvariant();

                        object bagObj;
                        Guid   propertyBagId = typeof(IPropertyBag).GUID;
                        mon[0].BindToStorage(null, null, ref propertyBagId, out bagObj);
                        IPropertyBag bag = (IPropertyBag)bagObj;
                        object       nameObj;
                        bag.Read("FriendlyName", out nameObj, null);
                        name = nameObj as string;
                        if (!catnames.ContainsKey(sg))
                        {
                            catnames.Add(sg, name);
                        }

                        Marshal.ReleaseComObject(bagObj);
                        Marshal.ReleaseComObject(mon[0]);
                    }
                }
            }
            catch (COMException e)
            {
                Graph.ShowCOMException(e, "Can't enumerate filter categories");
                return;
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message, "Can't enumerate filter categories");
                return;
            }

            Type ty = typeof(Application);

            Addcat(FilterCategory.ActiveMovieCategories, "ActiveMovieCategories");
            Addcat(FilterCategory.AMKSAudio, "KS Audio");
            Addcat(FilterCategory.AMKSCapture, "KS Capture");
            Addcat(FilterCategory.AMKSCrossbar, "KS Crossbar");
            Addcat(FilterCategory.AMKSDataCompressor, "KS Data Compressor");
            Addcat(FilterCategory.AMKSRender, "KS Render");
            Addcat(FilterCategory.AMKSSplitter, "KS Splitter");
            Addcat(FilterCategory.AMKSTVAudio, "KS TV Audio");
            Addcat(FilterCategory.AMKSTVTuner, "KS TV Tuner");
            Addcat(FilterCategory.AMKSVBICodec, "KS VBI Codec");
            Addcat(FilterCategory.AMKSVideo, "KS Video");
            Addcat(FilterCategory.AudioCompressorCategory, "Audio Compressors");
            Addcat(FilterCategory.AudioEffects1Category, "Audio Effects 1");
            Addcat(FilterCategory.AudioEffects2Category, "Audio Effects 2");
            Addcat(FilterCategory.AudioInputDevice, "Audio Input Devices");
            Addcat(FilterCategory.AudioRendererCategory, "Audio Renderers");
            Addcat(FilterCategory.BDANetworkProvidersCategory, "BDA Network Providers");
            Addcat(FilterCategory.BDAReceiverComponentsCategory, "BDA Receiver Components");
            Addcat(FilterCategory.BDARenderingFiltersCategory, "BDA Rendering Filters");
            Addcat(FilterCategory.BDASourceFiltersCategory, "BDA Source Filters");
            Addcat(FilterCategory.BDATransportInformationRenderersCategory, "BDA Transport Information Renderers");
            Addcat(FilterCategory.CPCAFiltersCategory, "CPCA Filters");
            Addcat(FilterCategory.DeviceControlCategory, "Device Controls");
            Addcat(FilterCategory.DMOFilterCategory, "DMO Filters");
            Addcat(FilterCategory.KSAudioDevice, "KS Audio Devices");
            Addcat(FilterCategory.KSCommunicationsTransform, "KS Communications Transforms");
            Addcat(FilterCategory.KSDataDecompressor, "KS Data Decompressors");
            Addcat(FilterCategory.KSDataTransform, "KS Data Transforms");
            Addcat(FilterCategory.KSInterfaceTransform, "KS Interface Transforms");
            Addcat(FilterCategory.KSMixer, "KS Mixers");
            Addcat(FilterCategory.LegacyAmFilterCategory, "DirectShow Filters"); //
            Addcat(FilterCategory.LTMMVideoProcessors, "LTMM Video Processors");
            Addcat(FilterCategory.MediaEncoderCategory, "Media Encoders");
            Addcat(FilterCategory.MediaMultiplexerCategory, "Media Multiplexers");
            Addcat(FilterCategory.MidiRendererCategory, "Midi Renderers");
            Addcat(FilterCategory.TransmitCategory, "Transmits");
            Addcat(FilterCategory.VideoCompressorCategory, "Video Compressors");
            Addcat(FilterCategory.VideoEffects1Category, "Video Effects 1");
            Addcat(FilterCategory.VideoEffects2Category, "Video Effects 2");
            Addcat(FilterCategory.VideoInputDevice, "Video Input Devices");
            Addcat(FilterCategory.WDMStreamingEncoderDevices, "WDM Streaming Encoder Devices");
            Addcat(FilterCategory.WDMStreamingMultiplexerDevices, "WDM Streaming Multiplexer Devices");

            foreach (KeyValuePair <string, Guid> p in dmo_cats)
            {
                Addcat(p.Value, p.Key);
            }

            //fill combo box and remember guids
            foreach (KeyValuePair <string, string> p in catnames)
            {
                Guid guid = new Guid(p.Key);
                if (!catguids.ContainsKey(p.Value))
                {
                    catguids.Add(p.Value, guid);
                }
                catcombo.Items.Add(p.Value);
            }

            RegistryChecker rch = new RegistryChecker();

            RegistryChecker.CalcDays(ty);
            catcombo.SelectedItem = old_selection ?? catnames[Graph.GuidToString(FilterCategory.LegacyAmFilterCategory)];
        }