avutil/parseutils: use microsecond precision when parsing "now" in av_parse_time()
authorMarton Balint <cus@passwd.hu>
Thu, 4 Feb 2016 01:09:48 +0000 (02:09 +0100)
committerMarton Balint <cus@passwd.hu>
Sun, 14 Feb 2016 00:46:35 +0000 (01:46 +0100)
Use av_gettime() instead of time(0) for querying current time.

Signed-off-by: Marton Balint <cus@passwd.hu>
libavutil/parseutils.c
tests/ref/fate/parseutils

index 9fb8d0a..fd8cf2b 100644 (file)
 #include "random_seed.h"
 #include "time_internal.h"
 #include "parseutils.h"
+#include "time.h"
 
 #ifdef TEST
 
 #define av_get_random_seed av_get_random_seed_deterministic
 static uint32_t av_get_random_seed_deterministic(void);
 
-#define time(t) 1331972053
+#define av_gettime() 1331972053200000
 
 #endif
 
@@ -558,7 +559,7 @@ time_t av_timegm(struct tm *tm)
 int av_parse_time(int64_t *timeval, const char *timestr, int duration)
 {
     const char *p, *q;
-    int64_t t;
+    int64_t t, now64;
     time_t now;
     struct tm dt = { 0 }, tmbuf;
     int today = 0, negative = 0, microseconds = 0;
@@ -576,10 +577,11 @@ int av_parse_time(int64_t *timeval, const char *timestr, int duration)
     q = NULL;
     *timeval = INT64_MIN;
     if (!duration) {
-        now = time(0);
+        now64 = av_gettime();
+        now = now64 / 1000000;
 
         if (!av_strcasecmp(timestr, "now")) {
-            *timeval = (int64_t) now * 1000000;
+            *timeval = now64;
             return 0;
         }
 
@@ -870,7 +872,7 @@ int main(void)
 
         av_log_set_level(AV_LOG_DEBUG);
         putenv(tzstr);
-        printf("(now is 2012-03-17 09:14:13 +0100, local time is UTC+1)\n");
+        printf("(now is 2012-03-17 09:14:13.2 +0100, local time is UTC+1)\n");
         for (i = 0;  i < FF_ARRAY_ELEMS(time_string); i++) {
             printf("%-24s -> ", time_string[i]);
             if (av_parse_time(&tv, time_string[i], 0)) {
index 1482452..176140c 100644 (file)
@@ -70,8 +70,8 @@ fmt:'%Y-%m-%d %H:%M:%S' spec:'2012-12-21 20:12:21' -> 2012-12-21 20:12:21
 fmt:'  %Y - %m - %d %H : %M : %S' spec:'   2012 - 12 -  21   20 : 12 : 21' -> 2012-12-21 20:12:21
 
 Testing av_parse_time()
-(now is 2012-03-17 09:14:13 +0100, local time is UTC+1)
-now                      ->     1331972053.000000 = 2012-03-17T08:14:13Z
+(now is 2012-03-17 09:14:13.2 +0100, local time is UTC+1)
+now                      ->     1331972053.200000 = 2012-03-17T08:14:13Z
 12:35:46                 ->     1331984146.000000 = 2012-03-17T11:35:46Z
 2000-12-20 0:02:47.5z    ->      977270567.500000 = 2000-12-20T00:02:47Z
 2000-12-20T010247.6      ->      977270567.600000 = 2000-12-20T00:02:47Z