Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

MythPlayer: Pause the audio when the video is lagging.

When using software decoding and the decoder is struggling to keep up,
audio sync may take a long time to recover after startup or following a
skip. Under certain conditions, playback never recovers and because we
are constantly skipping frames, the user sees no screen updates - and
hence playback looks entirely broken.

By pausing the audio when skipping frames, we allow video playback to
catch up.
  • Loading branch information...
commit afe5669be72c3c452dfb626d362ed9166ac916cd 1 parent a41a2ad
Mark Kendall authored
View
13 mythtv/libs/libmythtv/mythplayer.cpp
@@ -201,7 +201,7 @@ MythPlayer::MythPlayer(bool muted)
avsync_predictor(0), avsync_predictor_enabled(false),
refreshrate(0),
lastsync(false), repeat_delay(0),
- disp_timecode(0),
+ disp_timecode(0), avsync_audiopaused(false),
// Time Code stuff
prevtc(0), prevrp(0),
// LiveTVChain stuff
@@ -1717,12 +1717,23 @@ void MythPlayer::AVSync(VideoFrame *buffer, bool limit_delay)
.arg(-diverge);
}
+ if (!dropframe && avsync_audiopaused)
+ {
+ avsync_audiopaused = false;
+ audio.Pause(false);
+ }
+
if (dropframe)
{
// Reset A/V Sync
lastsync = true;
currentaudiotime = AVSyncGetAudiotime();
VERBOSE(VB_PLAYBACK, LOC + dbg + "dropping frame to catch up.");
+ if (!audio.IsPaused())
+ {
+ audio.Pause(true);
+ avsync_audiopaused = true;
+ }
}
else if (!using_null_videoout)
{
View
1  mythtv/libs/libmythtv/mythplayer.h
@@ -712,6 +712,7 @@ class MTV_PUBLIC MythPlayer
bool decode_extra_audio;
int repeat_delay;
int64_t disp_timecode;
+ bool avsync_audiopaused;
// Time Code stuff
int prevtc; ///< 32 bit timecode if last VideoFrame shown
Please sign in to comment.
Something went wrong with that request. Please try again.