History

lavu: add av_gettime_relative()

These functions are using the POSIX clock_gettime() function with the CLOCK_MONOTONIC clock id. If these are not present on the targeted platform, the new functions will fallback on using the original realtime functions av_gettime() and av_usleep(). Monotonic support can be added on other platforms with their equivalent native system API eventually if possible. Whenever time is requested to measure relative time, the monotonic clock, when available, is superior to the system realtime clock because it is not affected by discontinuous jumps in the system time In a future step, offering the flexibility to let the user choose between rt and monotonic clock for avdevices packets will be investigated. It is very easy to experience the issues that this patch attempt to address by rewinding back in the past the system time while ffmpeg is running. this is breaking the ffmpeg report printing (ffmepg.c:print_report()) and the the rate emulator functionality (-re) without the patch.

Olivier Langlois committed 12 years ago

Commit 0eec06e1 parent a7320c14 files · +39 −1Browse files

Unified · Split

4 files
  1. doc/APIchanges +3 −0
  2. libavutil/time.c +20 −0
  3. libavutil/time.h +15 −0
  4. libavutil/version.h +1 −1
doc/APIchanges+3−0
@@ -15,6 +15,9 @@ libavutil: 2012-10-22 · 14 unmodified lines
15 15
16API changes, most recent first:16API changes, most recent first:
17 17
182014-05-xx - xxxxxxx - lavu 52.84.100 - time.h
19 Add av_gettime_relative() av_gettime_relative_is_monotonic()
20
182014-05-xx - xxxxxxx - lavf 55.17.0 - avformat.h212014-05-xx - xxxxxxx - lavf 55.17.0 - avformat.h
19 Add AVMFT_FLAG_BITEXACT flag. Muxers now use it instead of checking22 Add AVMFT_FLAG_BITEXACT flag. Muxers now use it instead of checking
20 CODEC_FLAG_BITEXACT on the first stream.23 CODEC_FLAG_BITEXACT on the first stream.
libavutil/time.c+20−0
@@ -53,6 +53,26 @@ int64_t av_gettime(void) · 52 unmodified lines
53#endif53#endif
54}54}
55 55
56int64_t av_gettime_relative(void)
57{
58#if HAVE_CLOCK_GETTIME && defined(CLOCK_MONOTONIC)
59 struct timespec ts;
60 clock_gettime(CLOCK_MONOTONIC, &ts);
61 return (int64_t)ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
62#else
63 return av_gettime();
64#endif
65}
66
67int av_gettime_relative_is_monotonic(void)
68{
69#if HAVE_CLOCK_GETTIME && defined(CLOCK_MONOTONIC)
70 return 1;
71#else
72 return 0;
73#endif
74}
75
56int av_usleep(unsigned usec)76int av_usleep(unsigned usec)
57{77{
58#if HAVE_NANOSLEEP78#if HAVE_NANOSLEEP
libavutil/time.h+15−0
@@ -28,6 +28,21 @@ · 27 unmodified lines
28 */28 */
29int64_t av_gettime(void);29int64_t av_gettime(void);
30 30
31/**
32 * Get the current time in microseconds since some unspecified starting point.
33 * On platforms that support it, the time comes from a monotonic clock
34 * This property makes this time source ideal for measuring relative time.
35 * If a monotonic clock is not available on the targeted platform, the
36 * implementation fallsback on using av_gettime().
37 */
38int64_t av_gettime_relative(void);
39
40/**
41 * Indicates with a boolean result if the av_gettime_relative() time source
42 * is monotonic.
43 */
44int av_gettime_relative_is_monotonic(void);
45
31/**46/**
32 * Sleep for a period of time. Although the duration is expressed in47 * Sleep for a period of time. Although the duration is expressed in
33 * microseconds, the actual delay may be rounded to the precision of the48 * microseconds, the actual delay may be rounded to the precision of the
libavutil/version.h+1−1
@@ -56,7 +56,7 @@ · 55 unmodified lines
56 */56 */
57 57
58#define LIBAVUTIL_VERSION_MAJOR 5258#define LIBAVUTIL_VERSION_MAJOR 52
59#define LIBAVUTIL_VERSION_MINOR 8359#define LIBAVUTIL_VERSION_MINOR 84
60#define LIBAVUTIL_VERSION_MICRO 10060#define LIBAVUTIL_VERSION_MICRO 100
61 61
62#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \62#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t