From f25c4b0e49e4b3463c226fb94e37be69e321a38b Mon Sep 17 00:00:00 2001 From: sletz Date: Thu, 26 Jan 2012 09:51:44 +0000 Subject: [PATCH] Add EndTime function (especially for Windows). git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@4736 0c269be4-1314-0410-8aa9-9f06e86f4224 --- ChangeLog | 4 ++++ common/JackLibGlobals.h | 1 + common/JackNetAdapter.cpp | 2 +- common/JackServer.cpp | 1 + common/JackTime.h | 1 + linux/JackLinuxTime.c | 3 +++ macosx/JackMachTime.c | 3 +++ solaris/JackSolarisTime.c | 3 +++ windows/JackWinTime.c | 21 +++++++++++++++++++++ 9 files changed, 38 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index feaecc88..17396ce6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -36,6 +36,10 @@ John Emmas Jackdmp changes log --------------------------- +2012-01-26 Stephane Letz + + * Add EndTime function (especially for Windows). + 2012-01-25 Stephane Letz * Fix NetJack2 initialisation bug. diff --git a/common/JackLibGlobals.h b/common/JackLibGlobals.h index 1fa688ef..798cccf1 100644 --- a/common/JackLibGlobals.h +++ b/common/JackLibGlobals.h @@ -127,6 +127,7 @@ struct JackLibGlobals { if (--fClientCount == 0 && fGlobals) { jack_log("JackLibGlobals Destroy %x", fGlobals); + EndTime(); delete fGlobals; fGlobals = NULL; } diff --git a/common/JackNetAdapter.cpp b/common/JackNetAdapter.cpp index a41ada28..e4a2d7c2 100644 --- a/common/JackNetAdapter.cpp +++ b/common/JackNetAdapter.cpp @@ -413,7 +413,7 @@ extern "C" value.i = 2; jack_driver_descriptor_add_parameter(desc, &filler, "input-ports", 'C', JackDriverParamInt, &value, NULL, "Number of audio input ports", NULL); - jack_driver_descriptor_add_parameter(desc, &filler, "output-ports", 'C', JackDriverParamInt, &value, NULL, "Number of audio output ports", NULL); + jack_driver_descriptor_add_parameter(desc, &filler, "output-ports", 'P', JackDriverParamInt, &value, NULL, "Number of audio output ports", NULL); #if HAVE_CELT value.i = -1; diff --git a/common/JackServer.cpp b/common/JackServer.cpp index a21d69c8..b67d6124 100644 --- a/common/JackServer.cpp +++ b/common/JackServer.cpp @@ -140,6 +140,7 @@ int JackServer::Close() fEngine->Close(); // TODO: move that in reworked JackServerGlobals::Destroy() JackMessageBuffer::Destroy(); + EndTime(); return 0; } diff --git a/common/JackTime.h b/common/JackTime.h index 5339ff47..7e4c96e8 100644 --- a/common/JackTime.h +++ b/common/JackTime.h @@ -30,6 +30,7 @@ extern "C" #endif SERVER_EXPORT void InitTime(); + SERVER_EXPORT void EndTime(); SERVER_EXPORT jack_time_t GetMicroSeconds(void); SERVER_EXPORT void JackSleep(long usec); diff --git a/linux/JackLinuxTime.c b/linux/JackLinuxTime.c index 327b9442..3c3a9c25 100644 --- a/linux/JackLinuxTime.c +++ b/linux/JackLinuxTime.c @@ -220,6 +220,9 @@ SERVER_EXPORT void InitTime() __jack_cpu_mhz = jack_get_mhz (); } +SERVER_EXPORT void EndTime() +{} + void SetClockSource(jack_timer_type_t source) { jack_log("Clock source : %s", ClockSourceName(source)); diff --git a/macosx/JackMachTime.c b/macosx/JackMachTime.c index 92840084..70ec8edd 100644 --- a/macosx/JackMachTime.c +++ b/macosx/JackMachTime.c @@ -39,6 +39,9 @@ SERVER_EXPORT void InitTime() __jack_time_ratio = ((float)info.numer / info.denom) / 1000; } +SERVER_EXPORT void EndTime() +{} + SERVER_EXPORT jack_time_t GetMicroSeconds(void) { return (jack_time_t) (mach_absolute_time () * __jack_time_ratio); diff --git a/solaris/JackSolarisTime.c b/solaris/JackSolarisTime.c index e168b933..a4d207b0 100644 --- a/solaris/JackSolarisTime.c +++ b/solaris/JackSolarisTime.c @@ -31,6 +31,9 @@ SERVER_EXPORT void JackSleep(long usec) SERVER_EXPORT void InitTime() {} +SERVER_EXPORT void EndTime() +{} + SERVER_EXPORT jack_time_t GetMicroSeconds(void) { return (jack_time_t)(gethrtime() / 1000); diff --git a/windows/JackWinTime.c b/windows/JackWinTime.c index 74a2d0a1..c307939b 100644 --- a/windows/JackWinTime.c +++ b/windows/JackWinTime.c @@ -19,8 +19,10 @@ #include "JackTime.h" +#include "JackError.h" static LARGE_INTEGER _jack_freq; +static UINT gPeriod = 0; SERVER_EXPORT void JackSleep(long usec) { @@ -30,6 +32,25 @@ SERVER_EXPORT void JackSleep(long usec) SERVER_EXPORT void InitTime() { QueryPerformanceFrequency(&_jack_freq); + TIMECAPS caps; + if (timeGetDevCaps(&caps, sizeof(TIMECAPS)) != TIMERR_NOERROR) { + jack_error("InitTime : could not get timer device"); + } else { + gPeriod = caps.wPeriodMin; + if (timeBeginPeriod(gPeriod) != TIMERR_NOERROR) { + jack_error("InitTime : could not set minimum timer"); + gPeriod = 0; + } else { + jack_info("InitTime : multimedia timer resolution set to %d milliseconds", gPeriod); + } + } +} + +SERVER_EXPORT void EndTime() +{ + if (gPeriod > 0) { + timeEndPeriod(gPeriod); + } } SERVER_EXPORT jack_time_t GetMicroSeconds(void)