Add utility functions in PortaudioBackend for re/setting MMCSS thread characteristics
authorTim Mayberry <mojofunk@gmail.com>
Mon, 31 Aug 2015 23:57:17 +0000 (09:57 +1000)
committerTim Mayberry <mojofunk@gmail.com>
Wed, 2 Sep 2015 02:07:59 +0000 (12:07 +1000)
libs/backends/portaudio/portaudio_backend.cc
libs/backends/portaudio/portaudio_backend.h

index 19a3411e31ce7f799e0f8ed27cb0bf32a5ddeaea..81eb954d0800715ec740d5b3f1ecbf9ebe0b5c3c 100644 (file)
@@ -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)
 {
index db16937651a45939c4325dcaf2cf5017cdbce053..82583c6f8658ec8333e2645f9fba8fae0a644fcc 100644 (file)
@@ -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;