summaryrefslogtreecommitdiff
path: root/libs/backends
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2013-09-09 15:17:29 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2013-09-09 15:17:43 -0400
commitf06187735d9518623a6f1f3da573b401e77401bb (patch)
treef5d8878fe6936d65c3840a500ac141b6424dad79 /libs/backends
parenta228643e402d8f1fb07da88eba960ec368e23dda (diff)
initial work on adding access to h/w control apps when ardour starts JACK
Diffstat (limited to 'libs/backends')
-rw-r--r--libs/backends/jack/jack_audiobackend.cc59
-rw-r--r--libs/backends/jack/jack_audiobackend.h4
2 files changed, 62 insertions, 1 deletions
diff --git a/libs/backends/jack/jack_audiobackend.cc b/libs/backends/jack/jack_audiobackend.cc
index f452a78d49..f21440e046 100644
--- a/libs/backends/jack/jack_audiobackend.cc
+++ b/libs/backends/jack/jack_audiobackend.cc
@@ -17,10 +17,13 @@
*/
+#include <string>
+#include <list>
#include <math.h>
#include <boost/scoped_ptr.hpp>
#include <glibmm/timer.h>
+#include <glibmm/spawn.h>
#include "pbd/error.h"
@@ -340,7 +343,11 @@ JACKAudioBackend::set_systemic_output_latency (uint32_t l)
std::string
JACKAudioBackend::device_name () const
{
- return string();
+ if (connected()) {
+ return "???";
+ }
+
+ return _target_device;
}
float
@@ -947,3 +954,53 @@ JACKAudioBackend::can_change_buffer_size_when_running () const
{
return true;
}
+
+string
+JACKAudioBackend::control_app_name () const
+{
+ string appname;
+
+ if (_target_device.empty()) {
+ return appname;
+ }
+
+#if defined (__linux)
+ /* Linux potential control apps */
+
+ if (_target_device == "Hammerfall DSP") {
+ appname = "hdspconf";
+ }
+#else
+#if defined (__APPLE__)
+ /* OS X potential control apps */
+#else
+ /* Windows potential control apps */
+#endif
+#endif
+
+ return appname;
+}
+
+bool
+JACKAudioBackend::have_control_app () const
+{
+ return !control_app_name().empty();
+}
+
+void
+JACKAudioBackend::launch_control_app ()
+{
+ /* launch control app, don't care if it succeeds */
+
+ string appname = control_app_name ();
+
+ if (appname.empty()) {
+ return;
+ }
+
+ std::list<string> args;
+ args.push_back (appname);
+ Glib::spawn_async ("", args, Glib::SPAWN_SEARCH_PATH);
+}
+
+
diff --git a/libs/backends/jack/jack_audiobackend.h b/libs/backends/jack/jack_audiobackend.h
index f47b630f49..15246a0305 100644
--- a/libs/backends/jack/jack_audiobackend.h
+++ b/libs/backends/jack/jack_audiobackend.h
@@ -84,6 +84,9 @@ class JACKAudioBackend : public AudioBackend {
uint32_t systemic_input_latency () const;
uint32_t systemic_output_latency () const;
+ bool have_control_app() const;
+ void launch_control_app ();
+
int start ();
int stop ();
int pause ();
@@ -179,6 +182,7 @@ class JACKAudioBackend : public AudioBackend {
mutable DriverDeviceMap all_devices;
PBD::ScopedConnection disconnect_connection;
+ std::string control_app_name () const;
};
} // namespace