summaryrefslogtreecommitdiff
path: root/dvbapi.c
diff options
context:
space:
mode:
Diffstat (limited to 'dvbapi.c')
-rw-r--r--dvbapi.c26
1 files changed, 23 insertions, 3 deletions
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);