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

Fixed resuming replay of PES recordings

This commit is contained in:
Klaus Schmidinger 2013-03-07 14:47:02 +01:00
parent a67fe0663d
commit f7645402ff
3 changed files with 15 additions and 4 deletions

View File

@ -696,6 +696,7 @@ Oliver Endriss <o.endriss@gmx.de>
Makefile Makefile
for helping to debug a problem with reduced number of retries in Transfer Mode on for helping to debug a problem with reduced number of retries in Transfer Mode on
SD-FF cards SD-FF cards
for reporting a problem with resuming replay of PES recordings
Reinhard Walter Buchner <rw.buchner@freenet.de> Reinhard Walter Buchner <rw.buchner@freenet.de>
for adding some satellites to 'sources.conf' for adding some satellites to 'sources.conf'

View File

@ -7721,3 +7721,4 @@ Video Disk Recorder Revision History
"Input Stream Identifier" (ISI) (based on a patch from Rolf Ahrenberg). "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. 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 a possible deadlock when changing the audio track while replaying a recording.
- Fixed resuming replay of PES recordings (reported by Oliver Endriss).

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: 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" #include "dvbplayer.h"
@ -33,6 +33,7 @@ private:
public: public:
cPtsIndex(void); cPtsIndex(void);
void Clear(void); void Clear(void);
bool IsEmpty(void);
void Put(uint32_t Pts, int Index); void Put(uint32_t Pts, int Index);
int FindIndex(uint32_t Pts); int FindIndex(uint32_t Pts);
}; };
@ -49,6 +50,12 @@ void cPtsIndex::Clear(void)
w = r = 0; w = r = 0;
} }
bool cPtsIndex::IsEmpty(void)
{
cMutexLock MutexLock(&mutex);
return w == r;
}
void cPtsIndex::Put(uint32_t Pts, int Index) void cPtsIndex::Put(uint32_t Pts, int Index)
{ {
cMutexLock MutexLock(&mutex); cMutexLock MutexLock(&mutex);
@ -811,10 +818,12 @@ void cDvbPlayer::Goto(int Index, bool Still)
void cDvbPlayer::SetAudioTrack(eTrackType Type, const tTrackId *TrackId) void cDvbPlayer::SetAudioTrack(eTrackType Type, const tTrackId *TrackId)
{ {
if (playMode == pmPlay) { if (playMode == pmPlay) {
if (!ptsIndex.IsEmpty()) {
int Current, Total; int Current, Total;
if (GetIndex(Current, Total, true)) if (GetIndex(Current, Total, true))
Goto(Current); Goto(Current);
} }
}
else if (playMode == pmPause) else if (playMode == pmPause)
resyncAfterPause = true; resyncAfterPause = true;
} }