1 /* 2 * Copyright (C) 2005-2018 Team Kodi 3 * This file is part of Kodi - https://kodi.tv 4 * 5 * SPDX-License-Identifier: GPL-2.0-or-later 6 * See LICENSES/README.md for more information. 7 */ 8 9 #pragma once 10 11 #include "threads/CriticalSection.h" 12 13 #include <memory> 14 #include <stdint.h> 15 16 class CVideoReferenceClock; 17 18 class CDVDClock 19 { 20 public: 21 22 CDVDClock(); 23 ~CDVDClock(); 24 25 double GetClock(bool interpolated = true); 26 double GetClock(double& absolute, bool interpolated = true); 27 28 double ErrorAdjust(double error, const char* log); 29 void Discontinuity(double clock, double absolute); 30 void Discontinuity(double clock = 0LL) 31 { 32 Discontinuity(clock, GetAbsoluteClock()); 33 } 34 Reset()35 void Reset() { m_bReset = true; } 36 void SetSpeed(int iSpeed); 37 void SetSpeedAdjust(double adjust); 38 double GetSpeedAdjust(); 39 40 double GetClockSpeed(); /**< get the current speed of the clock relative normal system time */ 41 42 /* tells clock at what framerate video is, to * 43 * allow it to adjust speed for a better match */ 44 int UpdateFramerate(double fps, double* interval = NULL); 45 46 void SetMaxSpeedAdjust(double speed); 47 48 double GetAbsoluteClock(bool interpolated = true); GetFrequency()49 double GetFrequency() { return (double)m_systemFrequency ; } 50 51 bool GetClockInfo(int& MissedVblanks, double& ClockSpeed, double& RefreshRate) const; 52 void SetVsyncAdjust(double adjustment); 53 double GetVsyncAdjust(); 54 55 void Pause(bool pause); 56 void Advance(double time); 57 58 protected: 59 double SystemToAbsolute(int64_t system); 60 int64_t AbsoluteToSystem(double absolute); 61 double SystemToPlaying(int64_t system); 62 63 CCriticalSection m_critSection; 64 int64_t m_systemUsed; 65 int64_t m_startClock; 66 int64_t m_pauseClock; 67 double m_iDisc; 68 bool m_bReset; 69 bool m_paused; 70 int m_speedAfterPause; 71 std::unique_ptr<CVideoReferenceClock> m_videoRefClock; 72 73 int64_t m_systemFrequency; 74 int64_t m_systemOffset; 75 CCriticalSection m_systemsection; 76 77 int64_t m_systemAdjust; 78 int64_t m_lastSystemTime; 79 double m_speedAdjust; 80 double m_vSyncAdjust; 81 double m_frameTime; 82 83 double m_maxspeedadjust; 84 CCriticalSection m_speedsection; 85 }; 86