private void TestNext() { int hr = 0; ITuningSpace[] ts = new ITuningSpace[5]; int fetched; int validObj = 0; IntPtr ip = Marshal.AllocCoTaskMem(4); hr = enumTS.Next(ts.Length, ts, ip); fetched = Marshal.ReadInt32(ip); Marshal.FreeCoTaskMem(ip); DsError.ThrowExceptionForHR(hr); for (int i = 0; i < fetched; i++) { if (ts[i] != null) { validObj++; Marshal.ReleaseComObject(ts[i]); } } Debug.Assert(validObj == fetched, "IEnumTuningSpaces.Next"); }
public void BuildGraph(ITuningSpace tuningSpace) { this.graphBuilder = (IFilterGraph2) new FilterGraph(); rot = new DsROTEntry(this.graphBuilder); // Method names should be self explanatory AddNetworkProviderFilter(tuningSpace); AddMPEG2DemuxFilter(); AddAndConnectBDABoardFilters(); AddTransportStreamFiltersToGraph(); AddRenderers(); ConfigureVMR9InWindowlessMode(); ConnectFilters(); }
public static ITuningSpace GetTuningSpace(BDANetworkType type) { int hr = 0; ITuningSpace ts = null; switch (type) { case BDANetworkType.ATSC: { ts = (ITuningSpace) new ATSCTuningSpace(); hr = ts.put_UniqueName(type.ToString() + "TuningSpace"); hr = ts.put_FriendlyName(type.ToString() + "TuningSpace"); hr = ts.put__NetworkType(typeof(ATSCNetworkProvider).GUID); break; } case BDANetworkType.DVBT: { ts = (ITuningSpace) new DVBTuningSpace(); hr = ts.put_UniqueName(type.ToString() + "TuningSpace"); hr = ts.put_FriendlyName(type.ToString() + "TuningSpace"); hr = ts.put__NetworkType(typeof(DVBTNetworkProvider).GUID); hr = (ts as IDVBTuningSpace).put_SystemType(DVBSystemType.Terrestrial); break; } case BDANetworkType.DVBS: { ts = (ITuningSpace) new DVBSTuningSpace(); hr = ts.put_UniqueName(type.ToString() + "TuningSpace"); hr = ts.put_FriendlyName(type.ToString() + "TuningSpace"); hr = ts.put__NetworkType(typeof(DVBSNetworkProvider).GUID); hr = (ts as IDVBTuningSpace).put_SystemType(DVBSystemType.Satellite); break; } case BDANetworkType.DVBC: { throw new NotImplementedException(); } case BDANetworkType.OpenCable: { throw new NotImplementedException(); } } return(ts); }
private void Config() { int hr = 0; ITuningSpaceContainer tsContainer = (ITuningSpaceContainer) new SystemTuningSpaces(); ITuningSpace ts = null; // The third System TuningSpace is an ATSC one... // see HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Tuning Spaces\3 hr = tsContainer.get_Item(3, out ts); DsError.ThrowExceptionForHR(hr); tuningSpace = (IATSCTuningSpace)ts; Marshal.ReleaseComObject(tsContainer); }
public static ITuneRequest CreateTuneRequest(ITuningSpace ts) { int hr = 0; ITuneRequest tr = null; Guid networkType; hr = ts.CreateTuneRequest(out tr); DsError.ThrowExceptionForHR(hr); hr = ts.get__NetworkType(out networkType); if (networkType == typeof(ATSCNetworkProvider).GUID) { // I know nothing about ATSC so thoses lines are pure speculation hr = (tr as IATSCChannelTuneRequest).put_Channel(-1); IATSCLocator locator = (IATSCLocator) new ATSCLocator(); hr = locator.put_CarrierFrequency(-1); hr = tr.put_Locator(locator as ILocator); } else if (networkType == typeof(DVBTNetworkProvider).GUID) { hr = (tr as IDVBTuneRequest).put_ONID(-1); hr = (tr as IDVBTuneRequest).put_TSID(-1); hr = (tr as IDVBTuneRequest).put_SID(-1); IDVBTLocator locator = (IDVBTLocator) new DVBTLocator(); hr = locator.put_CarrierFrequency(-1); hr = tr.put_Locator(locator as ILocator); } else if (networkType == typeof(DVBSNetworkProvider).GUID) { hr = (tr as IDVBTuneRequest).put_ONID(-1); hr = (tr as IDVBTuneRequest).put_TSID(-1); hr = (tr as IDVBTuneRequest).put_SID(-1); IDVBSLocator locator = (IDVBSLocator) new DVBSLocator(); hr = locator.put_CarrierFrequency(-1); hr = locator.put_SymbolRate(-1); hr = tr.put_Locator(locator as ILocator); } return(tr); }
/// <summary> /// Finds the ATSC Tuning space in the System Tuning Spaces and returns it /// </summary> /// <returns>an ITuningSpace, which is the System Tuning Spaces</returns> private ITuningSpace GetTuningSpace() { ITuningSpaceContainer system = (ITuningSpaceContainer) new SystemTuningSpaces(); try { IEnumTuningSpaces systemEnum; int hr = system.get_EnumTuningSpaces(out systemEnum); DsError.ThrowExceptionForHR(hr); IntPtr retreivedSpaceCount = Marshal.AllocCoTaskMem(4); try { ITuningSpace[] retreivedSpaces = new ITuningSpace[1]; do { hr = systemEnum.Next(1, retreivedSpaces, retreivedSpaceCount); DsError.ThrowExceptionForHR(hr); if (Marshal.ReadInt32(retreivedSpaceCount) > 0) { Guid networkType; hr = retreivedSpaces[0].get__NetworkType(out networkType); DsError.ThrowExceptionForHR(hr); if (networkType.Equals(CLSID_ATSCNetworkProvider)) { return(retreivedSpaces[0]); } } } while (Marshal.ReadInt32(retreivedSpaceCount) > 0); } finally { Marshal.FreeCoTaskMem(retreivedSpaceCount); } throw new Exception("Could not locate ATSC Tuning Space!"); } finally { Marshal.ReleaseComObject(system); } }
private void AddNetworkProviderFilter(ITuningSpace tuningSpace) { int hr = 0; Guid genProviderClsId = new Guid("{B2F3A67C-29DA-4C78-8831-091ED509A475}"); Guid networkProviderClsId; // First test if the Generic Network Provider is available (only on MCE 2005 + Update Rollup 2) if (FilterGraphTools.IsThisComObjectInstalled(genProviderClsId)) { this.networkProvider = FilterGraphTools.AddFilterFromClsid(this.graphBuilder, genProviderClsId, "Generic Network Provider"); hr = (this.networkProvider as ITuner).put_TuningSpace(tuningSpace); return; } // Get the network type of the requested Tuning Space hr = tuningSpace.get__NetworkType(out networkProviderClsId); // Get the network type of the requested Tuning Space if (networkProviderClsId == typeof(DVBTNetworkProvider).GUID) { this.networkProvider = FilterGraphTools.AddFilterFromClsid(this.graphBuilder, networkProviderClsId, "DVBT Network Provider"); } else if (networkProviderClsId == typeof(DVBSNetworkProvider).GUID) { this.networkProvider = FilterGraphTools.AddFilterFromClsid(this.graphBuilder, networkProviderClsId, "DVBS Network Provider"); } else if (networkProviderClsId == typeof(ATSCNetworkProvider).GUID) { this.networkProvider = FilterGraphTools.AddFilterFromClsid(this.graphBuilder, networkProviderClsId, "ATSC Network Provider"); } else if (networkProviderClsId == typeof(DVBCNetworkProvider).GUID) { this.networkProvider = FilterGraphTools.AddFilterFromClsid(this.graphBuilder, networkProviderClsId, "DVBC Network Provider"); } else { // Tuning Space can also describe Analog TV but this application don't support them throw new ArgumentException("This application doesn't support this Tuning Space"); } hr = (this.networkProvider as ITuner).put_TuningSpace(tuningSpace); }
protected override ITuningSpace GetTuningSpace() { ITuningSpaceContainer system = (ITuningSpaceContainer) new SystemTuningSpaces(); IntPtr retreivedSpaceCount = Marshal.AllocCoTaskMem(4); try { IEnumTuningSpaces systemEnum; int hr = system.get_EnumTuningSpaces(out systemEnum); DsError.ThrowExceptionForHR(hr); ITuningSpace[] retreivedSpaces = new ITuningSpace[1]; do { hr = systemEnum.Next(1, retreivedSpaces, retreivedSpaceCount); DsError.ThrowExceptionForHR(hr); if (Marshal.ReadInt32(retreivedSpaceCount) > 0) { Guid networkType; hr = retreivedSpaces[0].get__NetworkType(out networkType); //string name; //retreivedSpaces[0].get_FriendlyName(out name); //Debug.WriteLine(" found \"" + name + "\", network type: " + networkType.ToString()); DsError.ThrowExceptionForHR(hr); if (networkType.Equals(CLSID_ATSCNetworkProvider)) { return(retreivedSpaces[0]); } } } while (Marshal.ReadInt32(retreivedSpaceCount) > 0); throw new Exception("Could not locate ATSC Tuning Space!"); } finally { ReleaseComObject(system); Marshal.FreeCoTaskMem(retreivedSpaceCount); } }
private void BuildSinkGraph(ITuningSpace tuningSpace) { this.graphBuilder = (IFilterGraph2) new FilterGraph(); this.rot = new DsROTEntry(this.graphBuilder); this.epg = new EPG(this.hostingControl); this.cookiesSink = this.hostingControl.SubscribeEvents(this as VideoControl.IVideoEventHandler, this.graphBuilder as IMediaEventEx); AddNetworkProviderFilter(this.objTuningSpace); AddMPEG2DemuxFilter(); AddMpeg2VideoStreamAnalyzerFilter(); CreateMPEG2DemuxPins(); AddAndConnectBDABoardFilters(); if (this.tuner == null && this.capture == null) { throw new ApplicationException("No BDA devices found!"); } if (this.H264DecoderDevice != null || !isH264ElecardSpecialMode) { //+++ This order is to avoid a bug from the DirectShow AddAndConnectSectionsAndTablesFilterToGraph(); IMpeg2Data mpeg2Data = this.bdaSecTab as IMpeg2Data; ISectionList ppSectionList; int hr2 = mpeg2Data.GetTable(0, 0, null, 0, out ppSectionList); AddAndConnectTIFToGraph(); //--- } ConfigureTimeShiftingRegistry(); AddStreamBufferSinkFilter(); ConnectStreamBufferSinkFilter(); this.epg.RegisterEvent(TransportInformationFilter as IConnectionPointContainer); }
public void UpdateService(string serviceId, ITuningSpace tuningSpace, IGuideData guideData) { Trace.WriteLineIf(trace.TraceInfo, "EPG.UpdateService(" + serviceId + ")"); if (serviceId == null) { UpdateAllService(guideData); } else if (tuningSpace != null && NeedServiceUpdate(serviceId)) { // serviceId = "ONID:TSID:SID" string[] serviceIds = serviceId.Split(new char[] { ':' }); int onid = int.Parse(serviceIds[0]); int tsid = int.Parse(serviceIds[1]); int sid = int.Parse(serviceIds[2]); ITuneRequest tr; tuningSpace.CreateTuneRequest(out tr); IDVBTuneRequest tuneRequest = (IDVBTuneRequest)tr; tuneRequest.put_ONID(onid); tuneRequest.put_TSID(tsid); tuneRequest.put_SID(sid); UpdateService(tuneRequest, guideData); } }
private void createTuneRequest(ITuningSpace tuningSpace, TuningSpec tuningSpec) { reply = tuningSpace.CreateTuneRequest(out tuneRequest); DsError.ThrowExceptionForHR(reply); if (tuningSpec.Frequency.TunerType == TunerType.Satellite || tuningSpec.Frequency.TunerType == TunerType.Terrestrial || tuningSpec.Frequency.TunerType == TunerType.Cable) { LogMessage("Creating DVB tune request"); reply = ((IDVBTuneRequest)tuneRequest).put_ONID(-1); DsError.ThrowExceptionForHR(reply); reply = ((IDVBTuneRequest)tuneRequest).put_TSID(-1); DsError.ThrowExceptionForHR(reply); reply = ((IDVBTuneRequest)tuneRequest).put_SID(-1); DsError.ThrowExceptionForHR(reply); } else { if (tuningSpec.Frequency.TunerType == TunerType.ATSC || tuningSpec.Frequency.TunerType == TunerType.ATSCCable) { LogMessage("Creating ATSC tune request"); reply = ((IATSCChannelTuneRequest)tuneRequest).put_Channel(-1); DsError.ThrowExceptionForHR(reply); reply = ((IATSCChannelTuneRequest)tuneRequest).put_MinorChannel(-1); DsError.ThrowExceptionForHR(reply); } else { if (tuningSpec.Frequency.TunerType == TunerType.ClearQAM) { LogMessage("Creating Clear QAM tune request"); reply = ((IDigitalCableTuneRequest)tuneRequest).put_Channel(-1); DsError.ThrowExceptionForHR(reply); reply = ((IDigitalCableTuneRequest)tuneRequest).put_MinorChannel(-1); DsError.ThrowExceptionForHR(reply); } else { if (tuningSpec.Frequency.TunerType == TunerType.ISDBS || tuningSpec.Frequency.TunerType == TunerType.ISDBT) { LogMessage("Creating ISDB tune request"); reply = ((IDVBTuneRequest)tuneRequest).put_ONID(-1); DsError.ThrowExceptionForHR(reply); reply = ((IDVBTuneRequest)tuneRequest).put_TSID(-1); DsError.ThrowExceptionForHR(reply); reply = ((IDVBTuneRequest)tuneRequest).put_SID(-1); DsError.ThrowExceptionForHR(reply); } } } } reply = tuneRequest.put_Locator(getLocator(tuningSpec)); DsError.ThrowExceptionForHR(reply); }
private void createTuningSpace(TuningSpec tuningSpec) { switch (tuningSpec.Frequency.TunerType) { case TunerType.Satellite: { LogMessage("Creating DVB Satellite tuning space"); tuningSpace = (ITuningSpace)new DVBSTuningSpace(); reply = tuningSpace.put_UniqueName("EPG Collector DVB-S Tuning Space"); DsError.ThrowExceptionForHR(reply); reply = tuningSpace.put_FriendlyName("EPG Collector DVB-S Tuning Space"); DsError.ThrowExceptionForHR(reply); reply = ((IDVBSTuningSpace)tuningSpace).put_HighOscillator(((SatelliteFrequency)tuningSpec.Frequency).SatelliteDish.LNBHighBandFrequency); DsError.ThrowExceptionForHR(reply); if (((SatelliteFrequency)tuningSpec.Frequency).SatelliteDish.LNBSwitchFrequency != 0) reply = ((IDVBSTuningSpace)tuningSpace).put_LNBSwitch(((SatelliteFrequency)tuningSpec.Frequency).SatelliteDish.LNBSwitchFrequency); else reply = ((IDVBSTuningSpace)tuningSpace).put_LNBSwitch(20000000); DsError.ThrowExceptionForHR(reply); reply = ((IDVBSTuningSpace)tuningSpace).put_LowOscillator(((SatelliteFrequency)tuningSpec.Frequency).SatelliteDish.LNBLowBandFrequency); DsError.ThrowExceptionForHR(reply); reply = ((IDVBSTuningSpace)tuningSpace).put_NetworkID(-1); DsError.ThrowExceptionForHR(reply); reply = tuningSpace.put__NetworkType(new Guid("fa4b375a-45b4-4d45-8440-263957b11623")); DsError.ThrowExceptionForHR(reply); reply = ((IDVBSTuningSpace)tuningSpace).put_SpectralInversion(SpectralInversion.NotSet); DsError.ThrowExceptionForHR(reply); reply = ((IDVBTuningSpace)tuningSpace).put_SystemType(DVBSystemType.Satellite); DsError.ThrowExceptionForHR(reply); LogMessage("Tuning Space LNB Low: " + ((SatelliteFrequency)tuningSpec.Frequency).SatelliteDish.LNBLowBandFrequency.ToString()); LogMessage("Tuning Space LNB High: " + ((SatelliteFrequency)tuningSpec.Frequency).SatelliteDish.LNBHighBandFrequency.ToString()); LogMessage("Tuning Space LNB Switch: " + ((SatelliteFrequency)tuningSpec.Frequency).SatelliteDish.LNBSwitchFrequency.ToString()); reply = ((IDVBSTuningSpace)tuningSpace).put_DefaultLocator(getLocator(tuningSpec)); DsError.ThrowExceptionForHR(reply); break; } case TunerType.Terrestrial: { LogMessage("Creating DVB Terrestrial tuning space"); tuningSpace = (IDVBTuningSpace)new DVBTuningSpace(); reply = tuningSpace.put_UniqueName("EPG Collector DVB-T Tuning Space"); DsError.ThrowExceptionForHR(reply); reply = tuningSpace.put_FriendlyName("EPG Collector DVB-T Tuning Space"); DsError.ThrowExceptionForHR(reply); reply = tuningSpace.put__NetworkType(new Guid("216c62df-6d7f-4e9a-8571-05f14edb766a")); DsError.ThrowExceptionForHR(reply); reply = ((IDVBTuningSpace)tuningSpace).put_SystemType(DVBSystemType.Terrestrial); DsError.ThrowExceptionForHR(reply); reply = tuningSpace.put_DefaultLocator(getLocator(tuningSpec)); DsError.ThrowExceptionForHR(reply); break; } case TunerType.Cable: { LogMessage("Creating DVB Cable tuning space"); tuningSpace = (IDVBTuningSpace)new DVBTuningSpace(); reply = tuningSpace.put_UniqueName("EPG Collector DVB-C Tuning Space"); DsError.ThrowExceptionForHR(reply); reply = tuningSpace.put_FriendlyName("EPG Collector DVB-C Tuning Space"); DsError.ThrowExceptionForHR(reply); reply = tuningSpace.put__NetworkType(typeof(DVBCNetworkProvider).GUID); DsError.ThrowExceptionForHR(reply); reply = ((IDVBTuningSpace)tuningSpace).put_SystemType(DVBSystemType.Cable); DsError.ThrowExceptionForHR(reply); reply = tuningSpace.put_DefaultLocator(getLocator(tuningSpec)); DsError.ThrowExceptionForHR(reply); break; } case TunerType.ATSC: { LogMessage("Creating ATSC Terrestrial tuning space"); tuningSpace = (IATSCTuningSpace)new ATSCTuningSpace(); reply = tuningSpace.put_UniqueName("EPG Collector ATSC Terrestrial Tuning Space"); DsError.ThrowExceptionForHR(reply); reply = tuningSpace.put_FriendlyName("EPG Collector ATSC Terrestrial Tuning Space"); DsError.ThrowExceptionForHR(reply); reply = tuningSpace.put__NetworkType(typeof(ATSCNetworkProvider).GUID); DsError.ThrowExceptionForHR(reply); reply = ((IATSCTuningSpace)tuningSpace).put_InputType(TunerInputType.Antenna); DsError.ThrowExceptionForHR(reply); reply = ((IATSCTuningSpace)tuningSpace).put_MaxMinorChannel(999); DsError.ThrowExceptionForHR(reply); reply = ((IATSCTuningSpace)tuningSpace).put_MaxPhysicalChannel(69); DsError.ThrowExceptionForHR(reply); reply = ((IATSCTuningSpace)tuningSpace).put_MaxChannel(99); DsError.ThrowExceptionForHR(reply); reply = ((IATSCTuningSpace)tuningSpace).put_MinMinorChannel(-1); DsError.ThrowExceptionForHR(reply); reply = ((IATSCTuningSpace)tuningSpace).put_MinPhysicalChannel(-1); DsError.ThrowExceptionForHR(reply); reply = ((IATSCTuningSpace)tuningSpace).put_MinChannel(-1); DsError.ThrowExceptionForHR(reply); reply = tuningSpace.put_DefaultLocator(getLocator(tuningSpec)); DsError.ThrowExceptionForHR(reply); reply = ((IATSCTuningSpace)tuningSpace).put_MaxPhysicalChannel(999); DsError.ThrowExceptionForHR(reply); LogMessage("Tuning Space Max Physical Channel: 69"); break; } case TunerType.ATSCCable: { LogMessage("Creating ATSC Cable tuning space"); tuningSpace = (IATSCTuningSpace)new ATSCTuningSpace(); reply = tuningSpace.put_UniqueName("EPG Collector ATSC Cable Tuning Space"); DsError.ThrowExceptionForHR(reply); reply = tuningSpace.put_FriendlyName("EPG Collector ATSC Cable Tuning Space"); DsError.ThrowExceptionForHR(reply); reply = ((IATSCTuningSpace)tuningSpace).put_InputType(TunerInputType.Cable); DsError.ThrowExceptionForHR(reply); reply = ((IATSCTuningSpace)tuningSpace).put_MaxMinorChannel(999); DsError.ThrowExceptionForHR(reply); reply = ((IATSCTuningSpace)tuningSpace).put_MaxPhysicalChannel(158); DsError.ThrowExceptionForHR(reply); reply = ((IATSCTuningSpace)tuningSpace).put_MaxChannel(9999); DsError.ThrowExceptionForHR(reply); reply = ((IATSCTuningSpace)tuningSpace).put_MinMinorChannel(-1); DsError.ThrowExceptionForHR(reply); reply = ((IATSCTuningSpace)tuningSpace).put_MinPhysicalChannel(-1); DsError.ThrowExceptionForHR(reply); reply = ((IATSCTuningSpace)tuningSpace).put_MinChannel(-1); DsError.ThrowExceptionForHR(reply); reply = tuningSpace.put__NetworkType(typeof(ATSCNetworkProvider).GUID); DsError.ThrowExceptionForHR(reply); reply = tuningSpace.put_DefaultLocator(getLocator(tuningSpec)); DsError.ThrowExceptionForHR(reply); LogMessage("Tuning Space Max Physical Channel: 158"); break; } case TunerType.ClearQAM: { LogMessage("Creating Clear QAM tuning space"); tuningSpace = (IDigitalCableTuningSpace)new DigitalCableTuningSpace(); reply = tuningSpace.put_UniqueName("EPG Collector Clear QAM Tuning Space"); DsError.ThrowExceptionForHR(reply); reply = tuningSpace.put_FriendlyName("EPG Collector Clear QAM Tuning Space"); DsError.ThrowExceptionForHR(reply); reply = ((IDigitalCableTuningSpace)tuningSpace).put_InputType(TunerInputType.Cable); DsError.ThrowExceptionForHR(reply); reply = ((IDigitalCableTuningSpace)tuningSpace).put_MaxChannel(9999); DsError.ThrowExceptionForHR(reply); reply = ((IDigitalCableTuningSpace)tuningSpace).put_MaxMajorChannel(99); DsError.ThrowExceptionForHR(reply); reply = ((IDigitalCableTuningSpace)tuningSpace).put_MaxMinorChannel(999); DsError.ThrowExceptionForHR(reply); reply = ((IDigitalCableTuningSpace)tuningSpace).put_MaxPhysicalChannel(158); DsError.ThrowExceptionForHR(reply); reply = ((IDigitalCableTuningSpace)tuningSpace).put_MaxSourceID(0x7fffffff); DsError.ThrowExceptionForHR(reply); reply = ((IDigitalCableTuningSpace)tuningSpace).put_MinChannel(-1); DsError.ThrowExceptionForHR(reply); reply = ((IDigitalCableTuningSpace)tuningSpace).put_MinMajorChannel(-1); DsError.ThrowExceptionForHR(reply); reply = ((IDigitalCableTuningSpace)tuningSpace).put_MinMinorChannel(-1); DsError.ThrowExceptionForHR(reply); reply = ((IDigitalCableTuningSpace)tuningSpace).put_MinPhysicalChannel(2); DsError.ThrowExceptionForHR(reply); reply = ((IDigitalCableTuningSpace)tuningSpace).put_MinSourceID(0); DsError.ThrowExceptionForHR(reply); reply = tuningSpace.put__NetworkType(new Guid("143827ab-f77b-498d-81ca-5a007aec28bf")); DsError.ThrowExceptionForHR(reply); reply = tuningSpace.put_DefaultLocator(getLocator(tuningSpec)); DsError.ThrowExceptionForHR(reply); LogMessage("Tuning Space Max Physical Channel: 158"); break; } case TunerType.ISDBS: { LogMessage("Creating ISDB Satellite tuning space"); tuningSpace = (ITuningSpace)new DVBSTuningSpace(); reply = tuningSpace.put_UniqueName("EPG Collector ISDB-S Tuning Space"); DsError.ThrowExceptionForHR(reply); reply = tuningSpace.put_FriendlyName("EPG Collector ISDB-S Tuning Space"); DsError.ThrowExceptionForHR(reply); reply = ((IDVBSTuningSpace)tuningSpace).put_HighOscillator(((ISDBSatelliteFrequency)tuningSpec.Frequency).SatelliteDish.LNBHighBandFrequency); DsError.ThrowExceptionForHR(reply); if (((ISDBSatelliteFrequency)tuningSpec.Frequency).SatelliteDish.LNBSwitchFrequency != 0) reply = ((IDVBSTuningSpace)tuningSpace).put_LNBSwitch(((SatelliteFrequency)tuningSpec.Frequency).SatelliteDish.LNBSwitchFrequency); else reply = ((IDVBSTuningSpace)tuningSpace).put_LNBSwitch(20000000); DsError.ThrowExceptionForHR(reply); reply = ((IDVBSTuningSpace)tuningSpace).put_LowOscillator(((ISDBSatelliteFrequency)tuningSpec.Frequency).SatelliteDish.LNBLowBandFrequency); DsError.ThrowExceptionForHR(reply); reply = ((IDVBSTuningSpace)tuningSpace).put_NetworkID(-1); DsError.ThrowExceptionForHR(reply); reply = tuningSpace.put__NetworkType(new Guid("b0a4e6a0-6a1a-4b83-bb5b-903e1d90e6b6")); DsError.ThrowExceptionForHR(reply); reply = ((IDVBSTuningSpace)tuningSpace).put_SpectralInversion(SpectralInversion.NotSet); DsError.ThrowExceptionForHR(reply); reply = ((IDVBTuningSpace)tuningSpace).put_SystemType(DVBSystemType.ISDBS); DsError.ThrowExceptionForHR(reply); LogMessage("Tuning Space LNB Low: " + ((ISDBSatelliteFrequency)tuningSpec.Frequency).SatelliteDish.LNBLowBandFrequency.ToString()); LogMessage("Tuning Space LNB High: " + ((ISDBSatelliteFrequency)tuningSpec.Frequency).SatelliteDish.LNBHighBandFrequency.ToString()); LogMessage("Tuning Space LNB Switch: " + ((ISDBSatelliteFrequency)tuningSpec.Frequency).SatelliteDish.LNBSwitchFrequency.ToString()); reply = ((IDVBSTuningSpace)tuningSpace).put_DefaultLocator(getLocator(tuningSpec)); DsError.ThrowExceptionForHR(reply); break; } case TunerType.ISDBT: { LogMessage("Creating ISDB Terrestrial tuning space"); tuningSpace = (IDVBTuningSpace)new DVBTuningSpace(); reply = tuningSpace.put_UniqueName("EPG Collector ISDB-T Tuning Space"); DsError.ThrowExceptionForHR(reply); reply = tuningSpace.put_FriendlyName("EPG Collector ISDB-T Tuning Space"); DsError.ThrowExceptionForHR(reply); reply = tuningSpace.put__NetworkType(new Guid("95037f6f-3ac7-4452-b6c4-45a9ce9292a2")); DsError.ThrowExceptionForHR(reply); reply = ((IDVBTuningSpace)tuningSpace).put_SystemType(DVBSystemType.ISDBT); DsError.ThrowExceptionForHR(reply); reply = tuningSpace.put_DefaultLocator(getLocator(tuningSpec)); DsError.ThrowExceptionForHR(reply); break; } } }
/// <summary> /// Dispose of the filters created by this graph. /// </summary> public override void Dispose() { if (CaptureGraphBuilder == null) { LogMessage("No graph components exist for disposal"); return; } base.Dispose(); LogMessage("Releasing Network Provider"); Marshal.ReleaseComObject(networkProviderFilter); networkProviderFilter = null; LogMessage("Releasing MPEG2 Demux"); Marshal.ReleaseComObject(mpeg2DemuxFilter); mpeg2DemuxFilter = null; LogMessage("Releasing Tuner"); Marshal.ReleaseComObject(tunerFilter); tunerFilter = null; if (captureFilter != null) { LogMessage("Releasing Capture Filter"); Marshal.ReleaseComObject(captureFilter); captureFilter = null; } if (demodulatorFilter != null) { LogMessage("Releasing Demodulator"); Marshal.ReleaseComObject(demodulatorFilter); demodulatorFilter = null; } if (tifFilter != null) { LogMessage("Releasing TIF Filter"); Marshal.ReleaseComObject(tifFilter); tifFilter = null; } if (secTabFilter != null) { LogMessage("Releasing Sections And Tables Filter"); Marshal.ReleaseComObject(secTabFilter); secTabFilter = null; } if (infiniteTeeFilter != null) { LogMessage("Releasing Infinite Tee Filter"); Marshal.ReleaseComObject(infiniteTeeFilter); infiniteTeeFilter = null; } if (psiMemoryFilter != null) { LogMessage("Releasing PSI Memory Filter"); IntPtr pointer = Marshal.GetIUnknownForObject(psiMemoryFilter); Marshal.ReleaseComObject(psiMemoryFilter); Marshal.Release(pointer); psiMemoryFilter = null; } if (tuningSpace != null) { LogMessage("Releasing Tuning Space"); Marshal.ReleaseComObject(tuningSpace); tuningSpace = null; } if (tuneRequest != null) { LogMessage("Releasing Tune Request"); Marshal.ReleaseComObject(tuneRequest); tuneRequest = null; } if (currentLocator != null) { LogMessage("Releasing Locator"); Marshal.ReleaseComObject(currentLocator); currentLocator = null; } }
private void BuildGraph() { int hr = 0; graphBuilder = (IFilterGraph2) new FilterGraph(); rot = new DsROTEntry(graphBuilder); ICaptureGraphBuilder2 capBuilder = (ICaptureGraphBuilder2) new CaptureGraphBuilder2(); capBuilder.SetFiltergraph(graphBuilder); // Get the BDA network provider specific for this given network type networkProvider = BDAUtils.GetNetworkProvider(networkType); hr = graphBuilder.AddFilter(networkProvider, "BDA Network Provider"); DsError.ThrowExceptionForHR(hr); tuner = (ITuner)networkProvider; // Get a tuning space for this network type tuningSpace = BDAUtils.GetTuningSpace(networkType); hr = tuner.put_TuningSpace(tuningSpace); DsError.ThrowExceptionForHR(hr); // Create a tune request from this tuning space tuneRequest = BDAUtils.CreateTuneRequest(tuningSpace); // Is it okay ? hr = tuner.Validate(tuneRequest); if (hr == 0) { // Set it hr = tuner.put_TuneRequest(tuneRequest); DsError.ThrowExceptionForHR(hr); // found a BDA Tuner and a BDA Capture that can connect to this network provider BDAUtils.AddBDATunerAndDemodulatorToGraph(graphBuilder, networkProvider, out bdaTuner, out bdaCapture); if ((bdaTuner != null) && (bdaCapture != null)) { // Create and add the mpeg2 demux mpeg2Demux = (IBaseFilter) new MPEG2Demultiplexer(); hr = graphBuilder.AddFilter(mpeg2Demux, "MPEG2 Demultiplexer"); DsError.ThrowExceptionForHR(hr); // connect it to the BDA Capture hr = capBuilder.RenderStream(null, null, bdaCapture, null, mpeg2Demux); DsError.ThrowExceptionForHR(hr); // Add the two mpeg2 transport stream helper filters BDAUtils.AddTransportStreamFiltersToGraph(graphBuilder, out bdaTIF, out bdaSecTab); if ((bdaTIF != null) && (bdaSecTab != null)) { // Render all the output pins of the demux (missing filters are added) for (int i = 0; i < 5; i++) { IPin pin = DsFindPin.ByDirection(mpeg2Demux, PinDirection.Output, i); hr = graphBuilder.Render(pin); Marshal.ReleaseComObject(pin); } } IBDA_Topology topo = (IBDA_Topology)bdaTuner; int[] nodeTypes = new int[10]; int nodeTypesCount; // Get all nodes in the BDA Tuner hr = topo.GetNodeTypes(out nodeTypesCount, nodeTypes.Length, nodeTypes); DsError.ThrowExceptionForHR(hr); // For each nodes types for (int i = 0; i < nodeTypesCount; i++) { Guid[] nodeGuid = new Guid[10]; int nodeGuidCount; // Get its exposed interfaces hr = topo.GetNodeInterfaces(nodeTypes[i], out nodeGuidCount, nodeGuid.Length, nodeGuid); DsError.ThrowExceptionForHR(hr); // For each exposed interfaces for (int j = 0; j < nodeGuidCount; j++) { Debug.WriteLine(string.Format("node {0}/{1} : {2}", i, j, nodeGuid[j])); Console.WriteLine(string.Format("node {0}/{1} : {2}", i, j, nodeGuid[j])); // Is IBDA_LNBInfo supported by this node ? if (nodeGuid[j] == typeof(IBDA_LNBInfo).GUID) { // Yes, retrieve this node object ctrlNode; hr = topo.GetControlNode(0, 1, nodeTypes[i], out ctrlNode); DsError.ThrowExceptionForHR(hr); // Do the cast (it should not fail) lnbInfo = ctrlNode as IBDA_LNBInfo; // Exit the for j loop if found a SignalStatistics object if (lnbInfo != null) { break; } } } // If already found a SignalStatistics object, exit the for i loop if (lnbInfo != null) { break; } } } } }
private void BuildMosaicGraph(ITuningSpace tuningSpace, ArrayList programs) { this.graphBuilder = (IFilterGraph2)new FilterGraph(); rot = new DsROTEntry(this.graphBuilder); // Method names should be self explanatory AddNetworkProviderFilter(tuningSpace); AddMPEG2DemuxFilter(); AddAndConnectBDABoardFilters(); AddTransportStreamFiltersToGraph(); AddRenderers(); //unsafe //{ IntPtr formatPtr = Marshal.AllocHGlobal(g_Mpeg2ProgramVideo.Length); Marshal.Copy(g_Mpeg2ProgramVideo, 0, formatPtr, g_Mpeg2ProgramVideo.Length); IMpeg2Demultiplexer mpeg2Demultiplexer = this.mpeg2Demux as IMpeg2Demultiplexer; for(int p = 1; p < programs.Count; p++) { PSI.PSIPMT pmt = (PSI.PSIPMT)programs[p]; PSI.PSIPMT.Data stream = (PSI.PSIPMT.Data)pmt.GetStreamByType(CodeTV.PSI.STREAM_TYPES.STREAMTYPE_13818_VIDEO); AMMediaType mediaType = new AMMediaType(); mediaType.majorType = MediaType.Video; mediaType.subType = MediaSubType.Mpeg2Video; mediaType.fixedSizeSamples = false; mediaType.temporalCompression = false; mediaType.sampleSize = 0; mediaType.formatType = FormatType.Mpeg2Video; mediaType.unkPtr = IntPtr.Zero; mediaType.formatSize = g_Mpeg2ProgramVideo.Length; mediaType.formatPtr = formatPtr; //mediaType.formatType = FormatType.Mpeg2Video; //mediaType.formatSize = 0; //mediaType.formatPtr = IntPtr.Zero; string pinName = "video" + p; IPin outputPin; int hr = mpeg2Demultiplexer.CreateOutputPin(mediaType, pinName, out outputPin); if (outputPin != null) { IMPEG2PIDMap mpeg2PIDMap = outputPin as IMPEG2PIDMap; if (mpeg2PIDMap != null) hr = mpeg2PIDMap.MapPID(1, new int[] { stream.Pid }, MediaSampleContent.ElementaryStream); Marshal.ReleaseComObject(outputPin); } } Marshal.FreeHGlobal(formatPtr); //} ConfigureVMR9InWindowlessMode(programs.Count); ConnectAllOutputFilters(); int numberColumn = 4; int numberRow = 4; float widthPadding = 0.01f; float heightPadding = 0.01f; float width = (1.0f / numberColumn) - 2.0f * widthPadding; float height = (1.0f / numberRow) - 2.0f * heightPadding; IVMRMixerControl9 vmrMixerControl9 = this.videoRenderer as IVMRMixerControl9; for (int p = 1; p < programs.Count; p++) { int column, row = Math.DivRem(p - 1, numberColumn, out column); NormalizedRect rect = new NormalizedRect(); rect.left = (float)column / (float)numberColumn + widthPadding; rect.top = (float)row / (float)numberRow + heightPadding; rect.right = rect.left + width; rect.bottom = rect.top + height; vmrMixerControl9.SetOutputRect(p, ref rect); } }
private void buildGraph(ITuningSpace tuningSpace, Tuner tuner, TuningSpec tuningSpec) { base.BuildGraph(); addNetworkProviderFilter(tuningSpace); infiniteTeeFilter = addInfiniteTeeFilter(); mpeg2DemuxFilter = addMPEG2DemuxFilter(); addBoardFilters(tuner); insertInfiniteTee(); addTransportStreamFilters(); addPSIMemoryFilter(); if (tuningSpec.Frequency.TunerType == TunerType.ATSC || tuningSpec.Frequency.TunerType == TunerType.ATSCCable || tuningSpec.Frequency.TunerType == TunerType.ClearQAM) connectDownStreamFilters(mpeg2DemuxFilter, MediaSubType.AtscSI); else connectDownStreamFilters(mpeg2DemuxFilter, MediaSubType.DvbSI); }
/// <summary> /// Creates the tuning space. /// </summary> protected void CreateTuningSpace() { Log.Log.WriteFile("dvbt:CreateTuningSpace()"); ITuner tuner = (ITuner)_filterNetworkProvider; SystemTuningSpaces systemTuningSpaces = new SystemTuningSpaces(); ITuningSpaceContainer container = systemTuningSpaces as ITuningSpaceContainer; if (container == null) { Log.Log.Error("CreateTuningSpace() Failed to get ITuningSpaceContainer"); return; } IEnumTuningSpaces enumTuning; ITuningSpace[] spaces = new ITuningSpace[2]; ITuneRequest request; container.get_EnumTuningSpaces(out enumTuning); while (true) { int fetched; enumTuning.Next(1, spaces, out fetched); if (fetched != 1) { break; } string name; spaces[0].get_UniqueName(out name); if (name == "MediaPortal DVBT TuningSpace") { Log.Log.WriteFile("dvbt:found correct tuningspace {0}", name); _tuningSpace = (IDVBTuningSpace)spaces[0]; tuner.put_TuningSpace(_tuningSpace); _tuningSpace.CreateTuneRequest(out request); _tuneRequest = (IDVBTuneRequest)request; return; } Release.ComObject("ITuningSpace", spaces[0]); } Release.ComObject("IEnumTuningSpaces", enumTuning); Log.Log.WriteFile("dvbt:Create new tuningspace"); _tuningSpace = (IDVBTuningSpace) new DVBTuningSpace(); IDVBTuningSpace tuningSpace = (IDVBTuningSpace)_tuningSpace; tuningSpace.put_UniqueName("MediaPortal DVBT TuningSpace"); tuningSpace.put_FriendlyName("MediaPortal DVBT TuningSpace"); tuningSpace.put__NetworkType(typeof(DVBTNetworkProvider).GUID); tuningSpace.put_SystemType(DVBSystemType.Terrestrial); IDVBTLocator locator = (IDVBTLocator) new DVBTLocator(); locator.put_CarrierFrequency(-1); locator.put_InnerFEC(FECMethod.MethodNotSet); locator.put_InnerFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_Modulation(ModulationType.ModNotSet); locator.put_OuterFEC(FECMethod.MethodNotSet); locator.put_OuterFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_SymbolRate(-1); object newIndex; _tuningSpace.put_DefaultLocator(locator); container.Add(_tuningSpace, out newIndex); tuner.put_TuningSpace(_tuningSpace); Release.ComObject("ITuningSpaceContainer", container); _tuningSpace.CreateTuneRequest(out request); _tuneRequest = request; }
private void addNetworkProviderFilter(ITuningSpace dvbTuningSpace) { Guid genProviderClsId = new Guid("{B2F3A67C-29DA-4C78-8831-091ED509A475}"); Guid networkProviderClsId; reply = dvbTuningSpace.get__NetworkType(out networkProviderClsId); LogMessage("Adding Network Provider"); LogMessage("Trying Generic Network Provider"); if (FilterGraphTools.IsThisComObjectInstalled(genProviderClsId)) { LogMessage("Adding Generic Network Provider"); this.networkProviderFilter = FilterGraphTools.AddFilterFromClsid(GraphBuilder, genProviderClsId, "Generic Network Provider"); LogMessage("Generic Provider added - setting tuning space"); reply = (this.networkProviderFilter as ITuner).put_TuningSpace(dvbTuningSpace); LogMessage("Tuning space set"); return; } LogMessage("Adding Network Specific Provider"); if (networkProviderClsId == typeof(DVBTNetworkProvider).GUID) { this.networkProviderFilter = FilterGraphTools.AddFilterFromClsid(GraphBuilder, networkProviderClsId, "DVBT Network Provider"); } else if (networkProviderClsId == typeof(DVBSNetworkProvider).GUID) { this.networkProviderFilter = FilterGraphTools.AddFilterFromClsid(GraphBuilder, networkProviderClsId, "DVBS Network Provider"); } else if (networkProviderClsId == typeof(ATSCNetworkProvider).GUID) { this.networkProviderFilter = FilterGraphTools.AddFilterFromClsid(GraphBuilder, networkProviderClsId, "ATSC Network Provider"); } else if (networkProviderClsId == typeof(DVBCNetworkProvider).GUID) { this.networkProviderFilter = FilterGraphTools.AddFilterFromClsid(GraphBuilder, networkProviderClsId, "DVBC Network Provider"); } else throw new ArgumentException("Tuning Space not supported"); LogMessage("Network Specific Provider added - setting tuning space"); reply = (this.networkProviderFilter as ITuner).put_TuningSpace(dvbTuningSpace); LogMessage("Tuning space set"); }
/// <summary> /// Creates the tuning space. /// </summary> protected void CreateTuningSpace() { Log.Log.WriteFile("atsc:CreateTuningSpace()"); ITuner tuner = (ITuner)_filterNetworkProvider; SystemTuningSpaces systemTuningSpaces = new SystemTuningSpaces(); ITuningSpaceContainer container = systemTuningSpaces as ITuningSpaceContainer; if (container == null) { Log.Log.Error("CreateTuningSpace() Failed to get ITuningSpaceContainer"); return; } IEnumTuningSpaces enumTuning; ITuningSpace[] spaces = new ITuningSpace[2]; ITuneRequest request; container.get_EnumTuningSpaces(out enumTuning); while (true) { int fetched; enumTuning.Next(1, spaces, out fetched); if (fetched != 1) break; string name; spaces[0].get_UniqueName(out name); if (name == "MediaPortal ATSC TuningSpace") { Log.Log.WriteFile("atsc:found correct tuningspace {0}", name); _tuningSpace = (IATSCTuningSpace)spaces[0]; tuner.put_TuningSpace(_tuningSpace); _tuningSpace.CreateTuneRequest(out request); _tuneRequest = (IATSCChannelTuneRequest)request; return; } Release.ComObject("ITuningSpace", spaces[0]); } Release.ComObject("IEnumTuningSpaces", enumTuning); Log.Log.WriteFile("atsc:Create new tuningspace"); _tuningSpace = (IATSCTuningSpace)new ATSCTuningSpace(); IATSCTuningSpace tuningSpace = (IATSCTuningSpace)_tuningSpace; tuningSpace.put_UniqueName("MediaPortal ATSC TuningSpace"); tuningSpace.put_FriendlyName("MediaPortal ATSC TuningSpace"); tuningSpace.put__NetworkType(typeof (ATSCNetworkProvider).GUID); tuningSpace.put_CountryCode(0); tuningSpace.put_InputType(TunerInputType.Antenna); tuningSpace.put_MaxMinorChannel(999); //minor channels per major tuningSpace.put_MaxPhysicalChannel(158); //69 for OTA 158 for QAM tuningSpace.put_MaxChannel(99); //major channels tuningSpace.put_MinMinorChannel(0); tuningSpace.put_MinPhysicalChannel(1); //OTA 1, QAM 2 tuningSpace.put_MinChannel(1); IATSCLocator locator = (IATSCLocator)new ATSCLocator(); locator.put_CarrierFrequency(-1); locator.put_InnerFEC(FECMethod.MethodNotSet); locator.put_InnerFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_Modulation(ModulationType.Mod8Vsb); //OTA modultation, QAM = .Mod256Qam locator.put_OuterFEC(FECMethod.MethodNotSet); locator.put_OuterFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_PhysicalChannel(-1); locator.put_SymbolRate(-1); locator.put_TSID(-1); object newIndex; _tuningSpace.put_DefaultLocator(locator); container.Add(_tuningSpace, out newIndex); tuner.put_TuningSpace(_tuningSpace); Release.ComObject("TuningSpaceContainer", container); _tuningSpace.CreateTuneRequest(out request); _tuneRequest = (IATSCChannelTuneRequest)request; }
/// <summary> /// Creates the tuning space. /// </summary> protected void CreateTuningSpace() { Log.Log.WriteFile("dvbs:CreateTuningSpace()"); ITuner tuner = (ITuner)_filterNetworkProvider; SystemTuningSpaces systemTuningSpaces = new SystemTuningSpaces(); ITuningSpaceContainer container = systemTuningSpaces as ITuningSpaceContainer; if (container == null) { Log.Log.Error("CreateTuningSpace() Failed to get ITuningSpaceContainer"); return; } IEnumTuningSpaces enumTuning; ITuningSpace[] spaces = new ITuningSpace[2]; int lowOsc; int hiOsc; int lnbSwitch; if (_parameters.UseDefaultLnbFrequencies) { lowOsc = 9750; hiOsc = 10600; lnbSwitch = 11700; } else { lowOsc = _parameters.LnbLowFrequency; hiOsc = _parameters.LnbHighFrequency; lnbSwitch = _parameters.LnbSwitchFrequency; } ITuneRequest request; container.get_EnumTuningSpaces(out enumTuning); IDVBSTuningSpace tuningSpace; while (true) { int fetched; enumTuning.Next(1, spaces, out fetched); if (fetched != 1) break; string name; spaces[0].get_UniqueName(out name); if (name == "MediaPortal DVBS TuningSpace") { Log.Log.WriteFile("dvbs:found correct tuningspace {0}", name); _tuningSpace = (IDVBSTuningSpace)spaces[0]; tuningSpace = (IDVBSTuningSpace)_tuningSpace; tuningSpace.put_LNBSwitch(lnbSwitch * 1000); tuningSpace.put_SpectralInversion(SpectralInversion.Automatic); tuningSpace.put_LowOscillator(lowOsc * 1000); tuningSpace.put_HighOscillator(hiOsc * 1000); tuner.put_TuningSpace(tuningSpace); tuningSpace.CreateTuneRequest(out request); _tuneRequest = (IDVBTuneRequest)request; return; } Release.ComObject("ITuningSpace", spaces[0]); } Release.ComObject("IEnumTuningSpaces", enumTuning); Log.Log.WriteFile("dvbs:Create new tuningspace"); _tuningSpace = (IDVBSTuningSpace)new DVBSTuningSpace(); tuningSpace = (IDVBSTuningSpace)_tuningSpace; tuningSpace.put_UniqueName("MediaPortal DVBS TuningSpace"); tuningSpace.put_FriendlyName("MediaPortal DVBS TuningSpace"); tuningSpace.put__NetworkType(typeof (DVBSNetworkProvider).GUID); tuningSpace.put_SystemType(DVBSystemType.Satellite); tuningSpace.put_LNBSwitch(lnbSwitch * 1000); tuningSpace.put_LowOscillator(lowOsc * 1000); tuningSpace.put_HighOscillator(hiOsc * 1000); IDVBSLocator locator = (IDVBSLocator)new DVBSLocator(); locator.put_CarrierFrequency(-1); locator.put_InnerFEC(FECMethod.MethodNotSet); locator.put_InnerFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_Modulation(ModulationType.ModNotSet); locator.put_OuterFEC(FECMethod.MethodNotSet); locator.put_OuterFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_SymbolRate(-1); object newIndex; _tuningSpace.put_DefaultLocator(locator); container.Add(_tuningSpace, out newIndex); tuner.put_TuningSpace(_tuningSpace); Release.ComObject("TuningSpaceContainer", container); _tuningSpace.CreateTuneRequest(out request); _tuneRequest = (IDVBTuneRequest)request; }
public void UpdateService(string serviceId, ITuningSpace tuningSpace, IGuideData guideData) { Trace.WriteLineIf(trace.TraceInfo, "EPG.UpdateService(" + serviceId + ")"); if (serviceId == null) UpdateAllService(guideData); else if (tuningSpace != null && NeedServiceUpdate(serviceId)) { // serviceId = "ONID:TSID:SID" string[] serviceIds = serviceId.Split(new char[] { ':' }); int onid = int.Parse(serviceIds[0]); int tsid = int.Parse(serviceIds[1]); int sid = int.Parse(serviceIds[2]); ITuneRequest tr; tuningSpace.CreateTuneRequest(out tr); IDVBTuneRequest tuneRequest = (IDVBTuneRequest)tr; tuneRequest.put_ONID(onid); tuneRequest.put_TSID(tsid); tuneRequest.put_SID(sid); UpdateService(tuneRequest, guideData); } }
private void BuildSinkGraph(ITuningSpace tuningSpace) { this.graphBuilder = (IFilterGraph2)new FilterGraph(); this.rot = new DsROTEntry(this.graphBuilder); this.epg = new EPG(this.hostingControl); this.cookiesSink = this.hostingControl.SubscribeEvents(this as VideoControl.IVideoEventHandler, this.graphBuilder as IMediaEventEx); AddNetworkProviderFilter(this.objTuningSpace); AddMPEG2DemuxFilter(); AddMpeg2VideoStreamAnalyzerFilter(); CreateMPEG2DemuxPins(); AddAndConnectBDABoardFilters(); if (this.tuner == null && this.capture == null) throw new ApplicationException("No BDA devices found!"); if (this.H264DecoderDevice != null || !isH264ElecardSpecialMode) { //+++ This order is to avoid a bug from the DirectShow AddAndConnectSectionsAndTablesFilterToGraph(); IMpeg2Data mpeg2Data = this.bdaSecTab as IMpeg2Data; ISectionList ppSectionList; int hr2 = mpeg2Data.GetTable(0, 0, null, 0, out ppSectionList); AddAndConnectTIFToGraph(); //--- } ConfigureTimeShiftingRegistry(); AddStreamBufferSinkFilter(); ConnectStreamBufferSinkFilter(); this.epg.RegisterEvent(TransportInformationFilter as IConnectionPointContainer); }
private void BuildMosaicGraph(ITuningSpace tuningSpace, ArrayList programs) { this.graphBuilder = (IFilterGraph2) new FilterGraph(); rot = new DsROTEntry(this.graphBuilder); // Method names should be self explanatory AddNetworkProviderFilter(tuningSpace); AddMPEG2DemuxFilter(); AddAndConnectBDABoardFilters(); AddTransportStreamFiltersToGraph(); AddRenderers(); //unsafe //{ IntPtr formatPtr = Marshal.AllocHGlobal(g_Mpeg2ProgramVideo.Length); Marshal.Copy(g_Mpeg2ProgramVideo, 0, formatPtr, g_Mpeg2ProgramVideo.Length); IMpeg2Demultiplexer mpeg2Demultiplexer = this.mpeg2Demux as IMpeg2Demultiplexer; for (int p = 1; p < programs.Count; p++) { PSI.PSIPMT pmt = (PSI.PSIPMT)programs[p]; PSI.PSIPMT.Data stream = (PSI.PSIPMT.Data)pmt.GetStreamByType(CodeTV.PSI.STREAM_TYPES.STREAMTYPE_13818_VIDEO); AMMediaType mediaType = new AMMediaType(); mediaType.majorType = MediaType.Video; mediaType.subType = MediaSubType.Mpeg2Video; mediaType.fixedSizeSamples = false; mediaType.temporalCompression = false; mediaType.sampleSize = 0; mediaType.formatType = FormatType.Mpeg2Video; mediaType.unkPtr = IntPtr.Zero; mediaType.formatSize = g_Mpeg2ProgramVideo.Length; mediaType.formatPtr = formatPtr; //mediaType.formatType = FormatType.Mpeg2Video; //mediaType.formatSize = 0; //mediaType.formatPtr = IntPtr.Zero; string pinName = "video" + p; IPin outputPin; int hr = mpeg2Demultiplexer.CreateOutputPin(mediaType, pinName, out outputPin); if (outputPin != null) { IMPEG2PIDMap mpeg2PIDMap = outputPin as IMPEG2PIDMap; if (mpeg2PIDMap != null) { hr = mpeg2PIDMap.MapPID(1, new int[] { stream.Pid }, MediaSampleContent.ElementaryStream); } Marshal.ReleaseComObject(outputPin); } } Marshal.FreeHGlobal(formatPtr); //} ConfigureVMR9InWindowlessMode(programs.Count); ConnectAllOutputFilters(); int numberColumn = 4; int numberRow = 4; float widthPadding = 0.01f; float heightPadding = 0.01f; float width = (1.0f / numberColumn) - 2.0f * widthPadding; float height = (1.0f / numberRow) - 2.0f * heightPadding; IVMRMixerControl9 vmrMixerControl9 = this.videoRenderer as IVMRMixerControl9; for (int p = 1; p < programs.Count; p++) { int column, row = Math.DivRem(p - 1, numberColumn, out column); NormalizedRect rect = new NormalizedRect(); rect.left = (float)column / (float)numberColumn + widthPadding; rect.top = (float)row / (float)numberRow + heightPadding; rect.right = rect.left + width; rect.bottom = rect.top + height; vmrMixerControl9.SetOutputRect(p, ref rect); } }
public void MakeTuneRequest() { int hr = 0; ILocator locator; // Get a tuning space for this network type tuningSpace = BDAUtils.GetTuningSpace(networkType); hr = tuner.put_TuningSpace(tuningSpace); DsError.ThrowExceptionForHR(hr); // Create a tune request from this tuning space tuneRequest = BDAUtils.CreateTuneRequest(tuningSpace); // Is it okay ? hr = tuner.Validate(tuneRequest); //DsError.ThrowExceptionForHR(hr); if (networkType == BDANetworkType.DVBT) { // Those values are valid for me but must be modified to be valid depending on your location hr = tuneRequest.get_Locator(out locator); DsError.ThrowExceptionForHR(hr); hr = locator.put_CarrierFrequency(586166); DsError.ThrowExceptionForHR(hr); hr = tuneRequest.put_Locator(locator); DsError.ThrowExceptionForHR(hr); Marshal.ReleaseComObject(locator); hr = (tuneRequest as IDVBTuneRequest).put_ONID(8442); DsError.ThrowExceptionForHR(hr); hr = (tuneRequest as IDVBTuneRequest).put_TSID(1); DsError.ThrowExceptionForHR(hr); hr = (tuneRequest as IDVBTuneRequest).put_SID(259); DsError.ThrowExceptionForHR(hr); /* * hr = locator.put_CarrierFrequency(522166); * DsError.ThrowExceptionForHR(hr); * * hr = tuneRequest.put_Locator(locator); * DsError.ThrowExceptionForHR(hr); * * Marshal.ReleaseComObject(locator); * * hr = (tuneRequest as IDVBTuneRequest).put_ONID(8442); * DsError.ThrowExceptionForHR(hr); * hr = (tuneRequest as IDVBTuneRequest).put_TSID(3); * DsError.ThrowExceptionForHR(hr); * hr = (tuneRequest as IDVBTuneRequest).put_SID(769); * DsError.ThrowExceptionForHR(hr); */ /* * hr = locator.put_CarrierFrequency(562166); * DsError.ThrowExceptionForHR(hr); * * hr = tuneRequest.put_Locator(locator); * DsError.ThrowExceptionForHR(hr); * * Marshal.ReleaseComObject(locator); * * hr = (tuneRequest as IDVBTuneRequest).put_ONID(8442); * DsError.ThrowExceptionForHR(hr); * hr = (tuneRequest as IDVBTuneRequest).put_TSID(6); * DsError.ThrowExceptionForHR(hr); * hr = (tuneRequest as IDVBTuneRequest).put_SID(1537); * DsError.ThrowExceptionForHR(hr); */ } if (networkType == BDANetworkType.DVBS) { // Those values are valid for me but must be modified to be valid depending on your Satellite dish /* * hr = tuneRequest.get_Locator(out locator); * DsError.ThrowExceptionForHR(hr); * * hr = locator.put_CarrierFrequency(11591000); * DsError.ThrowExceptionForHR(hr); * * hr = (locator as IDVBSLocator).put_SignalPolarisation(Polarisation.LinearV); * DsError.ThrowExceptionForHR(hr); * * hr = locator.put_SymbolRate(20000); * DsError.ThrowExceptionForHR(hr); * * hr = tuneRequest.put_Locator(locator); * DsError.ThrowExceptionForHR(hr); * * Marshal.ReleaseComObject(locator); * * hr = (tuneRequest as IDVBTuneRequest).put_ONID(8442); * DsError.ThrowExceptionForHR(hr); * hr = (tuneRequest as IDVBTuneRequest).put_TSID(1); * DsError.ThrowExceptionForHR(hr); * hr = (tuneRequest as IDVBTuneRequest).put_SID(260); * DsError.ThrowExceptionForHR(hr); */ hr = tuneRequest.get_Locator(out locator); DsError.ThrowExceptionForHR(hr); hr = locator.put_CarrierFrequency(11607000); DsError.ThrowExceptionForHR(hr); hr = (locator as IDVBSLocator).put_SignalPolarisation(Polarisation.LinearV); DsError.ThrowExceptionForHR(hr); hr = locator.put_SymbolRate(6944); DsError.ThrowExceptionForHR(hr); hr = tuneRequest.put_Locator(locator); DsError.ThrowExceptionForHR(hr); Marshal.ReleaseComObject(locator); hr = (tuneRequest as IDVBTuneRequest).put_ONID(144); DsError.ThrowExceptionForHR(hr); hr = (tuneRequest as IDVBTuneRequest).put_TSID(100); DsError.ThrowExceptionForHR(hr); hr = (tuneRequest as IDVBTuneRequest).put_SID(289); DsError.ThrowExceptionForHR(hr); } hr = tuner.put_TuneRequest(tuneRequest); if (hr < 0) { Debug.Fail("TuneRequest is not valid"); } }
private void BuildGraph() { int hr = 0; graphBuilder = (IFilterGraph2) new FilterGraph(); rot = new DsROTEntry(graphBuilder); ICaptureGraphBuilder2 capBuilder = (ICaptureGraphBuilder2) new CaptureGraphBuilder2(); capBuilder.SetFiltergraph(graphBuilder); // Get the BDA network provider specific for this given network type networkProvider = BDAUtils.GetNetworkProvider(networkType); hr = graphBuilder.AddFilter(networkProvider, "BDA Network Provider"); DsError.ThrowExceptionForHR(hr); tuner = (ITuner)networkProvider; // Get a tuning space for this network type tuningSpace = BDAUtils.GetTuningSpace(networkType); hr = tuner.put_TuningSpace(tuningSpace); DsError.ThrowExceptionForHR(hr); // Create a tune request from this tuning space tuneRequest = BDAUtils.CreateTuneRequest(tuningSpace); // Is it okay ? hr = tuner.Validate(tuneRequest); if (hr == 0) { // Set it hr = tuner.put_TuneRequest(tuneRequest); DsError.ThrowExceptionForHR(hr); // found a BDA Tuner and a BDA Capture that can connect to this network provider BDAUtils.AddBDATunerAndDemodulatorToGraph(graphBuilder, networkProvider, out bdaTuner, out bdaCapture); if ((bdaTuner != null) && (bdaCapture != null)) { // Create and add the mpeg2 demux mpeg2Demux = (IBaseFilter) new MPEG2Demultiplexer(); hr = graphBuilder.AddFilter(mpeg2Demux, "MPEG2 Demultiplexer"); DsError.ThrowExceptionForHR(hr); // connect it to the BDA Capture hr = capBuilder.RenderStream(null, null, bdaCapture, null, mpeg2Demux); DsError.ThrowExceptionForHR(hr); // Add the two mpeg2 transport stream helper filters BDAUtils.AddTransportStreamFiltersToGraph(graphBuilder, out bdaTIF, out bdaSecTab); if ((bdaTIF != null) && (bdaSecTab != null)) { // Render all the output pins of the demux (missing filters are added) for (int i = 0; i < 5; i++) { IPin pin = DsFindPin.ByDirection(mpeg2Demux, PinDirection.Output, i); hr = graphBuilder.Render(pin); Marshal.ReleaseComObject(pin); } } } } }
protected void AddNetworkProviderFilter(ITuningSpace tuningSpace) { int hr = 0; Guid genProviderClsId = new Guid("{B2F3A67C-29DA-4C78-8831-091ED509A475}"); Guid networkProviderClsId; // First test if the Generic Network Provider is available (only on MCE 2005 + Update Rollup 2) //if (FilterGraphTools.IsThisComObjectInstalled(genProviderClsId)) //{ // this.networkProvider = FilterGraphTools.AddFilterFromClsid(this.graphBuilder, genProviderClsId, "Generic Network Provider"); // hr = (this.networkProvider as ITuner).put_TuningSpace(tuningSpace); // return; //} // Get the network type of the requested Tuning Space hr = tuningSpace.get__NetworkType(out networkProviderClsId); // Get the network type of the requested Tuning Space if (networkProviderClsId == typeof(DVBTNetworkProvider).GUID) { this.networkProvider = FilterGraphTools.AddFilterFromClsid(this.graphBuilder, networkProviderClsId, "DVBT Network Provider"); } else if (networkProviderClsId == typeof(DVBSNetworkProvider).GUID) { this.networkProvider = FilterGraphTools.AddFilterFromClsid(this.graphBuilder, networkProviderClsId, "DVBS Network Provider"); } else if (networkProviderClsId == typeof(ATSCNetworkProvider).GUID) { this.networkProvider = FilterGraphTools.AddFilterFromClsid(this.graphBuilder, networkProviderClsId, "ATSC Network Provider"); } else if (networkProviderClsId == typeof(DVBCNetworkProvider).GUID) { this.networkProvider = FilterGraphTools.AddFilterFromClsid(this.graphBuilder, networkProviderClsId, "DVBC Network Provider"); } else // Tuning Space can also describe Analog TV but this application don't support them throw new ArgumentException("This application doesn't support this Tuning Space"); hr = (this.networkProvider as ITuner).put_TuningSpace(tuningSpace); }
/// <summary> /// Enumerate all tvcard devices and add them to the list /// </summary> private void DetectCards() { ITunerCap _providerType; bool genericNP = false; //SkyStar 2 & IP Streaming DsDevice[] devices = DsDevice.GetDevicesOfCat(FilterCategory.LegacyAmFilterCategory); for (int i = 0; i < devices.Length; ++i) { if (String.Compare(devices[i].Name, "B2C2 MPEG-2 Source", true) == 0) { Log.Log.WriteFile("Detected SkyStar 2 card"); TvCardDvbSS2 card = new TvCardDvbSS2(_epgEvents, devices[i]); _cards.Add(card); //break; maybe more than one B2C2 card ? } else if (String.Compare(devices[i].Name, "Elecard NWSource-Plus", true) == 0) { TvBusinessLayer layer = new TvBusinessLayer(); Setting setting; setting = layer.GetSetting("iptvCardCount", "1"); int iptvCardCount = Convert.ToInt32(setting.Value); for (int cardNum = 0; cardNum < iptvCardCount; cardNum++) { Log.Log.WriteFile("Detected IP TV Card " + cardNum); TvCardDVBIP card = new TvCardDVBIPElecard(_epgEvents, devices[i], cardNum); _cards.Add(card); } } else if (String.Compare(devices[i].Name, "MediaPortal IPTV Source Filter", true) == 0) { TvBusinessLayer layer = new TvBusinessLayer(); Setting setting; setting = layer.GetSetting("iptvCardCount", "1"); int iptvCardCount = Convert.ToInt32(setting.Value); for (int cardNum = 0; cardNum < iptvCardCount; cardNum++) { Log.Log.WriteFile("Detected IP TV Card " + cardNum); TvCardDVBIP card = new TvCardDVBIPBuiltIn(_epgEvents, devices[i], cardNum); _cards.Add(card); } } } //Hauppauge HD PVR & Colossus devices = DsDevice.GetDevicesOfCat(FilterCategory.AMKSCrossbar); for (int i = 0; i < devices.Length; ++i) { if (devices[i].Name == null) { continue; } if (devices[i].Name.Equals("Hauppauge HD PVR Crossbar")) { Log.Log.WriteFile("Detected Hauppauge HD PVR"); TvCardHDPVR card = new TvCardHDPVR(devices[i]); _cards.Add(card); } else if (devices[i].Name.Contains("Hauppauge Colossus Crossbar")) { Log.Log.WriteFile("Detected Hauppauge Colossus"); TvCardHDPVR card = new TvCardHDPVR(devices[i]); _cards.Add(card); } } //BDA TV devices devices = DsDevice.GetDevicesOfCat(FilterCategory.BDASourceFiltersCategory); if (devices.Length > 0) { IFilterGraph2 graphBuilder = (IFilterGraph2) new FilterGraph(); DsROTEntry rotEntry = new DsROTEntry(graphBuilder); Guid networkProviderClsId = new Guid("{D7D42E5C-EB36-4aad-933B-B4C419429C98}"); if (FilterGraphTools.IsThisComObjectInstalled(networkProviderClsId)) { handleInternalNetworkProviderFilter(devices, graphBuilder, networkProviderClsId, rotEntry); } else { ITuningSpace tuningSpace = null; ILocator locator = null; //DVBT IBaseFilter networkDVBT = null; try { networkProviderClsId = typeof(DVBTNetworkProvider).GUID; networkDVBT = FilterGraphTools.AddFilterFromClsid(graphBuilder, networkProviderClsId, "DVBT Network Provider"); tuningSpace = (ITuningSpace) new DVBTuningSpace(); tuningSpace.put_UniqueName("DVBT TuningSpace"); tuningSpace.put_FriendlyName("DVBT TuningSpace"); tuningSpace.put__NetworkType(typeof(DVBTNetworkProvider).GUID); ((IDVBTuningSpace)tuningSpace).put_SystemType(DVBSystemType.Terrestrial); locator = (ILocator) new DVBTLocator(); locator.put_CarrierFrequency(-1); locator.put_InnerFEC(FECMethod.MethodNotSet); locator.put_InnerFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_Modulation(ModulationType.ModNotSet); locator.put_OuterFEC(FECMethod.MethodNotSet); locator.put_OuterFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_SymbolRate(-1); tuningSpace.put_DefaultLocator(locator); ((ITuner)networkDVBT).put_TuningSpace(tuningSpace); } catch (Exception ex) { Log.Log.Error("DVBT card detection error: {0}", ex.ToString()); } //DVBS networkProviderClsId = typeof(DVBSNetworkProvider).GUID; IBaseFilter networkDVBS = FilterGraphTools.AddFilterFromClsid(graphBuilder, networkProviderClsId, "DVBS Network Provider"); tuningSpace = (ITuningSpace) new DVBSTuningSpace(); tuningSpace.put_UniqueName("DVBS TuningSpace"); tuningSpace.put_FriendlyName("DVBS TuningSpace"); tuningSpace.put__NetworkType(typeof(DVBSNetworkProvider).GUID); ((IDVBSTuningSpace)tuningSpace).put_SystemType(DVBSystemType.Satellite); locator = (ILocator) new DVBTLocator(); locator.put_CarrierFrequency(-1); locator.put_InnerFEC(FECMethod.MethodNotSet); locator.put_InnerFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_Modulation(ModulationType.ModNotSet); locator.put_OuterFEC(FECMethod.MethodNotSet); locator.put_OuterFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_SymbolRate(-1); tuningSpace.put_DefaultLocator(locator); ((ITuner)networkDVBS).put_TuningSpace(tuningSpace); //ATSC networkProviderClsId = typeof(ATSCNetworkProvider).GUID; IBaseFilter networkATSC = FilterGraphTools.AddFilterFromClsid(graphBuilder, networkProviderClsId, "ATSC Network Provider"); tuningSpace = (ITuningSpace) new ATSCTuningSpace(); tuningSpace.put_UniqueName("ATSC TuningSpace"); tuningSpace.put_FriendlyName("ATSC TuningSpace"); ((IATSCTuningSpace)tuningSpace).put_MaxChannel(10000); ((IATSCTuningSpace)tuningSpace).put_MaxMinorChannel(10000); ((IATSCTuningSpace)tuningSpace).put_MinChannel(0); ((IATSCTuningSpace)tuningSpace).put_MinMinorChannel(0); ((IATSCTuningSpace)tuningSpace).put_MinPhysicalChannel(0); ((IATSCTuningSpace)tuningSpace).put_InputType(TunerInputType.Antenna); locator = (IATSCLocator) new ATSCLocator(); locator.put_CarrierFrequency(-1); locator.put_InnerFEC(FECMethod.MethodNotSet); locator.put_InnerFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_Modulation(ModulationType.ModNotSet); locator.put_OuterFEC(FECMethod.MethodNotSet); locator.put_OuterFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_SymbolRate(-1); locator.put_CarrierFrequency(-1); ((IATSCLocator)locator).put_PhysicalChannel(-1); ((IATSCLocator)locator).put_TSID(-1); tuningSpace.put_DefaultLocator(locator); ((ITuner)networkATSC).put_TuningSpace(tuningSpace); //DVBC networkProviderClsId = typeof(DVBCNetworkProvider).GUID; IBaseFilter networkDVBC = FilterGraphTools.AddFilterFromClsid(graphBuilder, networkProviderClsId, "DVBC Network Provider"); tuningSpace = (ITuningSpace) new DVBTuningSpace(); tuningSpace.put_UniqueName("DVBC TuningSpace"); tuningSpace.put_FriendlyName("DVBC TuningSpace"); tuningSpace.put__NetworkType(typeof(DVBCNetworkProvider).GUID); ((IDVBTuningSpace)tuningSpace).put_SystemType(DVBSystemType.Cable); locator = (ILocator) new DVBCLocator(); locator.put_CarrierFrequency(-1); locator.put_InnerFEC(FECMethod.MethodNotSet); locator.put_InnerFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_Modulation(ModulationType.ModNotSet); locator.put_OuterFEC(FECMethod.MethodNotSet); locator.put_OuterFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_SymbolRate(-1); tuningSpace.put_DefaultLocator(locator); ((ITuner)networkDVBC).put_TuningSpace(tuningSpace); //MS Network Provider - MCE Roll-up 2 or better networkProviderClsId = typeof(NetworkProvider).GUID; // First test if the Generic Network Provider is available (only on MCE 2005 + Update Rollup 2) if (FilterGraphTools.IsThisComObjectInstalled(networkProviderClsId)) { genericNP = true; } for (int i = 0; i < devices.Length; i++) { bool connected = false; bool isCablePreferred = false; string name = devices[i].Name ?? "unknown"; name = name.ToLowerInvariant(); Log.Log.WriteFile("Found card:{0}", name); //silicondust work-around for dvb type detection issue. generic provider would always use dvb-t if (name.Contains("silicondust hdhomerun tuner")) { isCablePreferred = CheckHDHomerunCablePrefered(name); Log.Log.WriteFile("silicondust hdhomerun detected - prefer cable mode: {0}", isCablePreferred); } IBaseFilter tmp; try { graphBuilder.AddSourceFilterForMoniker(devices[i].Mon, null, name, out tmp); } catch (InvalidComObjectException) { //ignore bad card Log.Log.WriteFile("cannot add filter {0} to graph", devices[i].Name); continue; } //Use the Microsoft Network Provider method first but only if available if (genericNP) { IBaseFilter networkDVB = FilterGraphTools.AddFilterFromClsid(graphBuilder, networkProviderClsId, "Microsoft Network Provider"); if (ConnectFilter(graphBuilder, networkDVB, tmp)) { Log.Log.WriteFile("Detected DVB card:{0}", name); // determine the DVB card supported GUIDs here! _providerType = networkDVB as ITunerCap; int ulcNetworkTypesMax = 5; int pulcNetworkTypes; Guid[] pguidNetworkTypes = new Guid[ulcNetworkTypesMax]; int hr = _providerType.get_SupportedNetworkTypes(ulcNetworkTypesMax, out pulcNetworkTypes, pguidNetworkTypes); for (int n = 0; n < pulcNetworkTypes; n++) { Log.Log.Debug("Detecting type by MSNP {0}: {1}", n, pguidNetworkTypes[n]); //test the first found guid to determine the DVB card type if (pguidNetworkTypes[n] == (typeof(DVBTNetworkProvider).GUID) && !isCablePreferred) { Log.Log.WriteFile("Detected DVB-T* card:{0}", name); TvCardDVBT dvbtCard = new TvCardDVBT(_epgEvents, devices[i]); _cards.Add(dvbtCard); connected = true; } else if (pguidNetworkTypes[n] == (typeof(DVBSNetworkProvider).GUID) && !isCablePreferred) { Log.Log.WriteFile("Detected DVB-S* card:{0}", name); TvCardDVBS dvbsCard = new TvCardDVBS(_epgEvents, devices[i]); _cards.Add(dvbsCard); connected = true; } else if (pguidNetworkTypes[n] == (typeof(DVBCNetworkProvider).GUID)) { Log.Log.WriteFile("Detected DVB-C* card:{0}", name); TvCardDVBC dvbcCard = new TvCardDVBC(_epgEvents, devices[i]); _cards.Add(dvbcCard); connected = true; } else if (pguidNetworkTypes[n] == (typeof(ATSCNetworkProvider).GUID)) { Log.Log.WriteFile("Detected ATSC* card:{0}", name); TvCardATSC dvbsCard = new TvCardATSC(_epgEvents, devices[i]); _cards.Add(dvbsCard); connected = true; } if (connected) { graphBuilder.RemoveFilter(tmp); Release.ComObject("tmp filter", tmp); break; // already found one, no need to continue } else if (n == (pulcNetworkTypes - 1)) { Log.Log.WriteFile("Connected with generic MS Network Provider however network types don't match, using the original method"); } } } else { Log.Log.WriteFile("Not connected with generic MS Network Provider, using the original method"); connected = false; } graphBuilder.RemoveFilter(networkDVB); Release.ComObject("ms provider", networkDVB); } if (!genericNP || !connected) { if (ConnectFilter(graphBuilder, networkDVBT, tmp)) { Log.Log.WriteFile("Detected DVB-T card:{0}", name); TvCardDVBT dvbtCard = new TvCardDVBT(_epgEvents, devices[i]); _cards.Add(dvbtCard); } else if (ConnectFilter(graphBuilder, networkDVBC, tmp)) { Log.Log.WriteFile("Detected DVB-C card:{0}", name); TvCardDVBC dvbcCard = new TvCardDVBC(_epgEvents, devices[i]); _cards.Add(dvbcCard); } else if (ConnectFilter(graphBuilder, networkDVBS, tmp)) { Log.Log.WriteFile("Detected DVB-S card:{0}", name); TvCardDVBS dvbsCard = new TvCardDVBS(_epgEvents, devices[i]); _cards.Add(dvbsCard); } else if (ConnectFilter(graphBuilder, networkATSC, tmp)) { Log.Log.WriteFile("Detected ATSC card:{0}", name); TvCardATSC dvbsCard = new TvCardATSC(_epgEvents, devices[i]); _cards.Add(dvbsCard); } graphBuilder.RemoveFilter(tmp); Release.ComObject("tmp filter", tmp); } } FilterGraphTools.RemoveAllFilters(graphBuilder); Release.ComObject("dvbc provider", networkDVBC); Release.ComObject("atsc provider", networkATSC); Release.ComObject("dvbs provider", networkDVBS); Release.ComObject("dvbt provider", networkDVBT); rotEntry.Dispose(); Release.ComObject("graph builder", graphBuilder); } } //Analogue TV devices devices = DsDevice.GetDevicesOfCat(FilterCategory.AMKSTVTuner); for (int i = 0; i < devices.Length; i++) { string name = devices[i].Name ?? "unknown"; name = name.ToLowerInvariant(); Log.Log.WriteFile("Detected analog card:{0}", name); TvCardAnalog analogCard = new TvCardAnalog(devices[i]); _cards.Add(analogCard); } _cards.Add(new RadioWebStreamCard()); }
private void InitBdaDetectionGraph() { Log.Log.Debug("Initialise BDA device detection graph"); _graphBuilder = (IFilterGraph2) new FilterGraph(); _rotEntry = new DsROTEntry(_graphBuilder); Guid mpNetworkProviderClsId = new Guid("{D7D42E5C-EB36-4aad-933B-B4C419429C98}"); if (FilterGraphTools.IsThisComObjectInstalled(mpNetworkProviderClsId)) { _mpNp = FilterGraphTools.AddFilterFromClsid(_graphBuilder, mpNetworkProviderClsId, "MediaPortal Network Provider"); return; } ITuningSpace tuningSpace = null; ILocator locator = null; // ATSC _atscNp = FilterGraphTools.AddFilterFromClsid(_graphBuilder, typeof(ATSCNetworkProvider).GUID, "ATSC Network Provider"); tuningSpace = (ITuningSpace) new ATSCTuningSpace(); tuningSpace.put_UniqueName("ATSC TuningSpace"); tuningSpace.put_FriendlyName("ATSC TuningSpace"); ((IATSCTuningSpace)tuningSpace).put_MaxChannel(10000); ((IATSCTuningSpace)tuningSpace).put_MaxMinorChannel(10000); ((IATSCTuningSpace)tuningSpace).put_MinChannel(0); ((IATSCTuningSpace)tuningSpace).put_MinMinorChannel(0); ((IATSCTuningSpace)tuningSpace).put_MinPhysicalChannel(0); ((IATSCTuningSpace)tuningSpace).put_InputType(TunerInputType.Antenna); locator = (IATSCLocator) new ATSCLocator(); locator.put_CarrierFrequency(-1); locator.put_InnerFEC(FECMethod.MethodNotSet); locator.put_InnerFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_Modulation(ModulationType.ModNotSet); locator.put_OuterFEC(FECMethod.MethodNotSet); locator.put_OuterFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_SymbolRate(-1); locator.put_CarrierFrequency(-1); ((IATSCLocator)locator).put_PhysicalChannel(-1); ((IATSCLocator)locator).put_TSID(-1); tuningSpace.put_DefaultLocator(locator); ((ITuner)_atscNp).put_TuningSpace(tuningSpace); // DVB-C _dvbcNp = FilterGraphTools.AddFilterFromClsid(_graphBuilder, typeof(DVBCNetworkProvider).GUID, "DVB-C Network Provider"); tuningSpace = (ITuningSpace) new DVBTuningSpace(); tuningSpace.put_UniqueName("DVB-C TuningSpace"); tuningSpace.put_FriendlyName("DVB-C TuningSpace"); tuningSpace.put__NetworkType(typeof(DVBCNetworkProvider).GUID); ((IDVBTuningSpace)tuningSpace).put_SystemType(DVBSystemType.Cable); locator = (ILocator) new DVBCLocator(); locator.put_CarrierFrequency(-1); locator.put_InnerFEC(FECMethod.MethodNotSet); locator.put_InnerFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_Modulation(ModulationType.ModNotSet); locator.put_OuterFEC(FECMethod.MethodNotSet); locator.put_OuterFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_SymbolRate(-1); tuningSpace.put_DefaultLocator(locator); ((ITuner)_dvbcNp).put_TuningSpace(tuningSpace); // DVB-S _dvbsNp = FilterGraphTools.AddFilterFromClsid(_graphBuilder, typeof(DVBSNetworkProvider).GUID, "DVB-S Network Provider"); tuningSpace = (ITuningSpace) new DVBSTuningSpace(); tuningSpace.put_UniqueName("DVB-S TuningSpace"); tuningSpace.put_FriendlyName("DVB-S TuningSpace"); tuningSpace.put__NetworkType(typeof(DVBSNetworkProvider).GUID); ((IDVBSTuningSpace)tuningSpace).put_SystemType(DVBSystemType.Satellite); locator = (ILocator) new DVBTLocator(); locator.put_CarrierFrequency(-1); locator.put_InnerFEC(FECMethod.MethodNotSet); locator.put_InnerFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_Modulation(ModulationType.ModNotSet); locator.put_OuterFEC(FECMethod.MethodNotSet); locator.put_OuterFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_SymbolRate(-1); tuningSpace.put_DefaultLocator(locator); ((ITuner)_dvbsNp).put_TuningSpace(tuningSpace); // DVB-T _dvbtNp = FilterGraphTools.AddFilterFromClsid(_graphBuilder, typeof(DVBTNetworkProvider).GUID, "DVB-T Network Provider"); tuningSpace = (ITuningSpace) new DVBTuningSpace(); tuningSpace.put_UniqueName("DVB-T TuningSpace"); tuningSpace.put_FriendlyName("DVB-T TuningSpace"); tuningSpace.put__NetworkType(typeof(DVBTNetworkProvider).GUID); ((IDVBTuningSpace)tuningSpace).put_SystemType(DVBSystemType.Terrestrial); locator = (ILocator) new DVBTLocator(); locator.put_CarrierFrequency(-1); locator.put_InnerFEC(FECMethod.MethodNotSet); locator.put_InnerFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_Modulation(ModulationType.ModNotSet); locator.put_OuterFEC(FECMethod.MethodNotSet); locator.put_OuterFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_SymbolRate(-1); tuningSpace.put_DefaultLocator(locator); ((ITuner)_dvbtNp).put_TuningSpace(tuningSpace); }
/// <summary> /// Creates the tuning space. /// </summary> protected void CreateTuningSpace() { Log.Log.WriteFile("atsc:CreateTuningSpace()"); ITuner tuner = (ITuner)_filterNetworkProvider; SystemTuningSpaces systemTuningSpaces = new SystemTuningSpaces(); ITuningSpaceContainer container = systemTuningSpaces as ITuningSpaceContainer; if (container == null) { Log.Log.Error("CreateTuningSpace() Failed to get ITuningSpaceContainer"); return; } IEnumTuningSpaces enumTuning; ITuningSpace[] spaces = new ITuningSpace[2]; ITuneRequest request; container.get_EnumTuningSpaces(out enumTuning); while (true) { int fetched; enumTuning.Next(1, spaces, out fetched); if (fetched != 1) { break; } string name; spaces[0].get_UniqueName(out name); if (name == "MediaPortal ATSC TuningSpace") { Log.Log.WriteFile("atsc:found correct tuningspace {0}", name); _tuningSpace = (IATSCTuningSpace)spaces[0]; tuner.put_TuningSpace(_tuningSpace); _tuningSpace.CreateTuneRequest(out request); _tuneRequest = (IATSCChannelTuneRequest)request; return; } Release.ComObject("ITuningSpace", spaces[0]); } Release.ComObject("IEnumTuningSpaces", enumTuning); Log.Log.WriteFile("atsc:Create new tuningspace"); _tuningSpace = (IATSCTuningSpace) new ATSCTuningSpace(); IATSCTuningSpace tuningSpace = (IATSCTuningSpace)_tuningSpace; tuningSpace.put_UniqueName("MediaPortal ATSC TuningSpace"); tuningSpace.put_FriendlyName("MediaPortal ATSC TuningSpace"); tuningSpace.put__NetworkType(typeof(ATSCNetworkProvider).GUID); tuningSpace.put_CountryCode(0); tuningSpace.put_InputType(TunerInputType.Antenna); tuningSpace.put_MaxMinorChannel(999); //minor channels per major tuningSpace.put_MaxPhysicalChannel(158); //69 for OTA 158 for QAM tuningSpace.put_MaxChannel(99); //major channels tuningSpace.put_MinMinorChannel(0); tuningSpace.put_MinPhysicalChannel(1); //OTA 1, QAM 2 tuningSpace.put_MinChannel(1); IATSCLocator locator = (IATSCLocator) new ATSCLocator(); locator.put_CarrierFrequency(-1); locator.put_InnerFEC(FECMethod.MethodNotSet); locator.put_InnerFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_Modulation(ModulationType.Mod8Vsb); //OTA modultation, QAM = .Mod256Qam locator.put_OuterFEC(FECMethod.MethodNotSet); locator.put_OuterFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_PhysicalChannel(-1); locator.put_SymbolRate(-1); locator.put_TSID(-1); object newIndex; _tuningSpace.put_DefaultLocator(locator); container.Add(_tuningSpace, out newIndex); tuner.put_TuningSpace(_tuningSpace); Release.ComObject("TuningSpaceContainer", container); _tuningSpace.CreateTuneRequest(out request); _tuneRequest = (IATSCChannelTuneRequest)request; }
/// <summary> /// Creates the tuning space. /// </summary> protected void CreateTuningSpace() { Log.Log.WriteFile("dvbs:CreateTuningSpace()"); ITuner tuner = (ITuner)_filterNetworkProvider; SystemTuningSpaces systemTuningSpaces = new SystemTuningSpaces(); ITuningSpaceContainer container = systemTuningSpaces as ITuningSpaceContainer; if (container == null) { Log.Log.Error("CreateTuningSpace() Failed to get ITuningSpaceContainer"); return; } IEnumTuningSpaces enumTuning; ITuningSpace[] spaces = new ITuningSpace[2]; int lowOsc; int hiOsc; int lnbSwitch; if (_parameters.UseDefaultLnbFrequencies) { lowOsc = 9750; hiOsc = 10600; lnbSwitch = 11700; } else { lowOsc = _parameters.LnbLowFrequency; hiOsc = _parameters.LnbHighFrequency; lnbSwitch = _parameters.LnbSwitchFrequency; } ITuneRequest request; container.get_EnumTuningSpaces(out enumTuning); IDVBSTuningSpace tuningSpace; while (true) { int fetched; enumTuning.Next(1, spaces, out fetched); if (fetched != 1) { break; } string name; spaces[0].get_UniqueName(out name); if (name == "MediaPortal DVBS TuningSpace") { Log.Log.WriteFile("dvbs:found correct tuningspace {0}", name); _tuningSpace = (IDVBSTuningSpace)spaces[0]; tuningSpace = (IDVBSTuningSpace)_tuningSpace; tuningSpace.put_LNBSwitch(lnbSwitch * 1000); tuningSpace.put_SpectralInversion(SpectralInversion.Automatic); tuningSpace.put_LowOscillator(lowOsc * 1000); tuningSpace.put_HighOscillator(hiOsc * 1000); tuner.put_TuningSpace(tuningSpace); tuningSpace.CreateTuneRequest(out request); _tuneRequest = (IDVBTuneRequest)request; return; } Release.ComObject("ITuningSpace", spaces[0]); } Release.ComObject("IEnumTuningSpaces", enumTuning); Log.Log.WriteFile("dvbs:Create new tuningspace"); _tuningSpace = (IDVBSTuningSpace) new DVBSTuningSpace(); tuningSpace = (IDVBSTuningSpace)_tuningSpace; tuningSpace.put_UniqueName("MediaPortal DVBS TuningSpace"); tuningSpace.put_FriendlyName("MediaPortal DVBS TuningSpace"); tuningSpace.put__NetworkType(typeof(DVBSNetworkProvider).GUID); tuningSpace.put_SystemType(DVBSystemType.Satellite); tuningSpace.put_LNBSwitch(lnbSwitch * 1000); tuningSpace.put_LowOscillator(lowOsc * 1000); tuningSpace.put_HighOscillator(hiOsc * 1000); IDVBSLocator locator = (IDVBSLocator) new DVBSLocator(); locator.put_CarrierFrequency(-1); locator.put_InnerFEC(FECMethod.MethodNotSet); locator.put_InnerFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_Modulation(ModulationType.ModNotSet); locator.put_OuterFEC(FECMethod.MethodNotSet); locator.put_OuterFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_SymbolRate(-1); object newIndex; _tuningSpace.put_DefaultLocator(locator); container.Add(_tuningSpace, out newIndex); tuner.put_TuningSpace(_tuningSpace); Release.ComObject("TuningSpaceContainer", container); _tuningSpace.CreateTuneRequest(out request); _tuneRequest = (IDVBTuneRequest)request; }
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"); }
/// <summary> /// Creates the tuning space. /// </summary> protected void CreateTuningSpace() { Log.Log.WriteFile("dvbt:CreateTuningSpace()"); ITuner tuner = (ITuner)_filterNetworkProvider; SystemTuningSpaces systemTuningSpaces = new SystemTuningSpaces(); ITuningSpaceContainer container = systemTuningSpaces as ITuningSpaceContainer; if (container == null) { Log.Log.Error("CreateTuningSpace() Failed to get ITuningSpaceContainer"); return; } IEnumTuningSpaces enumTuning; ITuningSpace[] spaces = new ITuningSpace[2]; ITuneRequest request; container.get_EnumTuningSpaces(out enumTuning); while (true) { int fetched; enumTuning.Next(1, spaces, out fetched); if (fetched != 1) break; string name; spaces[0].get_UniqueName(out name); if (name == "MediaPortal DVBT TuningSpace") { Log.Log.WriteFile("dvbt:found correct tuningspace {0}", name); _tuningSpace = (IDVBTuningSpace)spaces[0]; tuner.put_TuningSpace(_tuningSpace); _tuningSpace.CreateTuneRequest(out request); _tuneRequest = (IDVBTuneRequest)request; return; } Release.ComObject("ITuningSpace", spaces[0]); } Release.ComObject("IEnumTuningSpaces", enumTuning); Log.Log.WriteFile("dvbt:Create new tuningspace"); _tuningSpace = (IDVBTuningSpace)new DVBTuningSpace(); IDVBTuningSpace tuningSpace = (IDVBTuningSpace)_tuningSpace; tuningSpace.put_UniqueName("MediaPortal DVBT TuningSpace"); tuningSpace.put_FriendlyName("MediaPortal DVBT TuningSpace"); tuningSpace.put__NetworkType(typeof (DVBTNetworkProvider).GUID); tuningSpace.put_SystemType(DVBSystemType.Terrestrial); IDVBTLocator locator = (IDVBTLocator)new DVBTLocator(); locator.put_CarrierFrequency(-1); locator.put_InnerFEC(FECMethod.MethodNotSet); locator.put_InnerFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_Modulation(ModulationType.ModNotSet); locator.put_OuterFEC(FECMethod.MethodNotSet); locator.put_OuterFECRate(BinaryConvolutionCodeRate.RateNotSet); locator.put_SymbolRate(-1); object newIndex; _tuningSpace.put_DefaultLocator(locator); container.Add(_tuningSpace, out newIndex); tuner.put_TuningSpace(_tuningSpace); Release.ComObject("ITuningSpaceContainer", container); _tuningSpace.CreateTuneRequest(out request); _tuneRequest = request; }
public DigitalTuner(Config.Graph sourceConfig, Control hostControl) : base(sourceConfig, hostControl) { //deal with the Tuning Space and Network Provider tuningSpace = GetTuningSpace(); Guid networkProviderCLSID; Guid networkTypeCLSID; tuningSpace.get__NetworkType(out networkTypeCLSID); if (networkTypeCLSID.Equals(Guid.Empty)) { throw new Exception("Not a digital Network Type!"); } if (UseGenericNetworkProvider) { networkProviderCLSID = CLSID_NetworkProvider; } else { networkProviderCLSID = networkTypeCLSID; } networkProvider = (IBaseFilter)Activator.CreateInstance(Type.GetTypeFromCLSID(networkProviderCLSID)); tuner = (ITuner)networkProvider; // if (UseGenericNetworkProvider) { tuner.put_TuningSpace(tuningSpace); } int hr = _graphBuilder.AddFilter(networkProvider, "Network Provider"); DsError.ThrowExceptionForHR(hr); //add MPEG2 Demux mpeg2Demux = FilterGraphTools.AddFilterByName(_graphBuilder, FilterCategory.LegacyAmFilterCategory, "MPEG-2 Demultiplexer"); //add video decoder videoDecoder = FilterGraphTools.AddFilterByName(_graphBuilder, FilterCategory.LegacyAmFilterCategory, GraphConfig[FilterType.VideoDecoder].Name); if (videoDecoder == null) { throw new Exception("Could not instantiate video decoder!"); } //add audio decoder if (GraphConfig[FilterType.AudioDecoder] != null) { audioDecoder = FilterGraphTools.AddFilterByName(_graphBuilder, FilterCategory.LegacyAmFilterCategory, GraphConfig[FilterType.AudioDecoder].Name); if (audioDecoder == null) { throw new Exception("Could not instantiate audio decoder!"); } } //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"); // sampleGrabberFilter = FilterGraphTools.AddFilterByName(_graphBuilder, FilterCategory.LegacyAmFilterCategory, "SampleGrabber"); // sampleGrabber = (ISampleGrabber)sampleGrabberFilter; }