summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTORS1
-rw-r--r--HISTORY4
-rw-r--r--channels.c24
-rw-r--r--channels.h3
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
diff --git a/HISTORY b/HISTORY
index 39733817..8c80f4a1 100644
--- a/HISTORY
+++ b/HISTORY
@@ -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).
diff --git a/channels.c b/channels.c
index 606ed8ff..7fe8275d 100644
--- a/channels.c
+++ b/channels.c
@@ -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) {
diff --git a/channels.h b/channels.h
index dd16b351..25ddc3d1 100644
--- a/channels.h
+++ b/channels.h
@@ -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;