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();
            }
        }
Esempio n. 2
0
        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);
            }
        }