The transponder value of channels is now cached

This commit is contained in:
Klaus Schmidinger 2021-05-21 09:38:34 +02:00
parent c02c081d91
commit 505bcee926
4 changed files with 21 additions and 11 deletions

View File

@ -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

View File

@ -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).

View File

@ -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) {

View File

@ -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;