summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2004-03-13 10:35:38 +0100
committerKlaus Schmidinger <vdr@tvdr.de>2004-03-13 10:35:38 +0100
commit4f6f05161e787bc05c38d5551cd2b47424f600cc (patch)
treedb5d716561680b66558de191de17797766eace37
parent9c1f56ec71a68e945ff7315ae710f6f9f03e8cc8 (diff)
downloadvdr-4f6f05161e787bc05c38d5551cd2b47424f600cc.tar.gz
vdr-4f6f05161e787bc05c38d5551cd2b47424f600cc.tar.bz2
Taking the Sid into account when detecting version changes in processing the PMT
-rw-r--r--CONTRIBUTORS2
-rw-r--r--HISTORY4
-rw-r--r--pat.c18
-rw-r--r--pat.h7
4 files changed, 19 insertions, 12 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index b8d9c94f..037d1155 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -945,6 +945,8 @@ Stéphane Esté-Gracias <sestegra@free.fr>
for fixing a typo in libsi/si.h
for fixing some descriptor handling in 'libsi'
for pointing out a problem with "itemized" texts in EPG data
+ for pointing out a problem with taking the Sid into account when detecting version
+ changes in processing the PMT
Marc Hoppe <MarcHoppe@gmx.de>
for fixing handling the current menu item
diff --git a/HISTORY b/HISTORY
index a0953fc8..3bb6e09c 100644
--- a/HISTORY
+++ b/HISTORY
@@ -2714,7 +2714,7 @@ Video Disk Recorder Revision History
whether an event is currently running (see MANUAL under "The "Schedule" Menu"
for details).
-2004-03-07: Version 1.3.6
+2004-03-13: Version 1.3.6
- Completed the Finnish OSD texts (thanks to Rolf Ahrenberg).
- Fixed some descriptor handling in 'libsi' (thanks to Stéphane Esté-Gracias).
@@ -2730,3 +2730,5 @@ Video Disk Recorder Revision History
- Fixed handling VPS times at year boundaries.
- Avoiding too many consecutive "ring buffer overflow" messages (which only
slowed down performance even more).
+- Taking the Sid into account when detecting version changes in processing the
+ PMT (thanks to Stéphane Esté-Gracias for pointing out this problem).
diff --git a/pat.c b/pat.c
index 9b27bdae..b9fc0e63 100644
--- a/pat.c
+++ b/pat.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: pat.c 1.7 2004/01/25 15:12:53 kls Exp $
+ * $Id: pat.c 1.8 2004/03/07 16:59:00 kls Exp $
*/
#include "pat.h"
@@ -250,19 +250,21 @@ void cPatFilter::Trigger(void)
numPmtEntries = 0;
}
-bool cPatFilter::PmtVersionChanged(int PmtPid, int Version)
+bool cPatFilter::PmtVersionChanged(int PmtPid, int Sid, int Version)
{
- Version <<= 16;
+ uint64_t v = Version;
+ v <<= 32;
+ uint64_t id = (PmtPid | (Sid << 16)) & 0x00000000FFFFFFFFLL;
for (int i = 0; i < numPmtEntries; i++) {
- if ((pmtVersion[i] & 0x0000FFFF) == PmtPid) {
- bool Changed = (pmtVersion[i] & 0x00FF0000) != Version;
+ if ((pmtVersion[i] & 0x00000000FFFFFFFFLL) == id) {
+ bool Changed = (pmtVersion[i] & 0x000000FF00000000LL) != v;
if (Changed)
- pmtVersion[i] = PmtPid | Version;
+ pmtVersion[i] = id | v;
return Changed;
}
}
if (numPmtEntries < MAXPMTENTRIES)
- pmtVersion[numPmtEntries++] = PmtPid | Version;
+ pmtVersion[numPmtEntries++] = id | v;
return true;
}
@@ -301,7 +303,7 @@ void cPatFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
SI::PMT pmt(Data, false);
if (!pmt.CheckCRCAndParse())
return;
- if (!PmtVersionChanged(pmtPid, pmt.getVersionNumber())) {
+ if (!PmtVersionChanged(pmtPid, pmt.getTableIdExtension(), pmt.getVersionNumber())) {
lastPmtScan = 0; // this triggers the next scan
return;
}
diff --git a/pat.h b/pat.h
index dd1a1fe8..a7f46357 100644
--- a/pat.h
+++ b/pat.h
@@ -4,13 +4,14 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: pat.h 1.3 2004/01/03 13:47:54 kls Exp $
+ * $Id: pat.h 1.4 2004/03/07 16:22:01 kls Exp $
*/
#ifndef __PAT_H
#define __PAT_H
#include "filter.h"
+#include <stdint.h>
#define MAXPMTENTRIES 64
@@ -19,9 +20,9 @@ private:
time_t lastPmtScan;
int pmtIndex;
int pmtPid;
- int pmtVersion[MAXPMTENTRIES];
+ uint64_t pmtVersion[MAXPMTENTRIES];
int numPmtEntries;
- bool PmtVersionChanged(int PmtPid, int Version);
+ bool PmtVersionChanged(int PmtPid, int Sid, int Version);
protected:
virtual void Process(u_short Pid, u_char Tid, const u_char *Data, int Length);
public: