From d3d3a32c9d389cc0d6a91b389988a225ae01c948 Mon Sep 17 00:00:00 2001 From: Mans Rullgard Date: Thu, 21 Jun 2012 17:00:25 +0100 Subject: [PATCH] lavu: add av_usleep() function This function implements a delay using the first available of the following functions: - nanosleep() - usleep() - Sleep() (Windows) The conditional #includes in time.c are simplified by including unistd.h and windows.h whenever they are available rather than having these lines triggered by specific functions. Signed-off-by: Mans Rullgard --- configure | 7 +++++++ doc/APIchanges | 3 +++ libavutil/avutil.h | 2 +- libavutil/time.c | 24 +++++++++++++++++++++++- libavutil/time.h | 10 ++++++++++ 5 files changed, 44 insertions(+), 2 deletions(-) diff --git a/configure b/configure index a9fd94f999..aa1856d673 100755 --- a/configure +++ b/configure @@ -1113,6 +1113,7 @@ HAVE_LIST=" memalign mkstemp mmap + nanosleep netinet_sctp_h poll_h posix_memalign @@ -1123,6 +1124,7 @@ HAVE_LIST=" sdl_video_size setmode setrlimit + Sleep sndio_h socklen_t soundcard_h @@ -1151,8 +1153,10 @@ HAVE_LIST=" trunc truncf unistd_h + usleep vfp_args VirtualAlloc + windows_h winsock2_h xform_asm xmm_clobbers @@ -2851,12 +2855,14 @@ check_func strtok_r check_func sched_getaffinity check_func sysconf check_func sysctl +check_func usleep 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 Sleep check_func_headers windows.h VirtualAlloc check_header dlfcn.h @@ -2870,6 +2876,7 @@ check_header sys/select.h check_header unistd.h check_header vdpau/vdpau.h check_header vdpau/vdpau_x11.h +check_header windows.h check_header X11/extensions/XvMClib.h disabled zlib || check_lib zlib.h zlibVersion -lz || disable zlib diff --git a/doc/APIchanges b/doc/APIchanges index 85db9033cb..b84c7ae85c 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -13,6 +13,9 @@ libavutil: 2011-04-18 API changes, most recent first: +2012-06-22 - xxxxxxx - lavu 51.34.0 + Add av_usleep() + 2012-06-20 - ae0a301 - lavu 51.33.0 Move av_gettime() to libavutil, add libavutil/time.h diff --git a/libavutil/avutil.h b/libavutil/avutil.h index ce73754ead..351e8279ac 100644 --- a/libavutil/avutil.h +++ b/libavutil/avutil.h @@ -152,7 +152,7 @@ */ #define LIBAVUTIL_VERSION_MAJOR 51 -#define LIBAVUTIL_VERSION_MINOR 33 +#define LIBAVUTIL_VERSION_MINOR 34 #define LIBAVUTIL_VERSION_MICRO 0 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ diff --git a/libavutil/time.c b/libavutil/time.c index 80c4029d9b..51779c5d17 100644 --- a/libavutil/time.c +++ b/libavutil/time.c @@ -20,13 +20,19 @@ #include #include +#include #if HAVE_GETTIMEOFDAY #include -#elif HAVE_GETSYSTEMTIMEASFILETIME +#endif +#if HAVE_UNISTD_H +#include +#endif +#if HAVE_WINDOWS_H #include #endif #include "libavutil/time.h" +#include "error.h" int64_t av_gettime(void) { @@ -44,3 +50,19 @@ int64_t av_gettime(void) return -1; #endif } + +int av_usleep(unsigned usec) +{ +#if HAVE_NANOSLEEP + struct timespec ts = { usec / 1000000, usec % 1000000 * 1000 }; + while (nanosleep(&ts, &ts) < 0 && errno == EINTR); + return 0; +#elif HAVE_USLEEP + return usleep(usec); +#elif HAVE_SLEEP + Sleep(usec / 1000); + return 0; +#else + return AVERROR(ENOSYS); +#endif +} diff --git a/libavutil/time.h b/libavutil/time.h index 2ee7e08caf..b01a97d770 100644 --- a/libavutil/time.h +++ b/libavutil/time.h @@ -26,4 +26,14 @@ */ int64_t av_gettime(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. + * + * @param usec Number of microseconds to sleep. + * @return zero on success or (negative) error code. + */ +int av_usleep(unsigned usec); + #endif /* AVUTIL_TIME_H */