public override bool NeedToRebuildTheGraph(ChannelTV newChannel) { return !(newChannel is ChannelDVB) || base.NeedToRebuildTheGraph(newChannel) || (newChannel as ChannelDVB).AudioDecoderType != AudioDecoderType || (newChannel as ChannelDVB).AudioDecoderDevice != AudioDecoderDevice || (newChannel as ChannelDVB).VideoDecoderType != VideoDecoderType || (newChannel as ChannelDVB).H264DecoderDevice != H264DecoderDevice || (newChannel as ChannelDVB).MPEG2DecoderDevice != MPEG2DecoderDevice || (newChannel as ChannelDVB).TunerDevice != TunerDevice || (newChannel as ChannelDVB).CaptureDevice != CaptureDevice || (newChannel as ChannelDVB).ReferenceClock != ReferenceClock; }
public override bool NeedToRebuildTheGraph(ChannelTV newChannel) { return !(newChannel is ChannelDVBT) || base.NeedToRebuildTheGraph(newChannel); }
public override bool NeedToRebuildTheGraph(ChannelTV newChannel) { return !(newChannel is ChannelAnalogic) || base.NeedToRebuildTheGraph(newChannel) || (newChannel as ChannelAnalogic).VideoCaptureDeviceName != VideoCaptureDeviceName || (newChannel as ChannelAnalogic).AudioCaptureDeviceName != AudioCaptureDeviceName || !(newChannel as ChannelAnalogic).FormatOfCapture.Equals(FormatOfCapture); }
public virtual bool NeedToRebuildTheGraph(ChannelTV newChannel) { return newChannel.AudioRendererDevice != AudioRendererDevice; }
public FrequencyEditorForm(ChannelTV channel) { InitializeComponent(); this.channel = channel; }
public static void PopulateChannelWithTransponderSettings(ref ChannelTV channel, string frequency) { string[] fields = frequency.Split(new char[] { ',' }); if (channel is ChannelDVBT) { //Channelname,Frequency(KHz),Inversion(0,1),0,Bandwidth (7MHz=1, 8MHz=2) //C05,177.500,0,0,1 ChannelDVBT channelDVBT = channel as ChannelDVBT; channelDVBT.Frequency = int.Parse(fields[1].Trim().Replace(".", "")); channelDVBT.Bandwidth = (fields[4].Trim() == "1" ? 7 : 8); } else if (channel is ChannelDVBC) { //Frequency(KHz), Symbolrate(Ks/s), QAM //50500,6900,0 //57500,6900,64 ChannelDVBC channelDVBC = channel as ChannelDVBC; channelDVBC.Frequency = int.Parse(fields[0].Trim().Replace(".", "")); channelDVBC.SymbolRate = int.Parse(fields[1].Trim()); int modulation = int.Parse(fields[2].Trim()); switch (modulation) { case 0: channelDVBC.Modulation = DirectShowLib.BDA.ModulationType.ModNotSet; break; case 16: channelDVBC.Modulation = DirectShowLib.BDA.ModulationType.Mod16Qam; break; case 32: channelDVBC.Modulation = DirectShowLib.BDA.ModulationType.Mod32Qam; break; case 64: channelDVBC.Modulation = DirectShowLib.BDA.ModulationType.Mod64Qam; break; case 80: channelDVBC.Modulation = DirectShowLib.BDA.ModulationType.Mod80Qam; break; case 96: channelDVBC.Modulation = DirectShowLib.BDA.ModulationType.Mod96Qam; break; case 112: channelDVBC.Modulation = DirectShowLib.BDA.ModulationType.Mod112Qam; break; case 128: channelDVBC.Modulation = DirectShowLib.BDA.ModulationType.Mod128Qam; break; case 160: channelDVBC.Modulation = DirectShowLib.BDA.ModulationType.Mod160Qam; break; case 192: channelDVBC.Modulation = DirectShowLib.BDA.ModulationType.Mod192Qam; break; case 224: channelDVBC.Modulation = DirectShowLib.BDA.ModulationType.Mod224Qam; break; case 256: channelDVBC.Modulation = DirectShowLib.BDA.ModulationType.Mod256Qam; break; case 320: channelDVBC.Modulation = DirectShowLib.BDA.ModulationType.Mod320Qam; break; case 384: channelDVBC.Modulation = DirectShowLib.BDA.ModulationType.Mod384Qam; break; case 448: channelDVBC.Modulation = DirectShowLib.BDA.ModulationType.Mod448Qam; break; case 512: channelDVBC.Modulation = DirectShowLib.BDA.ModulationType.Mod512Qam; break; case 640: channelDVBC.Modulation = DirectShowLib.BDA.ModulationType.Mod640Qam; break; case 768: channelDVBC.Modulation = DirectShowLib.BDA.ModulationType.Mod768Qam; break; case 896: channelDVBC.Modulation = DirectShowLib.BDA.ModulationType.Mod896Qam; break; case 1024: channelDVBC.Modulation = DirectShowLib.BDA.ModulationType.Mod1024Qam; break; } } else if (channel is ChannelDVBS) { //Frequecny,polarisation,symbol rate,FEC //11016,H, 6284,78 ChannelDVBS channelDVBS = channel as ChannelDVBS; channelDVBS.Frequency = int.Parse(fields[0].Trim().Replace(".", "")); string polarisation = fields[1].Trim(); if (polarisation == "H") channelDVBS.SignalPolarisation = DirectShowLib.BDA.Polarisation.LinearH; else if (polarisation == "V") channelDVBS.SignalPolarisation = DirectShowLib.BDA.Polarisation.LinearV; else if (polarisation == "L") channelDVBS.SignalPolarisation = DirectShowLib.BDA.Polarisation.CircularL; else if (polarisation == "R") channelDVBS.SignalPolarisation = DirectShowLib.BDA.Polarisation.CircularR; channelDVBS.SymbolRate = int.Parse(fields[2].Trim()); } }
private bool ScanProbeFrequency(ChannelTV currentChannelTV, bool needRebuild) { this.propertyGridChannel.SelectedObject = currentChannelTV; Application.DoEvents(); MainForm.videoControl.BackColor = Color.Transparent; try { MainForm.TuneChannel(currentChannelTV, needRebuild); needRebuild = false; textBoxScanStatus.Text = Properties.Resources.Scanning; if (currentChannelTV is ChannelDVB) textBoxScanFrequency.Text = string.Format(Properties.Resources.ScanningFrequency, (currentChannelTV as ChannelDVB).Frequency); else if (currentChannelTV is ChannelAnalogic) textBoxScanFrequency.Text = string.Format(Properties.Resources.ScanningChannel, (currentChannelTV as ChannelAnalogic).Channel); } catch (Exception ex) { Trace.WriteLineIf(MainForm.trace.TraceError, ex.ToString()); textBoxScanStatus.Text = Properties.Resources.Error + " " + ex.Message; textBoxScanFrequency.Text = Properties.Resources.ScanningError; MainForm.videoControl.BackColor = MainForm.Settings.VideoBackgroundColor; } if (currentChannelTV is ChannelDVB) { if (MainForm.GraphBuilder is IBDA) { IBDA graphBuilderBDA = MainForm.GraphBuilder as IBDA; bool locked, present; int strength, quality; System.Threading.Thread.Sleep(500); if ((graphBuilderBDA as ITV).GetSignalStatistics(out locked, out present, out strength, out quality)) { if (locked && present) { IMpeg2Data mpeg2Data = graphBuilderBDA.SectionsAndTables as IMpeg2Data; short originalNetworkId = -1; Hashtable serviceNameByServiceId = new Hashtable(); // Hervé Stalin : Ajout d'une hashtable pour le services_type d'un service Hashtable serviceTypeByServiceID = new Hashtable(); PSISection[] psiSdts = PSISection.GetPSITable((int)PIDS.SDT, (int)TABLE_IDS.SDT_ACTUAL, mpeg2Data); for (int i = 0; i < psiSdts.Length; i++) { PSISection psiSdt = psiSdts[i]; if (psiSdt != null && psiSdt is PSISDT) { PSISDT sdt = (PSISDT)psiSdt; Trace.WriteLineIf(MainForm.trace.TraceVerbose, "PSI Table " + i + "/" + psiSdts.Length + "\r\n"); Trace.WriteLineIf(MainForm.trace.TraceVerbose, sdt.ToString()); originalNetworkId = (short)sdt.OriginalNetworkId; foreach (PSISDT.Data service in sdt.Services) { serviceNameByServiceId[service.ServiceId] = service.GetServiceName(); //Hervé Stalin : remplissage du hashtable du service_type serviceTypeByServiceID[service.ServiceId] = service.GetServiceType(); } } } //Hervé Stalin : Code pode pour créér un hashtable de lcn Hashtable logicalChannelNumberByServiceId = new Hashtable(); PSISection[] psiNits = PSISection.GetPSITable((int)PIDS.NIT, (int)TABLE_IDS.NIT_ACTUAL, mpeg2Data); for (int i = 0; i < psiNits.Length; i++) { PSISection psinit = psiNits[i]; if (psinit != null && psinit is PSINIT) { PSINIT nit = (PSINIT)psinit; Trace.WriteLineIf(MainForm.trace.TraceVerbose, "PSI Table " + i + "/" + psiNits.Length + "\r\n"); Trace.WriteLineIf(MainForm.trace.TraceVerbose, nit.ToString()); foreach (PSINIT.Data data in nit.Streams) { foreach (PSIDescriptor psiDescriptorData in data.Descriptors) { if (psiDescriptorData.DescriptorTag == DESCRIPTOR_TAGS.DESCR_LOGICAL_CHANNEL) { PSIDescriptorLogicalChannel psiDescriptorLogicalChannel = (PSIDescriptorLogicalChannel)psiDescriptorData; foreach (PSIDescriptorLogicalChannel.ChannelNumber f in psiDescriptorLogicalChannel.LogicalChannelNumbers) { logicalChannelNumberByServiceId[f.ServiceID] = f.LogicalChannelNumber; } } } } } } PSISection[] psis = PSISection.GetPSITable((int)PIDS.PAT, (int)TABLE_IDS.PAT, mpeg2Data); for (int i = 0; i < psis.Length; i++) { PSISection psi = psis[i]; if (psi != null && psi is PSIPAT) { PSIPAT pat = (PSIPAT)psi; Trace.WriteLineIf(MainForm.trace.TraceVerbose, "PSI Table " + i + "/" + psis.Length + "\r\n"); Trace.WriteLineIf(MainForm.trace.TraceVerbose, pat.ToString()); ChannelDVB newTemplateChannelDVB = (MainForm.GraphBuilder as ITV).CurrentChannel.MakeCopy() as ChannelDVB; newTemplateChannelDVB.ONID = originalNetworkId; newTemplateChannelDVB.TSID = pat.TransportStreamId; foreach (PSIPAT.Data program in pat.ProgramIds) { if (!program.IsNetworkPID) // Hervé Stalin : est encore utile ? { //Hervé Stalin: discrimination par le service type SERVICE_TYPES st; try { st = (SERVICE_TYPES)serviceTypeByServiceID[program.ProgramNumber]; } catch { st = SERVICE_TYPES.DIGITAL_TELEVISION_SERVICE; // bypass en cas de probleme de parsing (mauvaise réception dans mon cas) } if (st == SERVICE_TYPES.DIGITAL_TELEVISION_SERVICE || // TV SD MPEG2 st == SERVICE_TYPES.ADVANCE_CODEC_HD_DIGITAL_SERVICE || // TV HD H264 st == SERVICE_TYPES.ADVANCE_CODEC_SD_DIGITAL_SERVICE || // TV SD H264 st == SERVICE_TYPES.MPEG2_HD_DIGITAL_TELEVISION_SERVICE || // TV HD MPEG2 st == SERVICE_TYPES.DIGITAL_RADIO_SOUND_SERVICE || // Radio MP2 st == SERVICE_TYPES.ADVANCED_CODEC_DIGITAL_RADIO_SOUND_SERVICE|| // Radio AC3/E-AC3/AAC st == SERVICE_TYPES.MOSAIC_SERVICE || // Mosaic MPEG2 st == SERVICE_TYPES.ADVANCED_CODEC_MOSAIC_SERVICE) // Mosaic H264 { ChannelDVB newChannelDVB = newTemplateChannelDVB.MakeCopy() as ChannelDVB; newChannelDVB.SID = program.ProgramNumber; newChannelDVB.Name = (string)serviceNameByServiceId[program.ProgramNumber]; //Hervé Stalin: ajout du LCN newChannelDVB.ChannelNumber = Convert.ToInt16(logicalChannelNumberByServiceId[program.ProgramNumber]); if (newChannelDVB.Name == null) newChannelDVB.Name = Properties.Resources.NoName; UpdateDVBChannelPids(mpeg2Data, program.Pid, newChannelDVB); ListViewItem lvi = new ListViewItem(newChannelDVB.Name, "LogoTVDefault"); lvi.SubItems.Add(newChannelDVB.Frequency.ToString()); lvi.SubItems.Add(newChannelDVB.ChannelNumber.ToString()); lvi.Tag = newChannelDVB; //this.listViewScanResult.SmallImageList = MainForm.imageListLogoTV; this.listViewScanResult.Items.Add(lvi); this.buttonScanClear.Enabled = true; try { var extensions = new HashSet<string>(StringComparer.OrdinalIgnoreCase) { ".gif", ".png", ".jpg", ".jpeg", ".bmp" }; //var files = Directory.EnumerateFiles(@".\Logos\", "*"); var files = Directory.GetFiles(@".\Logos\", "*"); foreach (var logo in files) { string extension = Path.GetExtension(logo).ToLowerInvariant(); if (extensions.Contains(extension)) { string filename = Path.GetFileNameWithoutExtension(logo).ToLowerInvariant(); if (newChannelDVB.Name.ToLowerInvariant().IndexOf(filename) != -1) { newChannelDVB.Logo = logo; //MainForm.panelChannel.AdjustTVLogo(newChannelDVB); if (MainForm.imageListLogoTV.Images.ContainsKey(logo)) { lvi.ImageKey = logo; } else { try { string path = FileUtils.GetAbsolutePath(logo); if (File.Exists(path)) { Bitmap bitmap = new Bitmap(path); //if (!Bitmap.IsAlphaPixelFormat(bitmap.PixelFormat)) // bitmap.MakeTransparent(Color.White); Image thumbnail = Utils.ResizeImage(bitmap, 16, 16, false); MainForm.imageListLogoTV.Images.Add(logo, thumbnail); lvi.ImageKey = logo; thumbnail.Dispose(); bitmap.Dispose(); break; } } catch (ArgumentException) { } } } } } } catch (Exception) { } //PSISection[] psis2 = PSISection.GetPSITable(program.Pid, (int)TABLE_IDS.PMT, mpeg2Data); //for (int i2 = 0; i2 < psis2.Length; i2++) //{ // PSISection psi2 = psis2[i2]; // if (psi2 != null && psi2 is PSIPMT) // { // PSIPMT pmt = (PSIPMT)psi2; // Trace.WriteLineIf(trace.TraceVerbose, "PSI Table " + i2 + "/" + psis2.Length + "\r\n"); // Trace.WriteLineIf(trace.TraceVerbose, pmt.ToString()); // } //} } } } Application.DoEvents(); } } } } } } else if (currentChannelTV is ChannelAnalogic) { GraphBuilderWDM graphBuilderWDM = MainForm.GraphBuilder as GraphBuilderWDM; if (graphBuilderWDM.CurrentChannel != null) { bool locked, present; int strength, quality; if (graphBuilderWDM.GetSignalStatistics(out locked, out present, out strength, out quality)) { if (locked && present) { ChannelAnalogic newChannel = graphBuilderWDM.CurrentChannel.MakeCopy() as ChannelAnalogic; newChannel.Name = Properties.Resources.NewChannelName + " " + newChannel.Channel.ToString(); ListViewItem lvi = new ListViewItem(newChannel.Name, "LogoTVDefault"); lvi.SubItems.Add(newChannel.Channel.ToString()); lvi.Tag = newChannel; this.listViewScanResult.Items.Add(lvi); this.buttonScanClear.Enabled = true; } } } } return needRebuild; }