From cb03e38a07df9d32db6762f8b3f13c801dd7c758 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Fri, 17 Aug 2007 14:06:09 +0200 Subject: [PATCH] Optimized cNitFilter::Process() --- CONTRIBUTORS | 1 + HISTORY | 1 + nit.c | 99 +++++++++++++++++++++++++++------------------------- 3 files changed, 53 insertions(+), 48 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 266f9490..c943c094 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -2141,6 +2141,7 @@ Tobias Bratfisch for suggesting to make skipspace() an inline function for making some optimizations in cDvbDevice::SetChannelDevice() for optimizing cMenuEditChrItem::Set() + for optimizing cNitFilter::Process() Bruno Roussel for translating OSD texts to the French language diff --git a/HISTORY b/HISTORY index 3404c46d..575a5e12 100644 --- a/HISTORY +++ b/HISTORY @@ -5367,3 +5367,4 @@ Video Disk Recorder Revision History Matthias Schwarzott). - Some optimizations in cDvbDevice::SetChannelDevice() (thanks to Tobias Bratfisch). - Optimized cMenuEditChrItem::Set() (thanks to Tobias Bratfisch). +- Optimized cNitFilter::Process() (thanks to Tobias Bratfisch). diff --git a/nit.c b/nit.c index 9291c960..ba80a68f 100644 --- a/nit.c +++ b/nit.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: nit.c 1.14 2007/04/29 11:35:33 kls Exp $ + * $Id: nit.c 1.15 2007/08/17 14:02:45 kls Exp $ */ #include "nit.h" @@ -140,13 +140,14 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length } break; } - bool found = false; - for (cChannel *Channel = Channels.First(); Channel; Channel = Channels.Next(Channel)) { - if (!Channel->GroupSep() && Channel->Source() == Source && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) { - if (Setup.UpdateChannels >= 5) { - if (!ISTRANSPONDER(cChannel::Transponder(Frequency, Polarization), Channel->Transponder())) { + if (Setup.UpdateChannels >= 5) { + bool found = false; + for (cChannel *Channel = Channels.First(); Channel; Channel = Channels.Next(Channel)) { + if (!Channel->GroupSep() && Channel->Source() == Source && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) { + int transponder = Channel->Transponder(); + if (!ISTRANSPONDER(cChannel::Transponder(Frequency, Polarization), transponder)) { for (int n = 0; n < NumFrequencies; n++) { - if (ISTRANSPONDER(cChannel::Transponder(Frequencies[n], Polarization), Channel->Transponder())) { + if (ISTRANSPONDER(cChannel::Transponder(Frequencies[n], Polarization), transponder)) { Frequency = Frequencies[n]; break; } @@ -157,16 +158,16 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length } found = true; } - } - if (!found && Setup.UpdateChannels >= 5) { - for (int n = 0; n < NumFrequencies; n++) { - cChannel *Channel = new cChannel; - Channel->SetId(ts.getOriginalNetworkId(), ts.getTransportStreamId(), 0, 0); - if (Channel->SetSatTransponderData(Source, Frequencies[n], Polarization, SymbolRate, CodeRate)) - EITScanner.AddTransponder(Channel); - else - delete Channel; - } + if (!found) { + for (int n = 0; n < NumFrequencies; n++) { + cChannel *Channel = new cChannel; + Channel->SetId(ts.getOriginalNetworkId(), ts.getTransportStreamId(), 0, 0); + if (Channel->SetSatTransponderData(Source, Frequencies[n], Polarization, SymbolRate, CodeRate)) + EITScanner.AddTransponder(Channel); + else + delete Channel; + } + } } } break; @@ -190,13 +191,14 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length } break; } - bool found = false; - for (cChannel *Channel = Channels.First(); Channel; Channel = Channels.Next(Channel)) { - if (!Channel->GroupSep() && Channel->Source() == Source && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) { - if (Setup.UpdateChannels >= 5) { - if (!ISTRANSPONDER(Frequency / 1000, Channel->Transponder())) { + if (Setup.UpdateChannels >= 5) { + bool found = false; + for (cChannel *Channel = Channels.First(); Channel; Channel = Channels.Next(Channel)) { + if (!Channel->GroupSep() && Channel->Source() == Source && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) { + int transponder = Channel->Transponder(); + if (!ISTRANSPONDER(Frequency / 1000, transponder)) { for (int n = 0; n < NumFrequencies; n++) { - if (ISTRANSPONDER(Frequencies[n] / 1000, Channel->Transponder())) { + if (ISTRANSPONDER(Frequencies[n] / 1000, transponder)) { Frequency = Frequencies[n]; break; } @@ -207,16 +209,16 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length } found = true; } - } - if (!found && Setup.UpdateChannels >= 5) { - for (int n = 0; n < NumFrequencies; n++) { - cChannel *Channel = new cChannel; - Channel->SetId(ts.getOriginalNetworkId(), ts.getTransportStreamId(), 0, 0); - if (Channel->SetCableTransponderData(Source, Frequencies[n], Modulation, SymbolRate, CodeRate)) - EITScanner.AddTransponder(Channel); - else - delete Channel; - } + if (!found) { + for (int n = 0; n < NumFrequencies; n++) { + cChannel *Channel = new cChannel; + Channel->SetId(ts.getOriginalNetworkId(), ts.getTransportStreamId(), 0, 0); + if (Channel->SetCableTransponderData(Source, Frequencies[n], Modulation, SymbolRate, CodeRate)) + EITScanner.AddTransponder(Channel); + else + delete Channel; + } + } } } break; @@ -247,13 +249,14 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length } break; } - bool found = false; - for (cChannel *Channel = Channels.First(); Channel; Channel = Channels.Next(Channel)) { - if (!Channel->GroupSep() && Channel->Source() == Source && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) { - if (Setup.UpdateChannels >= 5) { - if (!ISTRANSPONDER(Frequency / 1000000, Channel->Transponder())) { + if (Setup.UpdateChannels >= 5) { + bool found = false; + for (cChannel *Channel = Channels.First(); Channel; Channel = Channels.Next(Channel)) { + if (!Channel->GroupSep() && Channel->Source() == Source && Channel->Nid() == ts.getOriginalNetworkId() && Channel->Tid() == ts.getTransportStreamId()) { + int transponder = Channel->Transponder(); + if (!ISTRANSPONDER(Frequency / 1000000, transponder)) { for (int n = 0; n < NumFrequencies; n++) { - if (ISTRANSPONDER(Frequencies[n] / 1000000, Channel->Transponder())) { + if (ISTRANSPONDER(Frequencies[n] / 1000000, transponder)) { Frequency = Frequencies[n]; break; } @@ -264,15 +267,15 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length } found = true; } - } - if (!found && Setup.UpdateChannels >= 5) { - for (int n = 0; n < NumFrequencies; n++) { - cChannel *Channel = new cChannel; - Channel->SetId(ts.getOriginalNetworkId(), ts.getTransportStreamId(), 0, 0); - if (Channel->SetTerrTransponderData(Source, Frequencies[n], Bandwidth, Constellation, Hierarchy, CodeRateHP, CodeRateLP, GuardInterval, TransmissionMode)) - EITScanner.AddTransponder(Channel); - else - delete Channel; + if (!found) { + for (int n = 0; n < NumFrequencies; n++) { + cChannel *Channel = new cChannel; + Channel->SetId(ts.getOriginalNetworkId(), ts.getTransportStreamId(), 0, 0); + if (Channel->SetTerrTransponderData(Source, Frequencies[n], Bandwidth, Constellation, Hierarchy, CodeRateHP, CodeRateLP, GuardInterval, TransmissionMode)) + EITScanner.AddTransponder(Channel); + else + delete Channel; + } } } }