summaryrefslogtreecommitdiff
path: root/libs/backends
diff options
context:
space:
mode:
authorTim Mayberry <mojofunk@gmail.com>2015-09-01 09:57:17 +1000
committerTim Mayberry <mojofunk@gmail.com>2015-09-02 12:07:59 +1000
commitb288a40220d8d9c08e92beb51bb9327bf2858133 (patch)
tree26a893a9c4745e06cd406de67f6f40053ebacb24 /libs/backends
parent77ce989dfa38a302da8722e6021e7ee768a5afb3 (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.cc35
-rw-r--r--libs/backends/portaudio/portaudio_backend.h3
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;