]> git.sesse.net Git - vlc/commitdiff
mtime: Avoid overflow when using mach_absolute_time().
authorPierre d'Herbemont <pdherbemont@free.fr>
Sun, 1 Aug 2010 10:48:49 +0000 (12:48 +0200)
committerPierre d'Herbemont <pdherbemont@free.fr>
Sat, 25 Sep 2010 21:22:20 +0000 (23:22 +0200)
Switch to double, do the operations and then convert back.
This fixes the iPad video freezes.

src/misc/mtime.c

index 7341a664b5ef68fd89380b6c4f52d4132f602916..80ed1169ee3f3eb39967d1be350f1ee592cd8484 100644 (file)
@@ -214,13 +214,13 @@ mtime_t mdate( void )
 #elif defined( USE_APPLE_MACH )
     pthread_once(&mtime_timebase_info_once, mtime_init_timebase);
     uint64_t date = mach_absolute_time();
+    mach_timebase_info_data_t tb = mtime_timebase_info;
 
-    /* Convert to nanoseconds */
-    date *= mtime_timebase_info.numer;
-    date /= mtime_timebase_info.denom;
-
+    /* Get the ssystem dependent factor. Switch to double to prevent overflow */
+    double factor = (double) tb.numer / (double) tb.denom;
     /* Convert to microseconds */
-    res = date / 1000;
+    double d = (double) date * factor / 1000;
+    res = d;
 
 #elif defined( WIN32 ) || defined( UNDER_CE )
     /* We don't need the real date, just the value of a high precision timer */