diff options
-rw-r--r-- | CONTRIBUTORS | 2 | ||||
-rw-r--r-- | HISTORY | 4 | ||||
-rw-r--r-- | pat.c | 18 | ||||
-rw-r--r-- | 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é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 @@ -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). @@ -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; } @@ -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: |