From 4f6f05161e787bc05c38d5551cd2b47424f600cc Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sat, 13 Mar 2004 10:35:38 +0100 Subject: Taking the Sid into account when detecting version changes in processing the PMT --- CONTRIBUTORS | 2 ++ HISTORY | 4 +++- pat.c | 18 ++++++++++-------- pat.h | 7 ++++--- 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 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 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 #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: -- cgit v1.2.3