diff options
author | Rainer Hochecker <fernetmenta@online.de> | 2015-07-28 11:28:45 +0200 |
---|---|---|
committer | Rainer Hochecker <fernetmenta@online.de> | 2015-07-28 11:28:45 +0200 |
commit | c3ab1f905550de32682f04f2c09716b1504d1115 (patch) | |
tree | 832f2b326ec9e1874139e3013552be6d5d7df8d5 | |
parent | b56e200549d761191e2128ec93b11976a22a512e (diff) | |
parent | 5cbace591f8466b8936ddd4253c9658d2b183dba (diff) |
Merge pull request #7627 from FernetMenta/ffrw
fixes for ff/rw
-rw-r--r-- | xbmc/cores/VideoRenderers/RenderManager.cpp | 4 | ||||
-rw-r--r-- | xbmc/cores/dvdplayer/DVDPlayer.cpp | 2 | ||||
-rw-r--r-- | xbmc/cores/dvdplayer/DVDPlayerVideo.cpp | 6 |
3 files changed, 9 insertions, 3 deletions
diff --git a/xbmc/cores/VideoRenderers/RenderManager.cpp b/xbmc/cores/VideoRenderers/RenderManager.cpp index 018a24061c..8039e5e001 100644 --- a/xbmc/cores/VideoRenderers/RenderManager.cpp +++ b/xbmc/cores/VideoRenderers/RenderManager.cpp @@ -1221,8 +1221,10 @@ void CXBMCRenderManager::DiscardBuffer() while(!m_queued.empty()) requeue(m_discard, m_queued); + m_Queue[m_presentsource].timestamp = GetPresentTime(); + if(m_presentstep == PRESENT_READY) - m_presentstep = PRESENT_IDLE; + m_presentstep = PRESENT_IDLE; m_presentevent.notifyAll(); } diff --git a/xbmc/cores/dvdplayer/DVDPlayer.cpp b/xbmc/cores/dvdplayer/DVDPlayer.cpp index 53817291fd..75ff036df4 100644 --- a/xbmc/cores/dvdplayer/DVDPlayer.cpp +++ b/xbmc/cores/dvdplayer/DVDPlayer.cpp @@ -1828,7 +1828,7 @@ void CDVDPlayer::HandlePlaySpeed() check = false; // skip if frame on screen has not changed else if (m_SpeedState.lastpts == m_dvdPlayerVideo->GetCurrentPts() && - fabs(m_SpeedState.lastabstime - CDVDClock::GetAbsoluteClock()) < DVD_MSEC_TO_TIME(1000)) + (m_SpeedState.lastpts > m_State.dts || m_playSpeed > 0)) check = false; if (check) diff --git a/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp b/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp index 49ef73107a..4ddd7a99b6 100644 --- a/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp +++ b/xbmc/cores/dvdplayer/DVDPlayerVideo.cpp @@ -1120,6 +1120,10 @@ int CDVDPlayerVideo::OutputPicture(const DVDVideoPicture* src, double pts) } return result | EOS_DROPPED; } + else if (pts_org < (renderPts - DVD_MSEC_TO_TIME(-1500 * m_speed))) + { + return result | EOS_DROPPED; + } if (iSleepTime > DVD_MSEC_TO_TIME(20)) iSleepTime = DVD_MSEC_TO_TIME(20); @@ -1179,7 +1183,7 @@ int CDVDPlayerVideo::OutputPicture(const DVDVideoPicture* src, double pts) int maxWaitTime = std::max(DVD_TIME_TO_MSEC(iSleepTime) + 500, 50); // don't wait when going ff if (m_speed > DVD_PLAYSPEED_NORMAL) - maxWaitTime = 0; + maxWaitTime = std::max(DVD_TIME_TO_MSEC(iSleepTime), 0); int buffer = g_renderManager.WaitForBuffer(m_bStop, maxWaitTime); if (buffer < 0) { |