bool CDVDClock::Update(double clock, double absolute, double limit, const char* log) { CExclusiveLock lock(m_critSection); double was_absolute = SystemToAbsolute(m_startClock); double was_clock = m_iDisc + absolute - was_absolute; lock.Leave(); double error = std::abs(clock - was_clock); // skip minor updates while speed adjust is active // -> adjusting buffer levels if (m_speedAdjust != 0 && error < DVD_MSEC_TO_TIME(100)) { return false; } else if (error > limit) { Discontinuity(clock, absolute); CLog::Log(LOGDEBUG, "CDVDClock::Discontinuity - %s - was:%f, should be:%f, error:%f" , log , was_clock , clock , clock - was_clock); return true; } else return false; }
// Returns the current absolute clock in units of DVD_TIME_BASE (usually microseconds). double OMXClock::GetAbsoluteClock(bool interpolated /*= true*/) { Lock(); CheckSystemClock(); double current = GetTime(); UnLock(); return SystemToAbsolute(current); }
// Returns the current absolute clock in units of DVD_TIME_BASE (usually microseconds). double CDVDClock::GetAbsoluteClock(bool interpolated /*= true*/) { CSingleLock lock(m_systemsection); int64_t current; current = m_videoRefClock->GetTime(interpolated); return SystemToAbsolute(current); }
double OMXClock::GetAbsoluteClock(bool interpolated /*= true*/) { Lock(); CheckSystemClock(); int64_t current; current = g_VideoReferenceClock.GetTime(interpolated); UnLock(); return SystemToAbsolute(current); }
double OMXClock::GetClock(double& absolute, bool interpolated /*= true*/) { int64_t current = GetTime(interpolated); Lock(); CheckSystemClock(); absolute = SystemToAbsolute(current); UnLock(); return SystemToPlaying(current); }
double CDVDClock::GetClock(double& absolute, bool interpolated /*= true*/) { int64_t current = g_VideoReferenceClock.GetTime(interpolated); { CSingleLock lock(m_systemsection); CheckSystemClock(); absolute = SystemToAbsolute(current); } return GetClock(interpolated); }
double CDVDClock::GetClock(double& absolute, bool interpolated /*= true*/) { int64_t current = m_videoRefClock->GetTime(interpolated); CSingleLock lock(m_systemsection); absolute = SystemToAbsolute(current); m_systemAdjust += m_speedAdjust * (current - m_lastSystemTime); m_lastSystemTime = current; return SystemToPlaying(current); }
// Returns the current absolute clock in units of DVD_TIME_BASE (usually microseconds). double CDVDClock::GetAbsoluteClock(bool interpolated /*= true*/) { CSingleLock lock(m_systemsection); CheckSystemClock(); int64_t current; current = g_VideoReferenceClock.GetTime(interpolated); #if _DEBUG if (interpolated) //only compare interpolated time, clock might go backwards otherwise { static int64_t old; if(old > current) CLog::Log(LOGWARNING, "CurrentHostCounter() moving backwords by %"PRId64" ticks with freq of %"PRId64, old - current, m_systemFrequency); old = current; } #endif return SystemToAbsolute(current); }
bool CDVDClock::Update(double clock, double absolute, double limit, const char* log) { CExclusiveLock lock(m_critSection); double was_absolute = SystemToAbsolute(m_startClock); double was_clock = m_iDisc + absolute - was_absolute; lock.Leave(); if(std::abs(clock - was_clock) > limit) { Discontinuity(clock, absolute); CLog::Log(LOGDEBUG, "CDVDClock::Discontinuity - %s - was:%f, should be:%f, error:%f" , log , was_clock , clock , clock - was_clock); return true; } else return false; }