OSDN Git Service

av_gettime: support Win32 without gettimeofday()
authorMans Rullgard <mans@mansr.com>
Wed, 20 Jun 2012 12:46:52 +0000 (13:46 +0100)
committerMans Rullgard <mans@mansr.com>
Wed, 20 Jun 2012 16:09:03 +0000 (17:09 +0100)
Based on patch by Ronald S. Bultje.

Signed-off-by: Mans Rullgard <mans@mansr.com>
configure
libavutil/time.c

index 0baa755..07608c4 100755 (executable)
--- a/configure
+++ b/configure
@@ -1084,7 +1084,9 @@ HAVE_LIST="
     GetProcessAffinityMask
     GetProcessMemoryInfo
     GetProcessTimes
+    GetSystemTimeAsFileTime
     getrusage
+    gettimeofday
     gnu_as
     ibm_asm
     inet_aton
@@ -2832,6 +2834,7 @@ check_func  getaddrinfo $network_extralibs
 check_func  gethrtime
 check_func  getrusage
 check_struct "sys/time.h sys/resource.h" "struct rusage" ru_maxrss
+check_func  gettimeofday
 check_func  inet_aton $network_extralibs
 check_func  isatty
 check_func  localtime_r
@@ -2851,6 +2854,7 @@ check_func_headers io.h setmode
 check_lib2 "windows.h psapi.h" GetProcessMemoryInfo -lpsapi
 check_func_headers windows.h GetProcessAffinityMask
 check_func_headers windows.h GetProcessTimes
+check_func_headers windows.h GetSystemTimeAsFileTime
 check_func_headers windows.h MapViewOfFile
 check_func_headers windows.h VirtualAlloc
 
index a0b713e..80c4029 100644 (file)
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#include "config.h"
+
 #include <stddef.h>
 #include <stdint.h>
+#if HAVE_GETTIMEOFDAY
 #include <sys/time.h>
+#elif HAVE_GETSYSTEMTIMEASFILETIME
+#include <windows.h>
+#endif
 
 #include "libavutil/time.h"
 
 int64_t av_gettime(void)
 {
+#if HAVE_GETTIMEOFDAY
     struct timeval tv;
     gettimeofday(&tv, NULL);
     return (int64_t)tv.tv_sec * 1000000 + tv.tv_usec;
+#elif HAVE_GETSYSTEMTIMEASFILETIME
+    FILETIME ft;
+    int64_t t;
+    GetSystemTimeAsFileTime(&ft);
+    t = (int64_t)ft.dwHighDateTime << 32 | ft.dwLowDateTime;
+    return t / 10 - 11644473600000000; /* Jan 1, 1601 */
+#else
+    return -1;
+#endif
 }