From 306da9de9e6158660b11ed144cccf1ef37d89e02 Mon Sep 17 00:00:00 2001 From: Julien Wadel <julien.wadel@belledonne-communications.com> Date: Wed, 26 Mar 2025 10:58:47 +0100 Subject: [PATCH] Windows: Use a higher precision on time (10-16ms previously against < 1us ). This fix for example having 0 in stats on ending calls. --- src/utils/port.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/utils/port.c b/src/utils/port.c index 155b9bb..33b6f69 100644 --- a/src/utils/port.c +++ b/src/utils/port.c @@ -881,20 +881,20 @@ void bctbx_shm_close(void *mem) { #pragma GCC diagnostic ignored "-Wunused-parameter" #endif // _MSC_VER static void _bctbx_get_cur_time(bctoolboxTimeSpec *ret, bool_t realtime) { -#if defined(_WIN32_WCE) || defined(WIN32) -#if defined(BCTBX_WINDOWS_DESKTOP) && !defined(ENABLE_MICROSOFT_STORE_APP) && !defined(BCTBX_WINDOWS_UWP) - DWORD timemillis; +#ifdef _WIN32 #if defined(_WIN32_WCE) + DWORD timemillis; timemillis = GetTickCount(); -#else - timemillis = timeGetTime(); -#endif ret->tv_sec = timemillis / 1000; ret->tv_nsec = (timemillis % 1000) * 1000000LL; #else - ULONGLONG timemillis = GetTickCount64(); - ret->tv_sec = timemillis / 1000; - ret->tv_nsec = (timemillis % 1000) * 1000000LL; + FILETIME lifeTime; + GetSystemTimePreciseAsFileTime(&lifeTime); + // conversion to Unix Epoch + uint64_t nsec = + (((uint64_t)lifeTime.dwHighDateTime << 32ULL) + lifeTime.dwLowDateTime - 116444736000000000ULL) * 100ULL; + ret->tv_sec = nsec / 1000000000ULL; + ret->tv_nsec = nsec % 1000000000ULL; #endif #else struct timespec ts; @@ -1944,7 +1944,7 @@ void bctbx_uint32_to_str(uint8_t output_string[9], uint32_t input_uint32) { output_string[4] = bctbx_byte_to_char((uint8_t)((input_uint32 >> 12) & 0x0F)); output_string[5] = bctbx_byte_to_char((uint8_t)((input_uint32 >> 8) & 0x0F)); output_string[6] = bctbx_byte_to_char((uint8_t)((input_uint32 >> 4) & 0x0F)); - output_string[7] = bctbx_byte_to_char((uint8_t)((input_uint32) & 0x0F)); + output_string[7] = bctbx_byte_to_char((uint8_t)((input_uint32)&0x0F)); output_string[8] = '\0'; } @@ -1975,7 +1975,7 @@ void bctbx_uint64_to_str(uint8_t output_string[17], uint64_t input_uint64) { output_string[12] = bctbx_byte_to_char((uint8_t)((input_uint64 >> 12) & 0x0F)); output_string[13] = bctbx_byte_to_char((uint8_t)((input_uint64 >> 8) & 0x0F)); output_string[14] = bctbx_byte_to_char((uint8_t)((input_uint64 >> 4) & 0x0F)); - output_string[15] = bctbx_byte_to_char((uint8_t)((input_uint64) & 0x0F)); + output_string[15] = bctbx_byte_to_char((uint8_t)((input_uint64)&0x0F)); output_string[16] = '\0'; } -- GitLab