diff options
author | Klaus Schmidinger <vdr@tvdr.de> | 2021-05-21 09:38:34 +0200 |
---|---|---|
committer | Klaus Schmidinger <vdr@tvdr.de> | 2021-05-21 09:38:34 +0200 |
commit | 505bcee9268750388547be0ab5c0527d1bd851b5 (patch) | |
tree | 644263371ef0ca172cb8a66ccddf26da4857188a | |
parent | c02c081d917df2ca2b11aa165c8f825bb126a2b9 (diff) | |
download | vdr-505bcee9268750388547be0ab5c0527d1bd851b5.tar.gz vdr-505bcee9268750388547be0ab5c0527d1bd851b5.tar.bz2 |
The transponder value of channels is now cached
-rw-r--r-- | CONTRIBUTORS | 1 | ||||
-rw-r--r-- | HISTORY | 4 | ||||
-rw-r--r-- | channels.c | 24 | ||||
-rw-r--r-- | channels.h | 3 |
4 files changed, 21 insertions, 11 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS index aa2d9967..904526f2 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -3652,6 +3652,7 @@ Helmut Binder <cco@aon.at> for reporting a problem with PMT handling in case locking the Channels list times out for avoiding a lengthy lock on the Channels list when starting a recording for preventing switching devices for pattern timers + for pointing out that cChannel::Transponder(void) is called very often Ulrich Eckhardt <uli@uli-eckhardt.de> for reporting a problem with shutdown after user inactivity in case a plugin is @@ -9663,7 +9663,7 @@ Video Disk Recorder Revision History - EXPIRELATENCY now only applies to VPS timers. - Deleting expired timers is now triggered immediately after the timers are modified. -2021-05-20: +2021-05-21: - Now using a separate fixed value for internal EPG linger time. This fixes problems with spawned timers jumping to the next event in case Setup.EPGLinger is very small. (reported @@ -9688,3 +9688,5 @@ Video Disk Recorder Revision History + It was only actually used in svdrp.c. + cFile::Ready() now processes only its own file descriptor by calling FileReady() instead of AnyFileReady(). +- The transponder value of channels is now cached, because cChannel::Transponder(void) + is called very often (pointed out by Helmut Binder). @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: channels.c 4.6 2020/04/11 09:22:05 kls Exp $ + * $Id: channels.c 5.1 2021/05/21 09:38:34 kls Exp $ */ #include "channels.h" @@ -145,15 +145,18 @@ int cChannel::Transponder(int Frequency, char Polarization) int cChannel::Transponder(void) const { - int tf = frequency; - while (tf > 20000) - tf /= 1000; - if (IsSat()) { - const char *p = strpbrk(parameters, "HVLRhvlr"); // lowercase for backwards compatibility - if (p) - tf = Transponder(tf, *p); + if (!transponder) { + int tf = frequency; + while (tf > 20000) + tf /= 1000; + if (IsSat()) { + const char *p = strpbrk(parameters, "HVLRhvlr"); // lowercase for backwards compatibility + if (p) + tf = Transponder(tf, *p); + } + transponder = tf; } - return tf; + return transponder; } int cChannel::Modification(int Mask) const @@ -167,6 +170,7 @@ void cChannel::CopyTransponderData(const cChannel *Channel) { if (Channel) { frequency = Channel->frequency; + transponder = Channel->transponder; source = Channel->source; srate = Channel->srate; parameters = Channel->parameters; @@ -195,6 +199,7 @@ bool cChannel::SetTransponderData(int Source, int Frequency, int Srate, const ch cString OldTransponderData = TransponderDataToString(); source = Source; frequency = Frequency; + transponder = 0; srate = Srate; parameters = Parameters; schedule = NULL; @@ -655,6 +660,7 @@ bool cChannel::Parse(const char *s) if (parambuf && sourcebuf && vpidbuf && apidbuf) { parameters = parambuf; ok = (source = cSource::FromString(sourcebuf)) >= 0; + transponder = 0; char *p; if ((p = strchr(vpidbuf, '=')) != NULL) { @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: channels.h 5.1 2021/01/14 10:29:05 kls Exp $ + * $Id: channels.h 5.2 2021/05/21 09:38:34 kls Exp $ */ #ifndef __CHANNELS_H @@ -96,6 +96,7 @@ private: char *portalName; int __BeginData__; int frequency; // MHz + mutable int transponder; // cached value int source; int srate; int vpid; |