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;