From f7645402ffd4f79cc92278135bc29f1b477f3682 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Thu, 7 Mar 2013 14:47:02 +0100 Subject: [PATCH] Fixed resuming replay of PES recordings --- CONTRIBUTORS | 1 + HISTORY | 1 + dvbplayer.c | 17 +++++++++++++---- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 9dbe19e9..5444ddd5 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -696,6 +696,7 @@ Oliver Endriss Makefile for helping to debug a problem with reduced number of retries in Transfer Mode on SD-FF cards + for reporting a problem with resuming replay of PES recordings Reinhard Walter Buchner for adding some satellites to 'sources.conf' diff --git a/HISTORY b/HISTORY index 5ca52fb9..23d191d1 100644 --- a/HISTORY +++ b/HISTORY @@ -7721,3 +7721,4 @@ Video Disk Recorder Revision History "Input Stream Identifier" (ISI) (based on a patch from Rolf Ahrenberg). With this VDR now supports "multi streaming" on DVB-S2 and DVB-T2 transponders. - Fixed a possible deadlock when changing the audio track while replaying a recording. +- Fixed resuming replay of PES recordings (reported by Oliver Endriss). diff --git a/dvbplayer.c b/dvbplayer.c index a4aa2dd7..9f4d97e6 100644 --- a/dvbplayer.c +++ b/dvbplayer.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: dvbplayer.c 2.33 2013/03/07 13:05:15 kls Exp $ + * $Id: dvbplayer.c 2.34 2013/03/07 14:38:26 kls Exp $ */ #include "dvbplayer.h" @@ -33,6 +33,7 @@ private: public: cPtsIndex(void); void Clear(void); + bool IsEmpty(void); void Put(uint32_t Pts, int Index); int FindIndex(uint32_t Pts); }; @@ -49,6 +50,12 @@ void cPtsIndex::Clear(void) w = r = 0; } +bool cPtsIndex::IsEmpty(void) +{ + cMutexLock MutexLock(&mutex); + return w == r; +} + void cPtsIndex::Put(uint32_t Pts, int Index) { cMutexLock MutexLock(&mutex); @@ -811,9 +818,11 @@ void cDvbPlayer::Goto(int Index, bool Still) void cDvbPlayer::SetAudioTrack(eTrackType Type, const tTrackId *TrackId) { if (playMode == pmPlay) { - int Current, Total; - if (GetIndex(Current, Total, true)) - Goto(Current); + if (!ptsIndex.IsEmpty()) { + int Current, Total; + if (GetIndex(Current, Total, true)) + Goto(Current); + } } else if (playMode == pmPause) resyncAfterPause = true;