public static void RemoveAllFilters() { int hr = 0; DirectShowLib.IEnumFilters enumFilters; System.Collections.ArrayList filtersArray = new System.Collections.ArrayList(); hr = graph.EnumFilters(out enumFilters); DsError.ThrowExceptionForHR(hr); DirectShowLib.IBaseFilter[] filters = new DirectShowLib.IBaseFilter[1]; int fetched; while (enumFilters.Next(filters.Length, filters, out fetched) == 0) { filtersArray.Add(filters[0]); } foreach (DirectShowLib.IBaseFilter filter in filtersArray) { hr = graph.RemoveFilter(filter); while (System.Runtime.InteropServices.Marshal.ReleaseComObject(filter) > 0) { ; } } }
private List <SelectableMediaStream> GetStreams() { var streams = new List <SelectableMediaStream>(); IEnumFilters enumFilters; var hr = m_graph.EnumFilters(out enumFilters); DsError.ThrowExceptionForHR(hr); var filters = new DirectShowLib.IBaseFilter[1]; while (enumFilters.Next(filters.Length, filters, IntPtr.Zero) == 0) { FilterInfo filterInfo; hr = filters[0].QueryFilterInfo(out filterInfo); DsError.ThrowExceptionForHR(hr); Guid cl; filters[0].GetClassID(out cl); if (filterInfo.pGraph != null) { Marshal.ReleaseComObject(filterInfo.pGraph); } var iss = filters[0] as IAMStreamSelect; if (iss != null) { int count; hr = iss.Count(out count); DsError.ThrowExceptionForHR(hr); for (int i = 0; i < count; i++) { DirectShowLib.AMMediaType type; AMStreamSelectInfoFlags flags; int plcid, pwdGrp; // language String pzname; object ppobject, ppunk; hr = iss.Info(i, out type, out flags, out plcid, out pwdGrp, out pzname, out ppobject, out ppunk); DsError.ThrowExceptionForHR(hr); if (ppobject != null) { Marshal.ReleaseComObject(ppobject); } if (type != null) { DsUtils.FreeAMMediaType(type); } if (ppunk != null) { Marshal.ReleaseComObject(ppunk); } if (pwdGrp == 2) { if (_grp2Selector == Guid.Empty) { filters[0].GetClassID(out _grp2Selector); } var stream = new SelectableMediaStream { Index = i, Name = pzname, Type = MediaStreamType.Subtitle }; if ((AMStreamSelectInfoFlags.Enabled & flags) == AMStreamSelectInfoFlags.Enabled) { stream.IsActive = true; } streams.Add(stream); } if (pwdGrp == 1) { if (_audioSelector == Guid.Empty) { filters[0].GetClassID(out _audioSelector); } var stream = new SelectableMediaStream { Index = i, Name = pzname, Type = MediaStreamType.Audio }; if ((AMStreamSelectInfoFlags.Enabled & flags) == AMStreamSelectInfoFlags.Enabled) { stream.IsActive = true; } streams.Add(stream); } if (pwdGrp == 6590033) { if (_vobsubSelector == Guid.Empty) { filters[0].GetClassID(out _vobsubSelector); } var stream = new SelectableMediaStream { Index = i, Name = pzname, Type = MediaStreamType.Subtitle, Identifier = "Vobsub" }; if ((AMStreamSelectInfoFlags.Enabled & flags) == AMStreamSelectInfoFlags.Enabled) { stream.IsActive = true; } streams.Add(stream); } } } Marshal.ReleaseComObject(filters[0]); } Marshal.ReleaseComObject(enumFilters); return(streams); }