time: Use clock_gettime if the monotonic clock is available
authorLuca Barbato <lu_zero@gentoo.org>
Sun, 24 Aug 2014 16:14:47 +0000 (18:14 +0200)
committerLuca Barbato <lu_zero@gentoo.org>
Wed, 3 Sep 2014 00:38:03 +0000 (02:38 +0200)
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
configure
libavutil/time.c

index 22b699f..af0128a 100755 (executable)
--- a/configure
+++ b/configure
@@ -1432,6 +1432,7 @@ MATH_FUNCS="
 
 SYSTEM_FUNCS="
     aligned_malloc
+    clock_gettime
     closesocket
     CommandLineToArgvW
     CoTaskMemFree
@@ -4038,6 +4039,9 @@ check_func_headers malloc.h _aligned_malloc     && enable aligned_malloc
 check_func  ${malloc_prefix}memalign            && enable memalign
 check_func  ${malloc_prefix}posix_memalign      && enable posix_memalign
 
+check_cpp_condition unistd.h "defined(_POSIX_MONOTONIC_CLOCK)" &&
+    check_func_headers time.h clock_gettime || { check_func_headers time.h clock_gettime -lrt && add_extralibs -lrt; }
+
 check_func  fcntl
 check_func  fork
 check_func  gethrtime
index 62cd445..e833cd0 100644 (file)
@@ -21,7 +21,9 @@
 #include <stddef.h>
 #include <stdint.h>
 #include <time.h>
-#if HAVE_GETTIMEOFDAY
+#if HAVE_CLOCK_GETTIME
+#include <time.h>
+#elif HAVE_GETTIMEOFDAY
 #include <sys/time.h>
 #endif
 #if HAVE_UNISTD_H
 
 int64_t av_gettime(void)
 {
-#if HAVE_GETTIMEOFDAY
+#if HAVE_CLOCK_GETTIME
+    struct timespec ts;
+    clock_gettime(CLOCK_MONOTONIC, &ts);
+    return (int64_t)ts.tv_sec * 100000 + ts.tv_nsec / 1000;
+#elif HAVE_GETTIMEOFDAY
     struct timeval tv;
     gettimeofday(&tv, NULL);
     return (int64_t)tv.tv_sec * 1000000 + tv.tv_usec;