From e30d85bfa43213736a9dffde3edc748f17043564 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Mon, 13 Apr 2015 18:18:00 +0200 Subject: dvdplayer audio: do not consider dropped packets for sync error --- xbmc/cores/dvdplayer/DVDPlayerAudio.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xbmc/cores/dvdplayer/DVDPlayerAudio.cpp b/xbmc/cores/dvdplayer/DVDPlayerAudio.cpp index 74df969217..311fff570a 100644 --- a/xbmc/cores/dvdplayer/DVDPlayerAudio.cpp +++ b/xbmc/cores/dvdplayer/DVDPlayerAudio.cpp @@ -548,7 +548,7 @@ void CDVDPlayerAudio::Process() if( audioframe.nb_frames == 0 ) continue; - packetadded = true; + packetadded = false; // we have succesfully decoded an audio frame, setup renderer to match if (!m_dvdAudio.IsValidFormat(audioframe)) @@ -598,7 +598,7 @@ void CDVDPlayerAudio::Process() } // signal to our parent that we have initialized - if(m_started == false && packetadded) + if(m_started == false) { m_started = true; m_messageParent.Put(new CDVDMsgInt(CDVDMsg::PLAYER_STARTED, DVDPLAYER_AUDIO)); -- cgit v1.2.3 From 0434895e42a0e5fb9f7cc7db41d680db846b3812 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Mon, 13 Apr 2015 18:18:59 +0200 Subject: dvdplayer audio: fix/improve calculation of playing pts --- xbmc/cores/dvdplayer/DVDAudio.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/xbmc/cores/dvdplayer/DVDAudio.cpp b/xbmc/cores/dvdplayer/DVDAudio.cpp index a2b1325e05..d1601b1279 100644 --- a/xbmc/cores/dvdplayer/DVDAudio.cpp +++ b/xbmc/cores/dvdplayer/DVDAudio.cpp @@ -276,5 +276,17 @@ double CDVDAudio::GetPlayingPts() if (m_playingPts == DVD_NOPTS_VALUE) return 0.0; - return m_playingPts + CDVDClock::GetAbsoluteClock() - m_timeOfPts; + double now = CDVDClock::GetAbsoluteClock(); + double diff = now - m_timeOfPts; + double cache = GetCacheTime(); + double played = 0.0; + + if (diff < cache) + played = diff; + else + played = cache; + + m_timeOfPts = now; + m_playingPts += played; + return m_playingPts; } -- cgit v1.2.3 From 95d82bb8480b639428500575c699e68de27eebb3 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Tue, 14 Apr 2015 12:21:13 +0200 Subject: dvdplayer: flush audio sync errors on resume and resync --- xbmc/cores/dvdplayer/DVDPlayerAudio.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/xbmc/cores/dvdplayer/DVDPlayerAudio.cpp b/xbmc/cores/dvdplayer/DVDPlayerAudio.cpp index 311fff570a..0d4834c554 100644 --- a/xbmc/cores/dvdplayer/DVDPlayerAudio.cpp +++ b/xbmc/cores/dvdplayer/DVDPlayerAudio.cpp @@ -372,6 +372,7 @@ int CDVDPlayerAudio::DecodeFrame(DVDAudioFrame &audioframe) if (pMsgGeneralResync->m_clock) m_pClock->Discontinuity(m_dvdAudio.GetPlayingPts()); m_syncclock = true; + m_errors.Flush(); } else if (pMsg->IsType(CDVDMsg::GENERAL_RESET)) { @@ -439,6 +440,7 @@ int CDVDPlayerAudio::DecodeFrame(DVDAudioFrame &audioframe) { m_dvdAudio.Resume(); m_syncclock = true; + m_errors.Flush(); } } else @@ -602,6 +604,7 @@ void CDVDPlayerAudio::Process() { m_started = true; m_messageParent.Put(new CDVDMsgInt(CDVDMsg::PLAYER_STARTED, DVDPLAYER_AUDIO)); + m_errors.Flush(); } if( m_dvdAudio.GetPlayingPts() == DVD_NOPTS_VALUE ) -- cgit v1.2.3 From 095d6a8f0f34658d86f935cb0b737cb7bc791a13 Mon Sep 17 00:00:00 2001 From: Rainer Hochecker Date: Tue, 14 Apr 2015 14:38:41 +0200 Subject: dvdplayer: compare to absolute sync error, fix sync issues for large negative errors --- xbmc/cores/dvdplayer/DVDPlayerAudio.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xbmc/cores/dvdplayer/DVDPlayerAudio.cpp b/xbmc/cores/dvdplayer/DVDPlayerAudio.cpp index 0d4834c554..a345a880ea 100644 --- a/xbmc/cores/dvdplayer/DVDPlayerAudio.cpp +++ b/xbmc/cores/dvdplayer/DVDPlayerAudio.cpp @@ -665,7 +665,7 @@ void CDVDPlayerAudio::HandleSyncError(double duration) // as long as we are in sync mode, don't calculate the average // error because drop/dupe changes the value - if (m_syncclock && error > threshold1) + if (m_syncclock && fabs(error) > threshold1) { m_errors.Flush(500); m_integral = 0.0; -- cgit v1.2.3