From eaa440d9cc5d6c8dc8fa189cc06268402d738551 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Tue, 24 May 2016 21:06:55 +0100 Subject: [PATCH] RenderMan: Simplify late frame skipping code v2 --- .../VideoRenderers/RenderManager.cpp | 27 +++++++------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/RenderManager.cpp b/xbmc/cores/VideoPlayer/VideoRenderers/RenderManager.cpp index 8e0bd664cfe76..4874feb896683 100644 --- a/xbmc/cores/VideoPlayer/VideoRenderers/RenderManager.cpp +++ b/xbmc/cores/VideoPlayer/VideoRenderers/RenderManager.cpp @@ -1340,27 +1340,18 @@ void CRenderManager::PrepareNextRender() if (renderPts >= nextFramePts) { - // see if any future queued frames are already due - auto iter = m_queued.begin(); - int idx = *iter; - ++iter; - while (iter != m_queued.end()) + while (m_queued.size() > 1) { - // the slot for rendering in time is [pts .. (pts + frametime)] - // renderer/drivers have internal queues, being slightliy late here does not mean that - // we are really late. If we don't recover here, player will take action - if (renderPts < m_Queue[*iter].pts + 0.98 * frametime) + double pts = m_Queue[m_queued.front()].pts; + if (renderPts > pts + 0.98 * frametime) + { + requeue(m_discard, m_queued); + m_QueueSkip++; + } + else break; - idx = *iter; - ++iter; - } - - // skip late frames - while(m_queued.front() != idx) - { - requeue(m_discard, m_queued); - m_QueueSkip++; } + int idx = m_queued.front(); int lateframes = (renderPts - m_Queue[idx].pts) / frametime; if (lateframes)