summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2001-02-03 17:44:25 +0100
committerKlaus Schmidinger <vdr@tvdr.de>2001-02-03 17:44:25 +0100
commit2adfad282320b6a6b116284507aac870d536a69a (patch)
treed0f2c47ad29fe88878f92415d6d557a299ca342e
parent20d94646d188e874898e1d0e3e18a70cefa0eac3 (diff)
downloadvdr-2adfad282320b6a6b116284507aac870d536a69a.tar.gz
vdr-2adfad282320b6a6b116284507aac870d536a69a.tar.bz2
The EPG scanner now scans each transponder only once per cycle
-rw-r--r--HISTORY1
-rw-r--r--dvbapi.c26
-rw-r--r--dvbapi.h7
3 files changed, 30 insertions, 4 deletions
diff --git a/HISTORY b/HISTORY
index 55037971..6a85b670 100644
--- a/HISTORY
+++ b/HISTORY
@@ -375,3 +375,4 @@ Video Disk Recorder Revision History
Dave Chapman). Existing files will be read normally (and the teletext PID set
to 0), but once they are written back (due to some channel editing) the file
will have the new format.
+- The EPG scanner now scans each transponder only once per cycle.
diff --git a/dvbapi.c b/dvbapi.c
index f29e5a4b..94dd2c29 100644
--- a/dvbapi.c
+++ b/dvbapi.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: dvbapi.c 1.56 2001/02/03 16:00:23 kls Exp $
+ * $Id: dvbapi.c 1.57 2001/02/03 17:43:21 kls Exp $
*/
#include "dvbapi.h"
@@ -2408,6 +2408,24 @@ cEITScanner::cEITScanner(void)
lastScan = lastActivity = time(NULL);
currentChannel = 0;
lastChannel = 0;
+ numTransponders = 0;
+ transponders = NULL;
+}
+
+cEITScanner::~cEITScanner()
+{
+ delete transponders;
+}
+
+bool cEITScanner::TransponderScanned(cChannel *Channel)
+{
+ for (int i = 0; i < numTransponders; i++) {
+ if (transponders[i] == Channel->frequency)
+ return true;
+ }
+ transponders = (int *)realloc(transponders, ++numTransponders * sizeof(int));
+ transponders[numTransponders - 1] = Channel->frequency;
+ return false;
}
void cEITScanner::Activity(void)
@@ -2432,10 +2450,12 @@ void cEITScanner::Process(void)
int oldCh = lastChannel;
int ch = oldCh + 1;
while (ch != oldCh) {
- if (ch > Channels.MaxNumber())
+ if (ch > Channels.MaxNumber()) {
ch = 1;
+ numTransponders = 0;
+ }
cChannel *Channel = Channels.GetByNumber(ch);
- if (Channel && Channel->pnr) {
+ if (Channel && Channel->pnr && !TransponderScanned(Channel)) {
if (DvbApi == cDvbApi::PrimaryDvbApi && !currentChannel)
currentChannel = DvbApi->Channel();
Channel->Switch(DvbApi, false);
diff --git a/dvbapi.h b/dvbapi.h
index c7c8fb40..634fabfe 100644
--- a/dvbapi.h
+++ b/dvbapi.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: dvbapi.h 1.32 2001/02/03 15:59:35 kls Exp $
+ * $Id: dvbapi.h 1.33 2001/02/03 17:39:33 kls Exp $
*/
#ifndef __DVBAPI_H
@@ -48,6 +48,8 @@ const char *IndexToHMSF(int Index, bool WithFrame = false);
int HMSFToIndex(const char *HMSF);
// Converts the given string (format: "hh:mm:ss.ff") to an index.
+class cChannel;
+
class cRecordBuffer;
class cReplayBuffer;
class cTransferBuffer;
@@ -256,8 +258,11 @@ private:
};
time_t lastScan, lastActivity;
int currentChannel, lastChannel;
+ int numTransponders, *transponders;
+ bool TransponderScanned(cChannel *Channel);
public:
cEITScanner(void);
+ ~cEITScanner();
bool Active(void) { return currentChannel; }
void Activity(void);
void Process(void);