aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRainer Hochecker <fernetmenta@online.de>2015-07-28 11:28:45 +0200
committerRainer Hochecker <fernetmenta@online.de>2015-07-28 11:28:45 +0200
commitc3ab1f905550de32682f04f2c09716b1504d1115 (patch)
tree832f2b326ec9e1874139e3013552be6d5d7df8d5
parentb56e200549d761191e2128ec93b11976a22a512e (diff)
parent5cbace591f8466b8936ddd4253c9658d2b183dba (diff)
Merge pull request #7627 from FernetMenta/ffrw
fixes for ff/rw
-rw-r--r--xbmc/cores/VideoRenderers/RenderManager.cpp4
-rw-r--r--xbmc/cores/dvdplayer/DVDPlayer.cpp2
-rw-r--r--xbmc/cores/dvdplayer/DVDPlayerVideo.cpp6
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)
{