diff options
Diffstat (limited to 'opl/opl_timer.c')
-rw-r--r-- | opl/opl_timer.c | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/opl/opl_timer.c b/opl/opl_timer.c index bab15687..312fe7fa 100644 --- a/opl/opl_timer.c +++ b/opl/opl_timer.c @@ -31,16 +31,16 @@ typedef enum static SDL_Thread *timer_thread = NULL; static thread_state_t timer_thread_state; -static int current_time; +static uint64_t current_time; // If non-zero, callbacks are currently paused. static int opl_timer_paused; -// Offset in milliseconds to adjust time due to the fact that playback +// Offset in microseconds to adjust time due to the fact that playback // was paused. -static unsigned int pause_offset = 0; +static uint64_t pause_offset = 0; // Queue of callbacks waiting to be invoked. // The callback queue mutex is held while the callback queue structure @@ -58,7 +58,7 @@ static SDL_mutex *timer_mutex; // to be invoked. Otherwise, next_time is set to the time when the // timer thread must wake up again to check. -static int CallbackWaiting(unsigned int *next_time) +static int CallbackWaiting(uint64_t *next_time) { // If paused, just wait in 50ms increments until unpaused. // Update pause_offset so after we unpause, the callback @@ -66,8 +66,8 @@ static int CallbackWaiting(unsigned int *next_time) if (opl_timer_paused) { - *next_time = current_time + 50; - pause_offset += 50; + *next_time = current_time + 50 * OPL_MS; + pause_offset += 50 * OPL_MS; return 0; } @@ -76,7 +76,7 @@ static int CallbackWaiting(unsigned int *next_time) if (OPL_Queue_IsEmpty(callback_queue)) { - *next_time = current_time + 50; + *next_time = current_time + 50 * OPL_MS; return 0; } @@ -89,11 +89,11 @@ static int CallbackWaiting(unsigned int *next_time) return *next_time <= current_time; } -static unsigned int GetNextTime(void) +static uint64_t GetNextTime(void) { opl_callback_t callback; void *callback_data; - unsigned int next_time; + uint64_t next_time; int have_callback; // Keep running through callbacks until there are none ready to @@ -131,8 +131,8 @@ static unsigned int GetNextTime(void) static int ThreadFunction(void *unused) { - unsigned int next_time; - unsigned int now; + uint64_t next_time; + uint64_t now; // Keep running until OPL_Timer_StopThread is called. @@ -142,11 +142,11 @@ static int ThreadFunction(void *unused) // wait until that time. next_time = GetNextTime(); - now = SDL_GetTicks(); + now = SDL_GetTicks() * OPL_MS; if (next_time > now) { - SDL_Delay(next_time - now); + SDL_Delay((next_time - now) / OPL_MS); } // Update the current time. @@ -209,11 +209,11 @@ void OPL_Timer_StopThread(void) FreeResources(); } -void OPL_Timer_SetCallback(unsigned int ms, opl_callback_t callback, void *data) +void OPL_Timer_SetCallback(uint64_t us, opl_callback_t callback, void *data) { SDL_LockMutex(callback_queue_mutex); OPL_Queue_Push(callback_queue, callback, data, - current_time + ms - pause_offset); + current_time + us - pause_offset); SDL_UnlockMutex(callback_queue_mutex); } |