void Debug::Update(float deltaTime) { //added during final chapter if (deltaTime == 0) deltaTime = 0.01667f; else _deltaTime = deltaTime; // Get delta time _gameTime = g_Engine->GetGameTime() * 0.001;// Get current game time CalcFrameRate(); }
CVideoPlayerVideo::EOutputState CVideoPlayerVideo::OutputPicture(const VideoPicture* pPicture) { m_bAbortOutput = false; if (m_processInfo.GetVideoStereoMode() != pPicture->stereoMode) { m_processInfo.SetVideoStereoMode(pPicture->stereoMode); // signal about changes in video parameters m_messageParent.Put(new CDVDMsg(CDVDMsg::PLAYER_AVCHANGE)); } double config_framerate = m_bFpsInvalid ? 0.0 : m_fFrameRate; if (m_processInfo.GetVideoInterlaced()) { if (MathUtils::FloatEquals(config_framerate, 25.0, 0.02)) config_framerate = 50.0; else if (MathUtils::FloatEquals(config_framerate, 29.97, 0.02)) config_framerate = 59.94; } int sorient = m_processInfo.GetVideoSettings().m_Orientation; int orientation = sorient != 0 ? (sorient + m_hints.orientation) % 360 : m_hints.orientation; if (!m_renderManager.Configure(*pPicture, static_cast<float>(config_framerate), orientation, m_pVideoCodec->GetAllowedReferences())) { CLog::Log(LOGERROR, "%s - failed to configure renderer", __FUNCTION__); return OUTPUT_ABORT; } //try to calculate the framerate m_ptsTracker.Add(pPicture->pts); if (!m_stalled) CalcFrameRate(); // signal to clock what our framerate is, it may want to adjust it's // speed to better match with our video renderer's output speed m_pClock->UpdateFramerate(m_fFrameRate); // calculate the time we need to delay this picture before displaying double iPlayingClock, iCurrentClock; iPlayingClock = m_pClock->GetClock(iCurrentClock, false); // snapshot current clock if (m_speed < 0) { double renderPts; int queued, discard; int lateframes; double inputPts = m_droppingStats.m_lastPts; m_renderManager.GetStats(lateframes, renderPts, queued, discard); if (pPicture->pts > renderPts || queued > 0) { if (inputPts >= renderPts) { m_rewindStalled = true; Sleep(50); } return OUTPUT_DROPPED; } else if (pPicture->pts < iPlayingClock) { return OUTPUT_DROPPED; } } if ((pPicture->iFlags & DVP_FLAG_DROPPED)) { m_droppingStats.AddOutputDropGain(pPicture->pts, 1); CLog::Log(LOGDEBUG,"%s - dropped in output", __FUNCTION__); return OUTPUT_DROPPED; } int timeToDisplay = DVD_TIME_TO_MSEC(pPicture->pts - iPlayingClock); // make sure waiting time is not negative int maxWaitTime = std::min(std::max(timeToDisplay + 500, 50), 500); // don't wait when going ff if (m_speed > DVD_PLAYSPEED_NORMAL) maxWaitTime = std::max(timeToDisplay, 0); int buffer = m_renderManager.WaitForBuffer(m_bAbortOutput, maxWaitTime); if (buffer < 0) { return OUTPUT_AGAIN; } ProcessOverlays(pPicture, pPicture->pts); EINTERLACEMETHOD deintMethod = EINTERLACEMETHOD::VS_INTERLACEMETHOD_NONE; deintMethod = m_processInfo.GetVideoSettings().m_InterlaceMethod; if (!m_processInfo.Supports(deintMethod)) deintMethod = m_processInfo.GetDeinterlacingMethodDefault(); if (!m_renderManager.AddVideoPicture(*pPicture, m_bAbortOutput, deintMethod, (m_syncState == ESyncState::SYNC_STARTING))) { m_droppingStats.AddOutputDropGain(pPicture->pts, 1); return OUTPUT_DROPPED; } return OUTPUT_NORMAL; }