예제 #1
0
        public CaptureSourceDVR(StreamSourceInfo sourceConfig, OpenGraphRequest openGraphRequest)
            : base(sourceConfig, openGraphRequest)
        {
            AppLogger.Message("In CaptureSourceDVR constructor - CurrentProfile is " + CurrentProfile.Name);

            _captureFilter = AddFilterByName(FilterCategory.VideoInputDevice, sourceConfig.Description);

            _videoEncoder = AddFilterByName(FilterCategory.LegacyAmFilterCategory, "LEAD H264 Encoder (4.0)");

//            _transcoder = AddFilterByName(FilterCategory.LegacyAmFilterCategory, "LEAD H264 Transcoder");

            InitializeSink();

            ConnectFilters(_captureFilter, "Capture", _videoEncoder, "XForm In");

//            ConnectFilters(_videoEncoder, "XForm Out", _transcoder, "Input");

//            ConnectFilterToMux(_transcoder, "Output", "Input 01");

            ConnectFilterToMux(_videoEncoder, "XForm Out", "Input 01");

            ConnectMuxToSink();

            _videoEncoderControl = (ILMH264Encoder)_videoEncoder;
            _videoEncoderControl.EnableRateControl = true;
            _videoEncoderControl.BitRate           = CurrentProfile.Video.ConstantBitRate * 1024;
            _videoEncoderControl.OutputFormat      = eH264OUTPUTFORMAT.H264FORMAT_IPOD; // seems to work the best
        }
예제 #2
0
        private async Task <OpenGraphResult> GetGraphResultAsync(HttpRequest req, OpenGraphRequest openGraphRequest)
        {
            string url = openGraphRequest.Url, id = openGraphRequest.Id;

            if (!string.IsNullOrEmpty(url) && !string.IsNullOrEmpty(id))
            {
                /**
                 *  This check is a hack in support of adding our own URLs to lists. Rendered URLs return no Open Graph
                 *  metadata and deep links return HTTP 404s when hosting in Blob storage. So we skip the HTTP request.
                 */
                if (!req.Host.HasValue || !url.Contains(req.Host.Host))
                {
                    try
                    {
                        OpenGraph graph = await OpenGraph.ParseUrlAsync(url, "Urlist");

                        HtmlDocument doc = new HtmlDocument();
                        doc.LoadHtml(graph.OriginalHtml);
                        var descriptionMetaTag = doc.DocumentNode.SelectSingleNode("//meta[@name='description']");
                        var titleTag           = doc.DocumentNode.SelectSingleNode("//head/title");
                        return(new OpenGraphResult(id, graph, descriptionMetaTag, titleTag));
                    }
                    catch (Exception)
                    {
                        // Todo - Add logging
                    }
                }
            }
            return(new OpenGraphResult {
                Id = id
            });
        }
예제 #3
0
파일: SRM314.cs 프로젝트: ewin66/media
        public SRM314(StreamSourceInfo sourceConfig, OpenGraphRequest openGraphRequest)
            : base(sourceConfig, openGraphRequest)
        {
            InitializeNetworkSink();

            _currentVideoSettings = new VideoSettings();

            _crossbar      = AddFilterByName(FilterCategory.AMKSCrossbar, "Sensoray 314 Crossbar");
            _captureFilter = AddFilterByName(FilterCategory.AMKSCapture, "Sensoray 314 A/V Capture");

            //instantiate BDA VES and get reference to capture pin
            _ves           = AddFilterByName(FilterCategory.WDMStreamingEncoderDevices, "Sensoray 314 BDA MPEG VES Encoder");
            _vesCapturePin = DsFindPin.ByName(_ves, "Capture");

            //instantiate frame rate filter and get control interface
            _frameRateFilter = AddFilterByName(FilterCategory.LegacyAmFilterCategory, "FC Frame Rate Filter");
            _frameRate       = (IFCFrameRateAPI)_frameRateFilter;



            SetInputAndSystem();

            _frameRate.set_InputFramerate(15.0);

            ChangeProfile(CurrentProfile);

            ConnectFilters(_crossbar, "0: Video Decoder Out", _captureFilter, "Analog Video In", false);
            ConnectFilters(_captureFilter, "Analog ITU Video", _ves, "Analog ITU Video", false);
            // ConnectFilterToNetMux(_ves, "Capture", "Input 01");
            ConnectFilters(_ves, "Capture", _frameRateFilter, "Input", false);
            ConnectFilterToNetMux(_frameRateFilter, "Output", "Input 01");
            ConnectNetMuxToNetSnk();
        }
예제 #4
0
 public WinTV500(StreamSourceInfo sourceConfig, OpenGraphRequest openGraphRequest) : base(sourceConfig, openGraphRequest)
 {
     _captureDevice  = FindDevice(FilterCategory.AMKSCapture, @"Hauppauge WinTV PVR PCI II Capture");
     _tunerDevice    = FindDevice(FilterCategory.AMKSTVTuner, @"Hauppauge WinTV PVR PCI II TvTuner");
     _audioDevice    = FindDevice(FilterCategory.AMKSTVAudio, @"Hauppauge WinTV PVR PCI II TvAudio");
     _crossbarDevice = FindDevice(FilterCategory.AMKSCrossbar, @"Hauppauge WinTV PVR PCI II Crossbar");
     _encoderDevice  = FindDevice(FilterCategory.WDMStreamingEncoderDevices, @"Hauppauge WinTV PVR PCI II Encoder");
     CreateWinTVGraph();
 }
예제 #5
0
 public BouncingBallDVR(StreamSourceInfo sourceConfig, OpenGraphRequest openGraphRequest) : base(sourceConfig, openGraphRequest)
 {
     _captureFilter = AddFilterByName(FilterCategory.LegacyAmFilterCategory, "Bouncing Ball");
     _videoEncoder  = AddFilterByName(FilterCategory.VideoCompressorCategory, "LEAD H264 Encoder (4.0)");
     ConnectFilters(_captureFilter, "A Bouncing Ball!", _videoEncoder, "XForm In");
     ConnectFilterToMux(_videoEncoder, "XForm Out", "Input 01");
     ConnectMuxToSink();
     InitializeSink();
     this.SaveGraphFile(@"C:\Temp\balldvr.grf");
 }
예제 #6
0
        public override SessionDescription FillOutSessionDescription(OpenGraphRequest openGraphRequest)
        {
            SessionDescription sd = base.FillOutSessionDescription(openGraphRequest);

            sd.TVSessionInfo         = new TVSessionInfo();
            sd.TVSessionInfo.Channel = this.Channel;
            sd.TVSessionInfo.TVMode  = this.TVMode;
            sd.TVSessionInfo.ChannelScanInProgress = (channelScanWorker != null) ? channelScanWorker.IsBusy : false;

            return(sd);
        }
예제 #7
0
        /// <summary>
        /// Returns a session description for a given open graph request
        /// </summary>
        /// <param name="openGraphRequest">Open graph request info</param>
        /// <returns>the SessionDescription that the client will be needing to complete the connection</returns>
        public virtual SessionDescription FillOutSessionDescription(OpenGraphRequest openGraphRequest)
        {
            SessionDescription sd = new SessionDescription();

            sd.SourceName         = SourceConfig.SourceName;
            sd.ProfileGroups      = ProfileGroups;
            sd.CurrentProfileName = CurrentProfile.Name;
            sd.SinkURL            = ExpandInterfaceAddressMacro(BaseClientURL, openGraphRequest.InterfaceAddress);
            AppLogger.Message("Returning SinkURL " + sd.SinkURL);
            Debug.WriteLine("Returning SinkURL " + sd.SinkURL);
            sd.StreamTimeLimit = Convert.ToInt32(ConfigurationManager.AppSettings["StreamTimeLimit"]);

            return(sd);
        }
예제 #8
0
파일: FastVDODVR.cs 프로젝트: ewin66/media
        public FastVDODVR(StreamSourceInfo streamSourceInfo, OpenGraphRequest openGraphRequest)
            : base(streamSourceInfo, openGraphRequest)
        {
            //maximum number of retries before blowing away graph/connection
            int MaxRetries = 1;

            for (int retry = 1; retry <= MaxRetries; retry++)
            {
                try
                {
                    InitializeSmartCapture(CurrentProfile);
                    InitializeSink();
                    _captureFilter = AddFilterByName(FilterCategory.LegacyAmFilterCategory, "FastVDO-SmartCapture QBoxSplitter");
                    _transcoder    = AddFilterByName(FilterCategory.LegacyAmFilterCategory, "H.264 Byte Stream Transform");
                    AppLogger.Message("Attempting to connect capture filter (Video) to transform (XForm In)");
                    ConnectFilters(_captureFilter, "Video", _transcoder, "XForm In");
                    AppLogger.Message("Attempting to connect transform (XForm Out) to mux (Input 01)");
                    ConnectFilterToMux(_transcoder, "XForm Out", "Input 01");
                    ConnectMuxToSink();
                    break;  //this worked, so stop retrying
                }
                catch (Exception exc)
                {
                    ErrorLogger.DumpToDebug(exc);
                    if (_deviceContext != IntPtr.Zero)
                    {
                        try
                        {
                            AppLogger.Message("Resetting FVDO device");
                            NativeMethods.SCReset(_deviceContext);
                            Thread.Sleep(2000);
                        }
                        catch (Exception exc2)
                        {
                            ErrorLogger.DumpToDebug(exc2);
                        }
                    }
                    //on the last retry, give up
                    if (retry == MaxRetries)
                    {
                        this.Dispose();
                        throw;
                    }
                    else
                    {
                        CloseSmartCapture();
                    }
                }
            }
        }
예제 #9
0
        public ScreenCapture(StreamSourceInfo sourceConfig, OpenGraphRequest openGraphRequest) : base(sourceConfig, openGraphRequest)
        {
            InitializeSink();

            _captureFilter = AddFilterByName(FilterCategory.LegacyAmFilterCategory, "LEAD Screen Capture (2.0)");
            if (_captureFilter == null)
            {
                throw new Exception("screen capture filter not found");
            }
            _videoEncoder = AddFilterByName(FilterCategory.VideoCompressorCategory, "LEAD Screen Capture Encoder (2.0)");
            ConnectFilters(_captureFilter, "Capture", _videoEncoder, "XForm In");
            ConnectFilterToMux(_videoEncoder, "XForm Out", "Input 01");
            ConnectMuxToSink();
        }
예제 #10
0
        public StreamingAndRecording(StreamSourceInfo sourceConfig, OpenGraphRequest openGraphRequest) : base(sourceConfig, openGraphRequest)
        {
            InitializeNetworkSink();

            int hr;

            _tee = (IBaseFilter) new InfTee();
            hr   = _graphBuilder.AddFilter(_tee, "Inf Tee");
            DsError.ThrowExceptionForHR(hr);

            _recordSink       = AddFilterByName(FilterCategory.LegacyAmFilterCategory, "DVR Writer");
            _recordSinkFilter = (IFileSinkFilter)_recordSink;
            _recordSinkFilter.SetFileName(@"c:\test.lts", new AMMediaType());
            _dvrWriter = (IDVRWriterApi)_recordSink;
        }
예제 #11
0
        public DVRtoMPEG2TS(StreamSourceInfo sourceConfig, OpenGraphRequest openGraphRequest) : base(sourceConfig, openGraphRequest)
        {
            AppLogger.Message("In DVRtoMPEG2TS - CurrentProfile is " + CurrentProfile.Name);

            InitializeSink();

            _captureFilter = AddFilterByName(FilterCategory.LegacyAmFilterCategory, "LEAD DVR Source");
            IFileSourceFilter fileSource = (IFileSourceFilter)_captureFilter;

            String[]    sourceNameParts = sourceConfig.SourceName.Split('-');
            DVRSettings dvrSettings     = DVRSettings.LoadFromFile();
            int         hr = fileSource.Load(dvrSettings.RootFolder + sourceNameParts[0] + @"/Stream.LBL", null);

            DsError.ThrowExceptionForHR(hr);
            ILMDVRSource sourceControl = (ILMDVRSource)_captureFilter;

            sourceControl.ResetToDefaultsEx(LMDVRSource_APILEVEL.LMDVRSource_APILEVEL_1);

            _demux                          = AddFilterByName(FilterCategory.LegacyAmFilterCategory, "LEAD MPEG2 Transport Demultiplexer");
            _demuxControl                   = (ILMMpgDmx)_demux;
            _demuxControl.AutoLive          = true;
            _demuxControl.AutoLiveTolerance = .5;

//            _currentVideoSettings = new VideoSettings();
//            _currentVideoSettings.CodecType = CurrentProfile.Video.CodecType;

            ConnectFilters(_captureFilter, "Output", _demux, "Input 01");

            if (CurrentProfile.Video != null)
            {
                VideoSettings settings = CurrentProfile.Video;
                _videoDecoder = AddFilterByName(FilterCategory.LegacyAmFilterCategory, "LEAD H264 Decoder (3.0)");
                _videoEncoder = AddFilterByName(FilterCategory.LegacyAmFilterCategory, "LEAD H264 Encoder (4.0)");
                ConnectFilters(_demux, "H.264 Video", _videoDecoder, "XForm In");
                ConnectFilters(_videoDecoder, "XForm Out", _videoEncoder, "XForm In");
                LMH264EncoderLib.ILMH264Encoder encoderConfig = (LMH264EncoderLib.ILMH264Encoder)_videoEncoder;
                encoderConfig.EnableRateControl = true;
                encoderConfig.BitRate           = settings.ConstantBitRate * 1024;
                ConnectFilterToMux(_videoEncoder, "XForm Out", "Input 01");
            }
            else
            {
                ConnectFilterToMux(_demux, "H.264 Video", "Input 01");
            }
            ConnectMuxToSink();
        }
예제 #12
0
        public StreamingTVGraph(StreamSourceInfo sourceConfig, OpenGraphRequest openGraphRequest)
            : base(sourceConfig, openGraphRequest)
        {
            InitializeNetworkSink();

            this.TVConfig = sourceConfig.TVTuner;

            try
            {
                this.KnownChannels = ChannelCollection.LoadFromFile(GetKnownChannelsStoreFilename());
            }
            catch (Exception ex)
            {
                this.KnownChannels = new ChannelCollection();
                AppLogger.Dump(ex);
            }
        }
예제 #13
0
        public MangoDVR(StreamSourceInfo sourceConfig, OpenGraphRequest openGraphRequest) : base(sourceConfig, openGraphRequest)
        {
            InitializeSink();

//            _transcoder = AddFilterByName(FilterCategory.LegacyAmFilterCategory, "LEAD H264 Transcoder");

            _captureFilter = AddFilterByName(FilterCategory.LegacyAmFilterCategory, "Mango Capture");

            _currentVideoSettings           = new VideoSettings();
            _currentVideoSettings.CodecType = CurrentProfile.Video.CodecType;

            SetDSP_and_Camera(sourceConfig);
            ChangeProfile(CurrentProfile);

//            ConnectFilters(_captureFilter, "H264", _transcoder, "Input");
//            ConnectFilterToMux(_transcoder, "Output", "Input 01");
            ConnectFilterToMux(_captureFilter, "H264", "Input 01");
            ConnectMuxToSink();
        }
예제 #14
0
        public DVRLeadNetSink(StreamSourceInfo sourceConfig, OpenGraphRequest openGraphRequest) : base(sourceConfig, openGraphRequest)
        {
            AppLogger.Message("In DVRNetSink constructor - CurrentProfile is " + CurrentProfile.Name);

            InitializeNetworkSink();

            _captureFilter = DVRGraphHelper.GetAndConfigureDVRSourceForSink(_graphBuilder, sourceConfig);

            _demux                          = AddFilterByName(FilterCategory.LegacyAmFilterCategory, "LEAD MPEG2 Transport Demultiplexer");
            _demuxControl                   = (ILMMpgDmx)_demux;
            _demuxControl.AutoLive          = true;
            _demuxControl.AutoLiveTolerance = .5;

            ConnectFilters(_captureFilter, "Output", _demux, "Input 01");

            ConnectFilterToNetMux(_demux, "H.264 Video", "Input 01");

            ConnectNetMuxToNetSnk();
        }
예제 #15
0
        public BaseGraph(StreamSourceInfo sourceConfig, OpenGraphRequest openGraphRequest)
        {
            int hr = 0;

            SourceConfig     = sourceConfig;
            OpenGraphRequest = openGraphRequest;

            // An exception is thrown if cast fail
            _graphBuilder        = (IGraphBuilder) new FilterGraph();
            _captureGraphBuilder = (ICaptureGraphBuilder2) new CaptureGraphBuilder2();
            _mediaControl        = (IMediaControl)_graphBuilder;

            // Attach the filter graph to the capture graph
            hr = _captureGraphBuilder.SetFiltergraph(_graphBuilder);
            DsError.ThrowExceptionForHR(hr);

#if DEBUG_ROTENTRY
            _rot = new DsROTEntry(_graphBuilder);
#endif

            LoadProfileGroups();

            //the first listed ProfileGroup is the default ProfileGroup
            if (ProfileGroups.Items.Count == 0)
            {
                throw new SourceConfigException("No Profile Groups loaded!");
            }
            ProfileGroup profileGroup = ProfileGroups.Items[0];
            DefaultProfileName = profileGroup.Name + ":" + profileGroup.DefaultProfileName;

            if (OpenGraphRequest.Profile != null)
            {
                CurrentProfile = OpenGraphRequest.Profile;
            }
            else
            {
                CurrentProfile = FindProfile(DefaultProfileName);
            }
        }
예제 #16
0
        public ASFNetSink(StreamSourceInfo sourceConfig, OpenGraphRequest openGraphRequest)
            : base(sourceConfig, openGraphRequest)
        {
            _eventTimer          = new System.Timers.Timer();
            _eventTimer.Elapsed += new System.Timers.ElapsedEventHandler(_eventTimer_Elapsed);
            _eventTimer.Interval = 100;

            int             hr;
            IFileSinkFilter pTmpSink;

            hr = _captureGraphBuilder.SetOutputFileName(MediaSubType.Asf, SourceConfig.SourceName.Replace(':', '_') + @".asf", out _asfFilter, out pTmpSink);
            DsError.ThrowExceptionForHR(hr);

            ConfigureWriterFilter();

            CreateNetworkWriterSink();

            OpenSink();

            AddSinkToWriter();

            _eventTimer.Start();
        }
예제 #17
0
        public DVRtoDVR(StreamSourceInfo sourceConfig, OpenGraphRequest openGraphRequest) : base(sourceConfig, openGraphRequest)
        {
            AppLogger.Message("In DVRtoDVR - CurrentProfile is " + CurrentProfile.Name);

            InitializeSink();

            _captureFilter = DVRGraphHelper.GetAndConfigureDVRSourceForSink(_graphBuilder, sourceConfig);

            _demux                          = AddFilterByName(FilterCategory.LegacyAmFilterCategory, "LEAD MPEG2 Transport Demultiplexer");
            _demuxControl                   = (ILMMpgDmx)_demux;
            _demuxControl.AutoLive          = true;
            _demuxControl.AutoLiveTolerance = .5;

//            _currentVideoSettings = new VideoSettings();
//            _currentVideoSettings.CodecType = CurrentProfile.Video.CodecType;

            ConnectFilters(_captureFilter, "Output", _demux, "Input 01");

            if (CurrentProfile.Video != null)
            {
                VideoSettings settings = CurrentProfile.Video;
                _videoDecoder = AddFilterByName(FilterCategory.LegacyAmFilterCategory, "LEAD H264 Decoder (3.0)");
                _videoEncoder = AddFilterByName(FilterCategory.LegacyAmFilterCategory, "LEAD H264 Encoder (4.0)");
                ConnectFilters(_demux, "H.264 Video", _videoDecoder, "XForm In");
                ConnectFilters(_videoDecoder, "XForm Out", _videoEncoder, "XForm In");
                LMH264EncoderLib.ILMH264Encoder encoderConfig = (LMH264EncoderLib.ILMH264Encoder)_videoEncoder;
                encoderConfig.EnableRateControl = true;
                encoderConfig.BitRate           = settings.ConstantBitRate * 1024;
                ConnectFilterToMux(_videoEncoder, "XForm Out", "Input 01");
            }
            else
            {
                ConnectFilterToMux(_demux, "H.264 Video", "Input 01");
            }
            ConnectMuxToSink();
        }
예제 #18
0
        public StreamingGraph(StreamSourceInfo sourceConfig, OpenGraphRequest openGraphRequest) : base(sourceConfig, openGraphRequest)
        {
            _netMux              = AddFilterByName(FilterCategory.LegacyAmFilterCategory, @"LEAD Network Multiplexer (2.0)");
            _lmNetMux            = (ILMNetMux)_netMux;
            _lmNetMux.LiveSource = SourceConfig.LiveSource;
            AppLogger.Message(String.Format("LiveSource={0}", LiveSource));
//            _lmNetMux.MaxQueueDuration = SourceConfig.MaxQueueDuration;
//            _lmNetMux.MaxQueueDuration = SourceConfig.MaxQueueDuration;
            AppLogger.Message(String.Format("MaxQueueDuration={0}", _lmNetMux.MaxQueueDuration));
            _netSnk = AddFilterByName(FilterCategory.LegacyAmFilterCategory, "LEAD Network Sink (2.0)");

            //parse the app.config to see if we are disabling either of these.
            bool.TryParse(ConfigurationManager.AppSettings["DispatchClientsUpdate"], out this.DispatchClientsUpdate);
            bool.TryParse(ConfigurationManager.AppSettings["DispatchProfileUpdate"], out this.DispatchProfileUpdate);
            if (!this.DispatchProfileUpdate)
            {
                AppLogger.Message("   DispatchProfileUpdate is disabled.");
            }
            if (!this.DispatchClientsUpdate)
            {
                AppLogger.Message("   DispatchClientsUpdate is disabled.");
            }
            BuildClientURL(SinkProtocolType.LTSF_TCP);
        }
예제 #19
0
 public SessionDescription OpenGraph(OpenGraphRequest openGraphRequest)
 {
     _openGraphRequest = openGraphRequest;
     _graph            = GraphManager.Singleton.OpenGraph(openGraphRequest);
     return(_graph.SessionDescription);
 }
예제 #20
0
        public WinTV418ATSC(StreamSourceInfo sourceConfig, OpenGraphRequest openGraphRequest)
            : base(sourceConfig, openGraphRequest)
        {
            if (SourceConfig.TVTuner == null)
            {
                throw new SourceConfigException("TVTuner config section not found!");
            }

            _deviceIndex = sourceConfig.TVTuner.DeviceIndex;

            tuningSpace = GetTuningSpace();

            Guid networkType;

            tuningSpace.get__NetworkType(out networkType);
            if (networkType.Equals(Guid.Empty))
            {
                throw new Exception("Not a digital Network Type!");
            }

            networkProvider = (IBaseFilter)Activator.CreateInstance(Type.GetTypeFromCLSID(networkType));
            int hr = _graphBuilder.AddFilter(networkProvider, "Network Provider");

            DsError.ThrowExceptionForHR(hr);
            tuner = (ITuner)networkProvider;

            //add MPEG2 Demux
            mpeg2Demux = FilterGraphTools.AddFilterByName(_graphBuilder, FilterCategory.LegacyAmFilterCategory, "MPEG-2 Demultiplexer");

            //add BDA MPEG-2 Transport Information Filter
            bdaTransportInfo = FilterGraphTools.AddFilterByName(_graphBuilder, FilterCategory.BDATransportInformationRenderersCategory, "BDA MPEG2 Transport Information Filter");
            //add MPEG-2 Sections and Tables Filter
            mpeg2SectionsAndTables = FilterGraphTools.AddFilterByName(_graphBuilder, FilterCategory.BDATransportInformationRenderersCategory, "MPEG-2 Sections and Tables");

            //tunerFilter = FilterGraphTools.AddFilterByName(_graphBuilder, FilterCategory.BDASourceFiltersCategory, "Hauppauge WinTV 418 BDA Tuner");
            DsDevice tunerDevice = FindDevice(FilterCategory.BDASourceFiltersCategory, "Hauppauge WinTV 418 BDA Tuner");

            tunerFilter = FilterGraphTools.AddFilterByDevicePath(_graphBuilder, tunerDevice.DevicePath, tunerDevice.Name);
            //captureFilter = FilterGraphTools.AddFilterByName(_graphBuilder, FilterCategory.BDAReceiverComponentsCategory, "Hauppauge WinTV 418 TS Capture");
            DsDevice captureDevice = FindDevice(FilterCategory.BDAReceiverComponentsCategory, "Hauppauge WinTV 418 TS Capture");

            captureFilter = FilterGraphTools.AddFilterByDevicePath(_graphBuilder, captureDevice.DevicePath, captureDevice.Name);

            //connect network provider to BDA tuner
            ConnectFilters(networkProvider, "Antenna Out", (IBaseFilter)tunerFilter, "Input0", false);
            ConnectFilters((IBaseFilter)tunerFilter, "MPEG2 Transport", captureFilter, "MPEG2 Transport", false);

            //These filters need to be connected via their explicit pins,
            //  because Hauppauge saw fit to name all the pins on the capture filter the same name.
            IPin captureFilterOut = DsFindPin.ByDirection(captureFilter, PinDirection.Output, 0);
            IPin mpeg2DemuxIn     = DsFindPin.ByDirection(mpeg2Demux, PinDirection.Input, 0);

            FilterGraphTools.ConnectFilters(_graphBuilder, captureFilterOut, mpeg2DemuxIn, false);
            //clean up the two pins
            Marshal.ReleaseComObject(captureFilterOut);
            Marshal.ReleaseComObject(mpeg2DemuxIn);

            //add and connect meta data filters and connect them to the Demux
            ConnectFilters(mpeg2Demux, "1", bdaTransportInfo, "Input", false);
            ConnectFilters(mpeg2Demux, "5", mpeg2SectionsAndTables, "In", false);

            //this interface must be queried after the S&T filter has been connected.
            mpeg2Data  = (IMpeg2Data)mpeg2SectionsAndTables;
            _vctParser = new Parser(mpeg2Data);

            //build out the rest of the graph for the given source config / profile
            BuildForProfile();

            ConnectNetMuxToNetSnk();

            if (KnownChannels.Count > 0)
            {
                this.Channel = KnownChannels.Items[0];
            }

            SaveGraphFile("WinTV418ATSC.grf");
        }
예제 #21
0
 public WinTVAnalogBase(StreamSourceInfo sourceConfig, OpenGraphRequest openGraphRequest) : base(sourceConfig, openGraphRequest)
 {
     _tvConfig    = SourceConfig.TVTuner;
     _deviceIndex = _tvConfig.DeviceIndex;
 }
예제 #22
0
 public BaseMPEG2TSGraph(StreamSourceInfo sourceConfig, OpenGraphRequest openGraphRequest) : base(sourceConfig, openGraphRequest)
 {
     _mux  = AddFilterByName(FilterCategory.LegacyAmFilterCategory, @"LEAD MPEG2 Transport Multiplexer");
     _sink = AddFilterByName(FilterCategory.LegacyAmFilterCategory, @"LEAD MPEG2 Transport UDP Sink");
 }
예제 #23
0
 public BaseDVRSinkGraph(StreamSourceInfo sourceConfig, OpenGraphRequest openGraphRequest) : base(sourceConfig, openGraphRequest)
 {
     _mux         = AddFilterByName(FilterCategory.LegacyAmFilterCategory, @"LEAD MPEG2 Transport Multiplexer");
     _sink        = AddFilterByName(FilterCategory.LegacyAmFilterCategory, "LEAD DVR Sink");
     _sinkControl = (ILMDVRSink)_sink;
 }
예제 #24
0
        /// <summary>
        /// Factory method to instantiate graphs
        /// </summary>
        /// <param name="sourceConfig">source configuration. the SourceType here specifies the type of graph to instantiate</param>
        /// <param name="openGraphRequest">parameters regarding the creation of the graph</param>
        /// <returns>a new instance of the graph requested</returns>
        public static BaseGraph CreateInstance(StreamSourceInfo sourceConfig, OpenGraphRequest openGraphRequest)
        {
            BaseGraph graph;

            switch (sourceConfig.SourceType)
            {
            case SourceType.WinTV150:
                graph = new WinTV150(sourceConfig, openGraphRequest);
                break;

            case SourceType.WinTV418:
                graph = new WinTV418(sourceConfig, openGraphRequest);
                break;

            case SourceType.WinTV418ATSC:
                graph = new WinTV418ATSC(sourceConfig, openGraphRequest);
                break;

            case SourceType.WinTV500:
                graph = new WinTV500(sourceConfig, openGraphRequest);
                break;

            case SourceType.BouncingBallDVR:
                graph = new BouncingBallDVR(sourceConfig, openGraphRequest);
                break;

            case SourceType.CaptureSourceDVR:
                graph = new CaptureSourceDVR(sourceConfig, openGraphRequest);
                break;

            case SourceType.DVRtoMPEG2TS:
                graph = new DVRtoMPEG2TS(sourceConfig, openGraphRequest);
                break;

            case SourceType.DVRLeadNetSink:
                graph = new DVRLeadNetSink(sourceConfig, openGraphRequest);
                break;

            case SourceType.DVRtoDVR:
                graph = new DVRtoDVR(sourceConfig, openGraphRequest);
                break;

            case SourceType.ScreenCapture:
                graph = new ScreenCapture(sourceConfig, openGraphRequest);
                break;

            case SourceType.FastVDODVR:
                graph = new FastVDODVR(sourceConfig, openGraphRequest);
                break;

            case SourceType.MangoDVR:
                graph = new MangoDVR(sourceConfig, openGraphRequest);
                break;

#if SUPPORT_SRM314
            case SourceType.SRM314:
                graph = new SRM314(sourceConfig, openGraphRequest);
                break;
#endif
            default:
                throw new ConfigurationErrorsException(sourceConfig.SourceName + " has invalid SourceType.");
            }
            return(graph);
        }