diff options
author | Tim Mayberry <mojofunk@gmail.com> | 2015-09-01 09:57:17 +1000 |
---|---|---|
committer | Tim Mayberry <mojofunk@gmail.com> | 2015-09-02 12:07:59 +1000 |
commit | b288a40220d8d9c08e92beb51bb9327bf2858133 (patch) | |
tree | 26a893a9c4745e06cd406de67f6f40053ebacb24 /libs/backends | |
parent | 77ce989dfa38a302da8722e6021e7ee768a5afb3 (diff) |
Add utility functions in PortaudioBackend for re/setting MMCSS thread characteristics
Diffstat (limited to 'libs/backends')
-rw-r--r-- | libs/backends/portaudio/portaudio_backend.cc | 35 | ||||
-rw-r--r-- | libs/backends/portaudio/portaudio_backend.h | 3 |
2 files changed, 38 insertions, 0 deletions
diff --git a/libs/backends/portaudio/portaudio_backend.cc b/libs/backends/portaudio/portaudio_backend.cc index 19a3411e31..81eb954d08 100644 --- a/libs/backends/portaudio/portaudio_backend.cc +++ b/libs/backends/portaudio/portaudio_backend.cc @@ -699,6 +699,41 @@ PortAudioBackend::name_to_id(std::string device_name) const { return device_id; } +bool +PortAudioBackend::set_mmcss_pro_audio (HANDLE* task_handle) +{ + bool mmcss_success = mmcss::set_thread_characteristics ("Pro Audio", task_handle); + + if (!mmcss_success) { + PBD::warning << get_error_string(SettingAudioThreadPriorityError) << endmsg; + return false; + } else { + DEBUG_THREADS("Thread characteristics set to Pro Audio\n"); + } + + bool mmcss_priority = + mmcss::set_thread_priority(*task_handle, mmcss::AVRT_PRIORITY_NORMAL); + + if (!mmcss_priority) { + PBD::warning << get_error_string(SettingAudioThreadPriorityError) << endmsg; + return false; + } else { + DEBUG_THREADS("Thread priority set to AVRT_PRIORITY_NORMAL\n"); + } + + return true; +} + +bool +PortAudioBackend::reset_mmcss (HANDLE task_handle) +{ + if (!mmcss::revert_thread_characteristics(task_handle)) { + DEBUG_THREADS("Unable to reset process thread characteristics\n"); + return false; + } + return true; +} + void * PortAudioBackend::portaudio_process_thread (void *arg) { diff --git a/libs/backends/portaudio/portaudio_backend.h b/libs/backends/portaudio/portaudio_backend.h index db16937651..82583c6f86 100644 --- a/libs/backends/portaudio/portaudio_backend.h +++ b/libs/backends/portaudio/portaudio_backend.h @@ -334,6 +334,9 @@ class PortAudioBackend : public AudioBackend { bool engine_halted (); bool running (); + static bool set_mmcss_pro_audio (HANDLE* task_handle); + static bool reset_mmcss (HANDLE task_handle); + private: std::string _instance_name; PortAudioIO *_pcmio; |