From: Felix Domke Date: Wed, 22 Mar 2006 18:20:41 +0000 (+0000) Subject: emergency resync code for pvrparse X-Git-Tag: 2.6.0~3785 X-Git-Url: https://git.cweiske.de/enigma2.git/commitdiff_plain/1b8e84020a1eb7f270042d9cfd065255411474a0 emergency resync code for pvrparse --- diff --git a/lib/dvb/pvrparse.cpp b/lib/dvb/pvrparse.cpp index 65e599c3..4b8da890 100644 --- a/lib/dvb/pvrparse.cpp +++ b/lib/dvb/pvrparse.cpp @@ -362,6 +362,30 @@ void eMPEGStreamParserTS::parseData(off_t offset, const void *data, unsigned int /* sorry for the redundant code here, but there are too many special cases... */ while (len) { + /* emergency resync. usually, this should not happen, because the data should + be sync-aligned. + + to make this code work for non-strictly-sync-aligned data, (for example, bad + files) we fix a possible resync here by skipping data until the next 0x47. + + if this is a false 0x47, the packet will be dropped by wantPacket, and the + next time, sync will be re-established. */ + int skipped = 0; + while (!m_pktptr && len) + { + if (packet[0] == 0x47) + break; + len--; + packet++; + skipped++; + } + + if (skipped) + eDebug("SYNC LOST: skipped %d bytes.", skipped); + + if (!len) + break; + if (m_pktptr) { /* skip last packet */