h264: on reference overflow, reset the reference count to 0, not 1.
[FFMpeg-mirror/mplayer-patches.git] / libavutil / time.c
blob51779c5d177183ce0dd8ecd0b34f018ad89c84d6
1 /*
2 * This file is part of Libav.
4 * Libav is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * Libav is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with Libav; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 #include "config.h"
21 #include <stddef.h>
22 #include <stdint.h>
23 #include <time.h>
24 #if HAVE_GETTIMEOFDAY
25 #include <sys/time.h>
26 #endif
27 #if HAVE_UNISTD_H
28 #include <unistd.h>
29 #endif
30 #if HAVE_WINDOWS_H
31 #include <windows.h>
32 #endif
34 #include "libavutil/time.h"
35 #include "error.h"
37 int64_t av_gettime(void)
39 #if HAVE_GETTIMEOFDAY
40 struct timeval tv;
41 gettimeofday(&tv, NULL);
42 return (int64_t)tv.tv_sec * 1000000 + tv.tv_usec;
43 #elif HAVE_GETSYSTEMTIMEASFILETIME
44 FILETIME ft;
45 int64_t t;
46 GetSystemTimeAsFileTime(&ft);
47 t = (int64_t)ft.dwHighDateTime << 32 | ft.dwLowDateTime;
48 return t / 10 - 11644473600000000; /* Jan 1, 1601 */
49 #else
50 return -1;
51 #endif
54 int av_usleep(unsigned usec)
56 #if HAVE_NANOSLEEP
57 struct timespec ts = { usec / 1000000, usec % 1000000 * 1000 };
58 while (nanosleep(&ts, &ts) < 0 && errno == EINTR);
59 return 0;
60 #elif HAVE_USLEEP
61 return usleep(usec);
62 #elif HAVE_SLEEP
63 Sleep(usec / 1000);
64 return 0;
65 #else
66 return AVERROR(ENOSYS);
67 #endif