Browse Source

Add custom implementation of gettimeofday for windows

Filip Klembara 4 years ago
parent
commit
7a06e48281
1 changed files with 38 additions and 0 deletions
  1. 38 0
      examples/streamer/helpers.cpp

+ 38 - 0
examples/streamer/helpers.cpp

@@ -19,6 +19,44 @@
 #include "helpers.hpp"
 #include "helpers.hpp"
 #include <ctime>
 #include <ctime>
 
 
+#if _WIN32
+// taken from https://stackoverflow.com/questions/10905892/equivalent-of-gettimeday-for-windows
+
+#include <Windows.h>
+
+struct timezone {
+    int tz_minuteswest;
+    int tz_dsttime;
+};
+int gettimeofday(struct timeval *tv, struct timezone *tz)
+{
+    if (tv) {
+        FILETIME               filetime; /* 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601 00:00 UTC */
+        ULARGE_INTEGER         x;
+        ULONGLONG              usec;
+        static const ULONGLONG epoch_offset_us = 11644473600000000ULL; /* microseconds betweeen Jan 1,1601 and Jan 1,1970 */
+
+#if _WIN32_WINNT >= _WIN32_WINNT_WIN8
+        GetSystemTimePreciseAsFileTime(&filetime);
+#else
+        GetSystemTimeAsFileTime(&filetime);
+#endif
+        x.LowPart =  filetime.dwLowDateTime;
+        x.HighPart = filetime.dwHighDateTime;
+        usec = x.QuadPart / 10  -  epoch_offset_us;
+        tv->tv_sec  = (time_t)(usec / 1000000ULL);
+        tv->tv_usec = (long)(usec % 1000000ULL);
+    }
+    if (tz) {
+        TIME_ZONE_INFORMATION timezone;
+        GetTimeZoneInformation(&timezone);
+        tz->tz_minuteswest = timezone.Bias;
+        tz->tz_dsttime = 0;
+    }
+    return 0;
+}
+#endif
+
 using namespace std;
 using namespace std;
 using namespace rtc;
 using namespace rtc;