summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2004-02-14 10:43:57 +0100
committerKlaus Schmidinger <vdr@tvdr.de>2004-02-14 10:43:57 +0100
commit96055681fcbcfdd287541372b4b00218a4b697cb (patch)
tree09aae7eb88df3f73d0eb69194a1e8a56f01ad51b
parent06d53423935ca57269e6cd577f3482cceb2b9205 (diff)
downloadvdr-96055681fcbcfdd287541372b4b00218a4b697cb.tar.gz
vdr-96055681fcbcfdd287541372b4b00218a4b697cb.tar.bz2
Initiating an emergency exit on too many UPT errors per recording
-rw-r--r--CONTRIBUTORS2
-rw-r--r--HISTORY6
-rw-r--r--remux.c9
-rw-r--r--remux.h3
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
diff --git a/HISTORY b/HISTORY
index 47c2a170..9c6dd2eb 100644
--- a/HISTORY
+++ b/HISTORY
@@ -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.
diff --git a/remux.c b/remux.c
index 5ea24bf9..65544b5e 100644
--- a/remux.c
+++ b/remux.c
@@ -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
diff --git a/remux.h b/remux.h
index e953001d..31e64dfb 100644
--- a/remux.h
+++ b/remux.h
@@ -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;