diff options
author | Robin Gareus <robin@gareus.org> | 2014-11-06 17:24:32 +0100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2014-11-06 17:29:35 +0100 |
commit | 6cda13fad46269a8bd1ff7ca900796f9f16adb7c (patch) | |
tree | 84751f49b7260494a9b9a51b88fc6486a393d772 /libs/backends/dummy | |
parent | c9c4a5c29d68a955cd20bfa514d991c50c4a3b5d (diff) |
possible fix for DSP load calculation on windows
Diffstat (limited to 'libs/backends/dummy')
-rw-r--r-- | libs/backends/dummy/dummy_audiobackend.cc | 15 |
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 { |