Skip to content

Commit a03532c

Browse files
committed
add system clock
1 parent 2c2bf1a commit a03532c

File tree

3 files changed

+68
-3
lines changed

3 files changed

+68
-3
lines changed

common/JackTypes.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ typedef uint16_t jack_int_t; // Internal type for ports and refnum
4040
typedef enum {
4141
JACK_TIMER_SYSTEM_CLOCK,
4242
JACK_TIMER_HPET,
43+
#ifdef _WIN32
44+
JACK_TIMER_QPC,
45+
#endif
4346
} jack_timer_type_t;
4447

4548
typedef enum {

common/Jackdmp.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,27 @@ int main(int argc, char** argv)
371371
break;
372372
#endif
373373

374+
#ifdef _WIN32
375+
case 'c':
376+
param = jackctl_get_parameter(server_parameters, "clock-source");
377+
if (param != NULL) {
378+
if (tolower (optarg[0]) == 'h') {
379+
value.ui = JACK_TIMER_QPC;
380+
jackctl_parameter_set_value(param, &value);
381+
} else if (tolower (optarg[0]) == 'c') {
382+
value.ui = JACK_TIMER_QPC;
383+
jackctl_parameter_set_value(param, &value);
384+
} else if (tolower (optarg[0]) == 's') {
385+
value.ui = JACK_TIMER_SYSTEM_CLOCK;
386+
jackctl_parameter_set_value(param, &value);
387+
} else {
388+
usage(stdout, server_ctl);
389+
goto destroy_server;
390+
}
391+
}
392+
break;
393+
#endif
394+
374395
case 'a':
375396
param = jackctl_get_parameter(server_parameters, "self-connect-mode");
376397
if (param != NULL) {

windows/JackWinTime.c

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
#include "JackTime.h"
2121
#include "JackError.h"
2222

23+
jack_time_t (*_jack_get_microseconds)(void) = 0;
24+
2325
static LARGE_INTEGER _jack_freq;
2426
static UINT gPeriod = 0;
2527

@@ -53,17 +55,56 @@ SERVER_EXPORT void EndTime()
5355
}
5456
}
5557

56-
SERVER_EXPORT jack_time_t GetMicroSeconds(void)
58+
static jack_time_t jack_get_microseconds_from_qpc (void)
5759
{
5860
LARGE_INTEGER t1;
5961
QueryPerformanceCounter(&t1);
6062
return (jack_time_t)(((double)t1.QuadPart) / ((double)_jack_freq.QuadPart) * 1000000.0);
6163
}
6264

65+
static jack_time_t jack_get_microseconds_from_system (void)
66+
{
67+
FILETIME ft;
68+
GetSystemTimeAsFileTime(&ft);
69+
ULARGE_INTEGER li;
70+
li.LowPart = ft.dwLowDateTime;
71+
li.HighPart = ft.dwHighDateTime;
72+
unsigned long long valueAsHns = li.QuadPart;
73+
unsigned long long valueAsUs = valueAsHns/10;
74+
75+
return (jack_time_t) valueAsUs;
76+
}
77+
6378
void SetClockSource(jack_timer_type_t source)
64-
{}
79+
{
80+
jack_log("Clock source : %s", ClockSourceName(source));
81+
82+
switch (source)
83+
{
84+
case JACK_TIMER_QPC:
85+
_jack_get_microseconds = jack_get_microseconds_from_qpc;
86+
break;
87+
case JACK_TIMER_SYSTEM_CLOCK:
88+
default:
89+
_jack_get_microseconds = jack_get_microseconds_from_system;
90+
break;
91+
}
92+
}
6593

6694
const char* ClockSourceName(jack_timer_type_t source)
6795
{
68-
return "";
96+
switch (source) {
97+
case JACK_TIMER_QPC:
98+
return "QueryPerformanceCounter";
99+
case JACK_TIMER_SYSTEM_CLOCK:
100+
return "system clock via GetSystemTimeAsFileTime";
101+
}
102+
103+
/* what is wrong with gcc ? */
104+
return "unknown";
105+
}
106+
107+
SERVER_EXPORT jack_time_t GetMicroSeconds()
108+
{
109+
return _jack_get_microseconds();
69110
}

0 commit comments

Comments
 (0)