protected override void AddSourceFilter() { string sourceFilterName = GetSourceFilterName(_resourceAccessor.ResourcePathName); if (!string.IsNullOrEmpty(sourceFilterName)) { IBaseFilter sourceFilter = null; try { if (sourceFilterName == MPUrlSourceFilter.Downloader.FilterName) { _filterWrapper = FilterLoader.LoadFilterFromDll( Path.Combine(Path.GetDirectoryName(GetType().Assembly.Location), @"MPUrlSourceSplitter\MPUrlSourceSplitter.ax"), new Guid(MPUrlSourceFilter.Downloader.FilterCLSID)); sourceFilter = _filterWrapper.GetFilter(); if (sourceFilter != null) { _graphBuilder.AddFilter(sourceFilter, MPUrlSourceFilter.Downloader.FilterName); } } else { sourceFilter = FilterGraphTools.AddFilterByName(_graphBuilder, FilterCategory.LegacyAmFilterCategory, sourceFilterName); } if (sourceFilter == null) { throw new OnlineVideosException(string.Format("Could not create instance of source filter: '{0}'", sourceFilterName)); } var filterStateEx = sourceFilter as MPUrlSourceFilter.IFilterStateEx; if (filterStateEx != null) { LoadAndWaitForMPUrlSourceFilter(filterStateEx); } else { var fileSourceFilter = sourceFilter as IFileSourceFilter; if (fileSourceFilter != null) { Marshal.ThrowExceptionForHR(fileSourceFilter.Load(_resourceAccessor.ResourcePathName, null)); } else { throw new OnlineVideosException(string.Format("'{0}' does not implement IFileSourceFilter", sourceFilterName)); } } FilterGraphTools.RenderOutputPins(_graphBuilder, sourceFilter); } finally { FilterGraphTools.TryRelease(ref sourceFilter); } } else { base.AddSourceFilter(); } }
public static void AddStreamSourceFilter(string sourceFilterName, IResourceAccessor resourceAccessor, IGraphBuilder graphBuilder, out FilterFileWrapper filterWrapper) { filterWrapper = null; IBaseFilter sourceFilter = null; try { if (sourceFilterName == Utils.FilterName) { var filterPath = FileUtils.BuildAssemblyRelativePath(@"MPUrlSourceSplitter\MPUrlSourceSplitter.ax"); filterWrapper = FilterLoader.LoadFilterFromDll(filterPath, new Guid(Utils.FilterCLSID)); sourceFilter = filterWrapper.GetFilter(); if (sourceFilter != null) { graphBuilder.AddFilter(sourceFilter, Utils.FilterName); } } else { sourceFilter = FilterGraphTools.AddFilterByName(graphBuilder, FilterCategory.LegacyAmFilterCategory, sourceFilterName); } if (sourceFilter == null) { throw new UPnPRendererExceptions(string.Format("Could not create instance of source filter: '{0}'", sourceFilterName)); } string url = resourceAccessor.ResourcePathName; var filterStateEx = sourceFilter as OnlineVideos.MPUrlSourceFilter.IFilterStateEx; if (filterStateEx != null) { LoadAndWaitForMPUrlSourceFilter(url, filterStateEx); } else { var fileSourceFilter = sourceFilter as IFileSourceFilter; if (fileSourceFilter != null) { Marshal.ThrowExceptionForHR(fileSourceFilter.Load(resourceAccessor.ResourcePathName, null)); } else { throw new UPnPRendererExceptions(string.Format("'{0}' does not implement IFileSourceFilter", sourceFilterName)); } } FilterGraphTools.RenderOutputPins(graphBuilder, sourceFilter); } finally { FilterGraphTools.TryRelease(ref sourceFilter); } }