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"); }
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); }
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)); }
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
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
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)]; }