mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Fixed stuttering or asynchronous audio after changing the audio track
This commit is contained in:
parent
f13e8a156e
commit
680838947b
4
HISTORY
4
HISTORY
@ -7645,7 +7645,7 @@ Video Disk Recorder Revision History
|
|||||||
- Expanded tabs in PLUGINS/src/dvbhddevice/setup.c.
|
- Expanded tabs in PLUGINS/src/dvbhddevice/setup.c.
|
||||||
- Some formatting fixes.
|
- Some formatting fixes.
|
||||||
|
|
||||||
2013-02-19: Version 1.7.39
|
2013-02-20: Version 1.7.39
|
||||||
|
|
||||||
- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
|
- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
|
||||||
- Updated the Polish OSD texts (thanks to Marek Nazarko).
|
- Updated the Polish OSD texts (thanks to Marek Nazarko).
|
||||||
@ -7664,3 +7664,5 @@ Video Disk Recorder Revision History
|
|||||||
- The demos in the "osddemo" plugin can now also be ended with the "Back" key.
|
- The demos in the "osddemo" plugin can now also be ended with the "Back" key.
|
||||||
- Fixed flashing OSD in "high level OSD" mode of the TT S2-6400 in case a menu is open
|
- Fixed flashing OSD in "high level OSD" mode of the TT S2-6400 in case a menu is open
|
||||||
while subtitles are being displayed.
|
while subtitles are being displayed.
|
||||||
|
- Fixed stuttering or asynchronous audio after changing the audio track. This is done
|
||||||
|
by doing a "jump" to the current position, which clears all buffers.
|
||||||
|
22
dvbplayer.c
22
dvbplayer.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: dvbplayer.c 2.30 2013/02/12 10:50:10 kls Exp $
|
* $Id: dvbplayer.c 2.31 2013/02/20 09:03:49 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "dvbplayer.h"
|
#include "dvbplayer.h"
|
||||||
@ -220,6 +220,7 @@ private:
|
|||||||
cFrame *readFrame;
|
cFrame *readFrame;
|
||||||
cFrame *playFrame;
|
cFrame *playFrame;
|
||||||
cFrame *dropFrame;
|
cFrame *dropFrame;
|
||||||
|
bool resyncAfterPause;
|
||||||
void TrickSpeed(int Increment);
|
void TrickSpeed(int Increment);
|
||||||
void Empty(void);
|
void Empty(void);
|
||||||
bool NextFile(uint16_t FileNumber = 0, off_t FileOffset = -1);
|
bool NextFile(uint16_t FileNumber = 0, off_t FileOffset = -1);
|
||||||
@ -240,6 +241,7 @@ public:
|
|||||||
void SkipSeconds(int Seconds);
|
void SkipSeconds(int Seconds);
|
||||||
void Goto(int Position, bool Still = false);
|
void Goto(int Position, bool Still = false);
|
||||||
virtual double FramesPerSecond(void) { return framesPerSecond; }
|
virtual double FramesPerSecond(void) { return framesPerSecond; }
|
||||||
|
virtual void SetAudioTrack(eTrackType Type, const tTrackId *TrackId);
|
||||||
virtual bool GetIndex(int &Current, int &Total, bool SnapToIFrame = false);
|
virtual bool GetIndex(int &Current, int &Total, bool SnapToIFrame = false);
|
||||||
virtual bool GetReplayMode(bool &Play, bool &Forward, int &Speed);
|
virtual bool GetReplayMode(bool &Play, bool &Forward, int &Speed);
|
||||||
};
|
};
|
||||||
@ -270,6 +272,7 @@ cDvbPlayer::cDvbPlayer(const char *FileName, bool PauseLive)
|
|||||||
readFrame = NULL;
|
readFrame = NULL;
|
||||||
playFrame = NULL;
|
playFrame = NULL;
|
||||||
dropFrame = NULL;
|
dropFrame = NULL;
|
||||||
|
resyncAfterPause = false;
|
||||||
isyslog("replay %s", FileName);
|
isyslog("replay %s", FileName);
|
||||||
fileName = new cFileName(FileName, false, false, isPesRecording);
|
fileName = new cFileName(FileName, false, false, isPesRecording);
|
||||||
replayFile = fileName->Open();
|
replayFile = fileName->Open();
|
||||||
@ -636,6 +639,12 @@ void cDvbPlayer::Play(void)
|
|||||||
DevicePlay();
|
DevicePlay();
|
||||||
playMode = pmPlay;
|
playMode = pmPlay;
|
||||||
playDir = pdForward;
|
playDir = pdForward;
|
||||||
|
if (resyncAfterPause) {
|
||||||
|
int Current, Total;
|
||||||
|
if (GetIndex(Current, Total, true))
|
||||||
|
Goto(Current);
|
||||||
|
resyncAfterPause = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -799,6 +808,17 @@ 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);
|
||||||
|
}
|
||||||
|
else if (playMode == pmPause)
|
||||||
|
resyncAfterPause = true;
|
||||||
|
}
|
||||||
|
|
||||||
bool cDvbPlayer::GetIndex(int &Current, int &Total, bool SnapToIFrame)
|
bool cDvbPlayer::GetIndex(int &Current, int &Total, bool SnapToIFrame)
|
||||||
{
|
{
|
||||||
if (index) {
|
if (index) {
|
||||||
|
Loading…
Reference in New Issue
Block a user