On 2012-06-21 17:03:48 +0100, Måns Rullgård wrote:
> This function simply calls usleep() if this is available.  On
> Windows, the Sleep() function can be used as a fallback.  The
> conditional #includes in time.c are simplified by including
> unistd.h and windows.h whenever these are available rather than
> having these lines triggered by specific functions.
> 
> Signed-off-by: Mans Rullgard <[email protected]>
> ---
>  configure        |    6 ++++++
>  libavutil/time.c |   19 ++++++++++++++++++-
>  libavutil/time.h |    7 +++++++
>  3 files changed, 31 insertions(+), 1 deletion(-)
> 
> diff --git a/configure b/configure
> index 73efe4f..f9b242d 100755
> --- a/configure
> +++ b/configure
> @@ -1131,6 +1131,7 @@ HAVE_LIST="
>      sdl_video_size
>      setmode
>      setrlimit
> +    Sleep
>      sndio_h
>      socklen_t
>      soundcard_h
> @@ -1159,8 +1160,10 @@ HAVE_LIST="
>      trunc
>      truncf
>      unistd_h
> +    usleep
>      vfp_args
>      VirtualAlloc
> +    windows_h
>      winsock2_h
>      WSAPoll
>      xform_asm
> @@ -2891,12 +2894,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
> @@ -2910,6 +2915,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/libavutil/time.c b/libavutil/time.c
> index 80c4029..0ae79b6 100644
> --- a/libavutil/time.c
> +++ b/libavutil/time.c
> @@ -22,11 +22,16 @@
>  #include <stdint.h>
>  #if HAVE_GETTIMEOFDAY
>  #include <sys/time.h>
> -#elif HAVE_GETSYSTEMTIMEASFILETIME
> +#endif
> +#if HAVE_UNISTD_H
> +#include <unistd.h>
> +#endif
> +#if HAVE_WINDOWS_H
>  #include <windows.h>
>  #endif
>  
>  #include "libavutil/time.h"
> +#include "error.h"
>  
>  int64_t av_gettime(void)
>  {
> @@ -44,3 +49,15 @@ int64_t av_gettime(void)
>      return -1;
>  #endif
>  }
> +
> +int av_usleep(unsigned usec)
> +{
> +#if 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 2ee7e08..a1be5a0 100644
> --- a/libavutil/time.h
> +++ b/libavutil/time.h
> @@ -26,4 +26,11 @@
>   */
>  int64_t av_gettime(void);
>  
> +/**
> + * Sleep for a period of time.
> + * @param  usec Number of microseconds to sleep.
> + * @return zero on success or (negative) error code.
> + */
> +int av_usleep(unsigned usec);

Please mention the reduced precision on windows, if I interpret
msdn correctly the timer resolution used for Sleep might larger
than 10ms.

Are there usleep implementation which fail if the period is larger
than a second? If yes, we should mention that in the docs.

otherwise ok

Janne
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to