Torge Matthies : winepulse.drv: Make timer delay more accurate.

Alexandre Julliard julliard at winehq.org
Mon Mar 15 16:59:14 CDT 2021


Module: wine
Branch: master
Commit: 6dd96842fed8ef3b1627a41f58eaec4f897a3ae0
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=6dd96842fed8ef3b1627a41f58eaec4f897a3ae0

Author: Torge Matthies <openglfreak at googlemail.com>
Date:   Sat Mar  6 02:27:14 2021 +0100

winepulse.drv: Make timer delay more accurate.

Signed-off-by: Torge Matthies <openglfreak at googlemail.com>
Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/winepulse.drv/mmdevdrv.c | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/dlls/winepulse.drv/mmdevdrv.c b/dlls/winepulse.drv/mmdevdrv.c
index 4609b2851ed..10b01868a9d 100644
--- a/dlls/winepulse.drv/mmdevdrv.c
+++ b/dlls/winepulse.drv/mmdevdrv.c
@@ -38,6 +38,7 @@
 #include "winbase.h"
 #include "winnls.h"
 #include "winreg.h"
+#include "winternl.h"
 #include "wine/debug.h"
 #include "wine/unicode.h"
 #include "wine/list.h"
@@ -1021,14 +1022,14 @@ static void pulse_read(ACImpl *This)
 
 static DWORD WINAPI pulse_timer_cb(void *user)
 {
-    DWORD delay;
+    LARGE_INTEGER delay;
     UINT32 adv_bytes;
     ACImpl *This = user;
     int success;
     pa_operation *o;
 
     pthread_mutex_lock(&pulse_lock);
-    delay = This->mmdev_period_usec / 1000;
+    delay.QuadPart = -This->mmdev_period_usec * 10;
     pa_stream_get_time(This->stream, &This->last_time);
     pthread_mutex_unlock(&pulse_lock);
 
@@ -1036,11 +1037,11 @@ static DWORD WINAPI pulse_timer_cb(void *user)
         pa_usec_t now, adv_usec = 0;
         int err;
 
-        Sleep(delay);
+        NtDelayExecution(FALSE, &delay);
 
         pthread_mutex_lock(&pulse_lock);
 
-        delay = This->mmdev_period_usec / 1000;
+        delay.QuadPart = -This->mmdev_period_usec * 10;
 
         o = pa_stream_update_timing_info(This->stream, pulse_op_cb, &success);
         if (o)
@@ -1076,7 +1077,7 @@ static DWORD WINAPI pulse_timer_cb(void *user)
                     else if(adjust < -((INT32)(This->mmdev_period_usec / 2)))
                         adjust = -1 * This->mmdev_period_usec / 2;
 
-                    delay = (This->mmdev_period_usec + adjust) / 1000;
+                    delay.QuadPart = -(This->mmdev_period_usec + adjust) * 10;
 
                     This->last_time += This->mmdev_period_usec;
                 }
@@ -1094,16 +1095,16 @@ static DWORD WINAPI pulse_timer_cb(void *user)
                 }
             }else{
                 This->last_time = now;
-                delay = This->mmdev_period_usec / 1000;
+                delay.QuadPart = -This->mmdev_period_usec * 10;
             }
         }
 
         if (This->event)
             SetEvent(This->event);
 
-        TRACE("%p after update, adv usec: %d, held: %u, delay: %u\n",
+        TRACE("%p after update, adv usec: %d, held: %u, delay usec: %u\n",
                 This, (int)adv_usec,
-                (int)(This->held_bytes/ pa_frame_size(&This->ss)), delay);
+                (int)(This->held_bytes/ pa_frame_size(&This->ss)), (unsigned int)(-delay.QuadPart / 10));
 
         pthread_mutex_unlock(&pulse_lock);
     }




More information about the wine-cvs mailing list