1
0
mirror of https://github.com/VDR4Arch/vdr.git synced 2023-10-10 13:36:52 +02:00

cDevice::PlayTs() now syncs on the TS packet sync bytes

This commit is contained in:
Klaus Schmidinger 2009-04-13 11:08:05 +02:00
parent 1d829aaf6d
commit 3628bbbfa1
2 changed files with 14 additions and 2 deletions

View File

@ -6031,7 +6031,8 @@ Video Disk Recorder Revision History
Oliver Endriss for reporting this). Oliver Endriss for reporting this).
- Improved efficiency of cEIT::cEIT() (thanks to Tobias Bratfisch). - Improved efficiency of cEIT::cEIT() (thanks to Tobias Bratfisch).
2009-04-12: Version 1.7.6 2009-04-13: Version 1.7.6
- No longer checking for deleted recordings to be removed from the foreground - No longer checking for deleted recordings to be removed from the foreground
thread, to avoid blocking the main loop for too long (thanks to Rolf Ahrenberg). thread, to avoid blocking the main loop for too long (thanks to Rolf Ahrenberg).
- cDevice::PlayTs() now syncs on the TS packet sync bytes.

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and * See the main source file 'vdr.c' for copyright information and
* how to reach the author. * how to reach the author.
* *
* $Id: device.c 2.13 2009/04/05 12:15:41 kls Exp $ * $Id: device.c 2.14 2009/04/13 11:08:05 kls Exp $
*/ */
#include "device.h" #include "device.h"
@ -1322,9 +1322,20 @@ int cDevice::PlayTs(const uchar *Data, int Length, bool VideoOnly)
tsToPesAudio.Reset(); tsToPesAudio.Reset();
tsToPesSubtitle.Reset(); tsToPesSubtitle.Reset();
} }
else if (Length < TS_SIZE) {
esyslog("ERROR: skipped %d bytes of TS fragment", Length);
return Length;
}
else { else {
cMutexLock MutexLock(&mutexCurrentAudioTrack); cMutexLock MutexLock(&mutexCurrentAudioTrack);
while (Length >= TS_SIZE) { while (Length >= TS_SIZE) {
if (Data[0] != TS_SYNC_BYTE) {
int Skipped = 1;
while (Skipped < Length && (Data[Skipped] != TS_SYNC_BYTE || Length - Skipped > TS_SIZE && Data[Skipped + TS_SIZE] != TS_SYNC_BYTE))
Skipped++;
esyslog("ERROR: skipped %d bytes to sync on start of TS packet", Skipped);
return Played + Skipped;
}
if (TsHasPayload(Data)) { // silently ignore TS packets w/o payload if (TsHasPayload(Data)) { // silently ignore TS packets w/o payload
int PayloadOffset = TsPayloadOffset(Data); int PayloadOffset = TsPayloadOffset(Data);
if (PayloadOffset < TS_SIZE) { if (PayloadOffset < TS_SIZE) {