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:
parent
1d829aaf6d
commit
3628bbbfa1
3
HISTORY
3
HISTORY
@ -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.
|
||||||
|
13
device.c
13
device.c
@ -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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user