summaryrefslogtreecommitdiff
path: root/libs/backends/dummy/dummy_audiobackend.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2014-11-06 17:24:32 +0100
committerRobin Gareus <robin@gareus.org>2014-11-06 17:29:35 +0100
commit6cda13fad46269a8bd1ff7ca900796f9f16adb7c (patch)
tree84751f49b7260494a9b9a51b88fc6486a393d772 /libs/backends/dummy/dummy_audiobackend.cc
parentc9c4a5c29d68a955cd20bfa514d991c50c4a3b5d (diff)
possible fix for DSP load calculation on windows
Diffstat (limited to 'libs/backends/dummy/dummy_audiobackend.cc')
-rw-r--r--libs/backends/dummy/dummy_audiobackend.cc15
1 files changed, 14 insertions, 1 deletions
diff --git a/libs/backends/dummy/dummy_audiobackend.cc b/libs/backends/dummy/dummy_audiobackend.cc
index 9b99bf811e..a128e56437 100644
--- a/libs/backends/dummy/dummy_audiobackend.cc
+++ b/libs/backends/dummy/dummy_audiobackend.cc
@@ -49,6 +49,7 @@ static int64_t _x_get_monotonic_usec() {
if (QueryPerformanceCounter (&Count)) {
return (int64_t) (Count.QuadPart * _win_pc_rate);
}
+ return -1;
}
#endif
return g_get_monotonic_time();
@@ -1167,9 +1168,21 @@ DummyAudioBackend::main_process_thread ()
if (!_freewheeling) {
clock2 = _x_get_monotonic_usec();
+#ifdef PLATFORM_WINDOWS
+ // querying the performance counter can fail occasionally
+ if (clock1 < 0 || clock2 < 0) {
+ clock2 = clock1 = 0;
+ }
+#endif
const int64_t elapsed_time = clock2 - clock1;
const int64_t nomial_time = 1e6 * _samples_per_period / _samplerate;
- _dsp_load = _dsp_load + .05 * ((elapsed_time / (float) nomial_time) - _dsp_load) + 1e-12;
+#ifdef PLATFORM_WINDOWS
+ if (clock1 >= 0 && clock2 >= 0)
+#endif
+ { // low pass filter
+ _dsp_load = _dsp_load + .05 * ((elapsed_time / (float) nomial_time) - _dsp_load) + 1e-12;
+ }
+
if (elapsed_time < nomial_time) {
Glib::usleep (nomial_time - elapsed_time);
} else {