From 36b68e1022268c218d75a2091a1eda2fe03fbf26 Mon Sep 17 00:00:00 2001 From: faust3 Date: Sun, 30 Mar 2003 21:07:17 +0000 Subject: high precision timer for windows patch by Frodo git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@9766 b3059339-0415-0410-9bf9-f77b7e298cf2 --- osdep/timer-win.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 osdep/timer-win.c (limited to 'osdep') diff --git a/osdep/timer-win.c b/osdep/timer-win.c new file mode 100644 index 0000000000..07e2b7416c --- /dev/null +++ b/osdep/timer-win.c @@ -0,0 +1,71 @@ +#include +#include +#include +#include +#include + +static LARGE_INTEGER qwTimerFrequency; +static LARGE_INTEGER qwTimerStart; +static LARGE_INTEGER m_lStartTime; +static float m_fuSecsPerTick; +static unsigned long RelativeTime = 0; + +int usec_sleep(int usec_delay) +{ + LARGE_INTEGER qwStartTicks, qwCurrTicks; + double dResult; + long lTick; + double fuSecDelay = ((float) usec_delay) / 1000000.0; + + QueryPerformanceCounter(&qwStartTicks); + do { + QueryPerformanceCounter(&qwCurrTicks); + dResult = + ((double) (qwCurrTicks.QuadPart - qwStartTicks.QuadPart)) / + ((double) (qwTimerFrequency.QuadPart)); + } while (dResult < fuSecDelay); +} + +// Returns current time in microseconds +unsigned long GetTimer() +{ + LARGE_INTEGER qwTime; + FLOAT fTime; + UINT64 uiQuadPart; + + QueryPerformanceCounter(&qwTime); + qwTime.QuadPart -= m_lStartTime.QuadPart; + uiQuadPart = (UINT64) qwTime.QuadPart; + uiQuadPart /= ((UINT64) 10); // prevent overflow after 4294.1 secs, now overflows after 42941 secs + fTime = ((FLOAT) (uiQuadPart)) / m_fuSecsPerTick; + return (unsigned long) fTime; +} + +// Returns current time in microseconds +float GetRelativeTime() +{ + unsigned long t, r; + + t = GetTimer(); + r = t - RelativeTime; + RelativeTime = t; + return (float) r *0.000001F; +} + +// Returns current time in milliseconds +unsigned int GetTimerMS() +{ + return GetTimer() / 1000; +} + +void InitTimer() +{ + FLOAT t; + + QueryPerformanceFrequency(&qwTimerFrequency); // ticks/sec + m_fuSecsPerTick = (FLOAT) (((FLOAT) (qwTimerFrequency.QuadPart)) / 1000.0); // tics/msec + m_fuSecsPerTick = (FLOAT) (m_fuSecsPerTick / 1000.0); // ticks/usec + m_fuSecsPerTick /= 10.0; + QueryPerformanceCounter(&m_lStartTime); + t = GetRelativeTime(); +} -- cgit v1.2.3