From 73870fc90706ced04a25f19ee72595eb3a9e4d2b Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sun, 19 Aug 2001 14:37:17 +0200 Subject: Fixed broken recordings after a driver buffer overflow --- remux.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'remux.c') diff --git a/remux.c b/remux.c index 3c7ec6e6..f89b897b 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.5 2001/06/24 16:37:23 kls Exp $ + * $Id: remux.c 1.6 2001/08/19 11:52:05 kls Exp $ */ /* The calling interface of the 'cRemux::Process()' function is defined @@ -489,6 +489,8 @@ void cRemux::SetAudioPid(int APid) resultCount = resultDelivered = 0; } +#define TS_SYNC_BYTE 0x47 + const uchar *cRemux::Process(const uchar *Data, int &Count, int &Result, uchar *PictureType) { uchar dummyPictureType; @@ -511,12 +513,27 @@ XXX*/ resultDelivered = 0; } + int used = 0; + + // Make sure we are looking at a TS packet: + + while (Count > TS_SIZE) { + if (Data[0] == TS_SYNC_BYTE && Data[TS_SIZE] == TS_SYNC_BYTE) + break; + Data++; + Count--; + used++; + } + if (used) + esyslog(LOG_ERR, "ERROR: skipped %d byte to sync on TS packet", used); + // Convert incoming TS data into multiplexed PES: - int used = 0; for (int i = 0; i < Count; i += TS_SIZE) { if (Count - i < TS_SIZE) break; + if (Data[i] != TS_SYNC_BYTE) + break; int pid = GetPid(Data + i + 1); if (Data[i + 3] & 0x10) { // got payload if (pid == vPid) vTS2PES->ts_to_pes(Data + i); -- cgit v1.2.3