diff options
-rw-r--r-- | CONTRIBUTORS | 2 | ||||
-rw-r--r-- | HISTORY | 6 | ||||
-rw-r--r-- | remux.c | 9 | ||||
-rw-r--r-- | remux.h | 3 |
4 files changed, 16 insertions, 4 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 25d1a253..6719ef41 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -438,6 +438,8 @@ Gregoire Favre <greg@ulima.unil.ch> for fixing some function headers to make them compile with gcc 3.x for reporting a bug in taking an active SVDRP connection into account when doing shutdown for translating OSD texts to the French language + for suggesting to initiate an "emergency exit" if there are UPT errors during a + recording Sven Grothklags <sven@uni-paderborn.de> for fixing the cutting mechanism to make it re-sync in case a frame is larger @@ -2652,7 +2652,7 @@ Video Disk Recorder Revision History actual CAM type as reported by the CAM. The 'ca.conf' file has been stripped down to the values 0..4. -2004-02-13: Version 1.3.5 +2004-02-14: Version 1.3.5 - Fixed reading the EPG preferred language parameter from 'setup.conf'. - Fixed switching to a visible programme in case the current channel has neither @@ -2663,3 +2663,7 @@ Video Disk Recorder Revision History transponders on the same frequency, with different polarization, like Hispasat at S30.0W (thanks to Thomas Bergwinkl for pointing this out). See man vdr(5) for details about the enhanced channel ID format. +- Since there appears to be no general solution for the UPT error yet, a recording + now initiates an "emergency exit" if the number of UPT errors during one + recording exceeds 10 (suggested by Gregoire Favre). Since the UPT error doesn't + happen on my system, this has not been explicitly tested. @@ -8,7 +8,7 @@ * the Linux DVB driver's 'tuxplayer' example and were rewritten to suit * VDR's needs. * - * $Id: remux.c 1.17 2003/09/14 10:34:39 kls Exp $ + * $Id: remux.c 1.18 2004/02/14 10:40:37 kls Exp $ */ /* The calling interface of the 'cRemux::Process()' function is defined @@ -114,6 +114,7 @@ #define SC_PICTURE 0x00 // "picture header" #define MAXNONUSEFULDATA (10*1024*1024) +#define MAXNUMUPTERRORS 10 class cTS2PES { private: @@ -459,6 +460,7 @@ cRemux::cRemux(int VPid, int APid1, int APid2, int DPid1, int DPid2, bool ExitOn dPid1 = DPid1; dPid2 = DPid2; exitOnFailure = ExitOnFailure; + numUPTerrors = 0; synced = false; skipped = 0; resultCount = resultDelivered = 0; @@ -618,8 +620,11 @@ XXX*/ if (l < 0) return NULL; // no useful data found, wait for more if (pt != NO_PICTURE) { - if (pt < I_FRAME || B_FRAME < pt) + if (pt < I_FRAME || B_FRAME < pt) { esyslog("ERROR: unknown picture type '%d'", pt); + if (++numUPTerrors > MAXNUMUPTERRORS && exitOnFailure) + cThread::EmergencyExit(true); + } else if (!synced) { if (pt == I_FRAME) { resultDelivered = i; // will drop everything before this position @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: remux.h 1.10 2003/04/26 14:13:11 kls Exp $ + * $Id: remux.h 1.11 2004/02/14 10:40:41 kls Exp $ */ #ifndef __REMUX_H @@ -30,6 +30,7 @@ class cTS2PES; class cRemux { private: bool exitOnFailure; + int numUPTerrors; bool synced; int skipped; int vPid, aPid1, aPid2, dPid1, dPid2; |