public DvdSource(DvdSourceFilter dvdSourceFilter, IGraphBuilder graph, string filename)
            {
                m_Filter   = dvdSourceFilter.CreateInstance();
                m_Splitter = (IBaseFilter) new LavSplitter();

                var sourceFilter = (IFileSourceFilter)m_Filter;

                DsError.ThrowExceptionForHR(sourceFilter.Load(filename, null));

                DsError.ThrowExceptionForHR(graph.AddFilter(m_Filter, "DVD Source Filter"));
                DsError.ThrowExceptionForHR(graph.AddFilter(m_Splitter, "LAV Splitter"));

                var outpins = GetPins(m_Filter, "Output");

                ConnectPins(graph, outpins[0], m_Splitter, "Input");
                VideoOutputPin     = DsFindPin.ByName(m_Splitter, "Video");
                AudioOutputPin     = DsFindPin.ByName(m_Splitter, "Audio");
                SubtitleOutputPins = GetPins(m_Splitter, "Subtitle");

                ExtendedSeeking      = (IAMExtendedSeeking)m_Splitter;
                VideoStreamSelect    = (IAMStreamSelect)m_Splitter;
                AudioStreamSelect    = (IAMStreamSelect)m_Splitter;
                SubtitleStreamSelect = null;
            }
        public override void Initialize()
        {
            m_DvdSourceFilter = new DvdSourceFilter();

            Media.Loading += OnMediaLoading;
        }