summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2005-08-21 09:00:31 +0200
committerKlaus Schmidinger <vdr@tvdr.de>2005-08-21 09:00:31 +0200
commit9dd6796702fa6487e3be8d5c6d4083dd25791f47 (patch)
tree2207b7d73e1065c41764ee377051c367d9d56761
parent6de23d7d96720f89cbc864bbf504fe466e224497 (diff)
downloadvdr-9dd6796702fa6487e3be8d5c6d4083dd25791f47.tar.gz
vdr-9dd6796702fa6487e3be8d5c6d4083dd25791f47.tar.bz2
Fixed cVideoRepacker to better handle errors in data
-rw-r--r--HISTORY1
-rw-r--r--remux.c20
2 files changed, 7 insertions, 14 deletions
diff --git a/HISTORY b/HISTORY
index dce1b460..ae70d723 100644
--- a/HISTORY
+++ b/HISTORY
@@ -3709,3 +3709,4 @@ Video Disk Recorder Revision History
all CAMs initialized and ready to decrypt, so that no more "channel not
available" happens if VDR is started with the current channel being an encrypted
one, or a timer on such a channel hits right after starting VDR.
+- Fixed cVideoRepacker to better handle errors in data (thanks to Reinhard Nissl).
diff --git a/remux.c b/remux.c
index 4a8682b7..c980bd83 100644
--- a/remux.c
+++ b/remux.c
@@ -11,7 +11,7 @@
* The cDolbyRepacker code was originally written by Reinhard Nissl <rnissl@gmx.de>,
* and adapted to the VDR coding style by Klaus.Schmidinger@cadsoft.de.
*
- * $Id: remux.c 1.36 2005/07/30 10:23:00 kls Exp $
+ * $Id: remux.c 1.37 2005/08/21 08:58:58 kls Exp $
*/
#include "remux.h"
@@ -171,11 +171,9 @@ bool cVideoRepacker::PushOutPacket(cRingBufferLinear *ResultBuffer, const uchar
int Bite = fragmentLen + (Count >= 0 ? 0 : Count);
// put data into result buffer
int n = Put(ResultBuffer, fragmentData, Bite);
- if (n != Bite) {
- Reset();
- return false;
- }
fragmentLen = 0;
+ if (n != Bite)
+ return false;
}
else if (pesHeaderLen > 0) { // ... which is contained in the PES header buffer
int PacketLen = pesHeaderLen + Count - 6;
@@ -186,11 +184,9 @@ bool cVideoRepacker::PushOutPacket(cRingBufferLinear *ResultBuffer, const uchar
int Bite = pesHeaderLen + (Count >= 0 ? 0 : Count);
// put data into result buffer
int n = Put(ResultBuffer, pesHeader, Bite);
- if (n != Bite) {
- Reset();
- return false;
- }
pesHeaderLen = 0;
+ if (n != Bite)
+ return false;
}
// append further payload
if (Count > 0) {
@@ -198,10 +194,8 @@ bool cVideoRepacker::PushOutPacket(cRingBufferLinear *ResultBuffer, const uchar
int Bite = Count;
// put data into result buffer
int n = Put(ResultBuffer, Data, Bite);
- if (n != Bite) {
- Reset();
+ if (n != Bite)
return false;
- }
}
// we did it ;-)
return true;
@@ -250,12 +244,10 @@ void cVideoRepacker::Repack(cRingBufferLinear *ResultBuffer, const uchar *Data,
switch (*data) {
case 0xB9 ... 0xFF: // system start codes
esyslog("cVideoRepacker: found system start code: stream seems to be scrambled or not demultiplexed");
- Reset();
break;
case 0xB0 ... 0xB1: // reserved start codes
case 0xB6:
esyslog("cVideoRepacker: found reserved start code: stream seems to be scrambled");
- Reset();
break;
case 0xB4: // sequence error code
isyslog("cVideoRepacker: found sequence error code: stream seems to be damaged");