Since av_gettime() is used in a number of places where actual
real time clock is required, the monotonic clock introduced in
ebef9f5a5 would have consequences that are hard to handle. Instead
split it into a separate function that can be used in the cases
where only relative time is desired.
Based on a patch by Olivier Langlois.
---
doc/APIchanges | 3 +++
libavutil/time.c | 20 ++++++++++++++------
libavutil/time.h | 9 +++++++++
libavutil/version.h | 2 +-
4 files changed, 27 insertions(+), 7 deletions(-)
diff --git a/doc/APIchanges b/doc/APIchanges
index a8b7091..1bacd0a 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -13,6 +13,9 @@ libavutil: 2014-08-09
API changes, most recent first:
+2014-10-xx - xxxxxxx - lavu 54.5.0 - time.h
+ Add av_gettime_relative()
+
2014-10-xx - xxxxxxx - lavc 56.5.0 - avcodec.h
Replace AVCodecContext.time_base used for decoding
with AVCodecContext.framerate.
diff --git a/libavutil/time.c b/libavutil/time.c
index 42497da..40f7cf1 100644
--- a/libavutil/time.c
+++ b/libavutil/time.c
@@ -23,7 +23,8 @@
#include <time.h>
#if HAVE_CLOCK_GETTIME
#include <time.h>
-#elif HAVE_GETTIMEOFDAY
+#endif
+#if HAVE_GETTIMEOFDAY
#include <sys/time.h>
#endif
#if HAVE_UNISTD_H
@@ -38,11 +39,7 @@
int64_t av_gettime(void)
{
-#if HAVE_CLOCK_GETTIME
- struct timespec ts;
- clock_gettime(CLOCK_MONOTONIC, &ts);
- return (int64_t)ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
-#elif HAVE_GETTIMEOFDAY
+#if HAVE_GETTIMEOFDAY
struct timeval tv;
gettimeofday(&tv, NULL);
return (int64_t)tv.tv_sec * 1000000 + tv.tv_usec;
@@ -57,6 +54,17 @@ int64_t av_gettime(void)
#endif
}
+int64_t av_gettime_relative(void)
+{
+#if HAVE_CLOCK_GETTIME
+ struct timespec ts;
+ clock_gettime(CLOCK_MONOTONIC, &ts);
+ return (int64_t)ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
+#else
+ return av_gettime();
+#endif
+}
+
int av_usleep(unsigned usec)
{
#if HAVE_NANOSLEEP
diff --git a/libavutil/time.h b/libavutil/time.h
index b01a97d..4b46c4b 100644
--- a/libavutil/time.h
+++ b/libavutil/time.h
@@ -27,6 +27,15 @@
int64_t av_gettime(void);
/**
+ * Get the current time in microseconds since some unspecified starting point.
+ * On platforms that support it, the time comes from a monotonic clock
+ * This property makes this time source ideal for measuring relative time.
+ * If a monotonic clock is not available on the targeted platform, the
+ * implementation falls back on using av_gettime().
+ */
+int64_t av_gettime_relative(void);
+
+/**
* Sleep for a period of time. Although the duration is expressed in
* microseconds, the actual delay may be rounded to the precision of the
* system timer.
diff --git a/libavutil/version.h b/libavutil/version.h
index 8279635..b40009e 100644
--- a/libavutil/version.h
+++ b/libavutil/version.h
@@ -54,7 +54,7 @@
*/
#define LIBAVUTIL_VERSION_MAJOR 54
-#define LIBAVUTIL_VERSION_MINOR 4
+#define LIBAVUTIL_VERSION_MINOR 5
#define LIBAVUTIL_VERSION_MICRO 0
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
--
1.9.3 (Apple Git-50)
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel