summaryrefslogtreecommitdiff
path: root/libs/backends
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2013-11-26 10:24:51 -0500
committerPaul Davis <paul@linuxaudiosystems.com>2013-11-26 10:24:51 -0500
commit08371ae2cf6231bbb8522645d14add41ffa9c1c0 (patch)
tree5a3e1efc54a669336f6047ff23d7323eac26f287 /libs/backends
parentd135c4dc3a307d0be606f3afbbc8fd8c3ec56438 (diff)
parent8c2cc85e8fd1ac55761c2f53aebbe98b8f22a40a (diff)
resolve merge with master (?)
Diffstat (limited to 'libs/backends')
-rw-r--r--libs/backends/jack/jack_audiobackend.cc1
-rw-r--r--libs/backends/jack/jack_audiobackend.h2
-rw-r--r--libs/backends/jack/jack_portengine.cc4
-rw-r--r--libs/backends/jack/jack_utils.cc108
4 files changed, 66 insertions, 49 deletions
diff --git a/libs/backends/jack/jack_audiobackend.cc b/libs/backends/jack/jack_audiobackend.cc
index 7a9b993251..86e5b9d54c 100644
--- a/libs/backends/jack/jack_audiobackend.cc
+++ b/libs/backends/jack/jack_audiobackend.cc
@@ -509,6 +509,7 @@ JACKAudioBackend::setup_jack_startup_command (bool for_latency_measurement)
/* error, somehow - we will still try to start JACK
* automatically but it will be without our preferred options
*/
+ std::cerr << "get_jack_command_line_string () failed: using default settings." << std::endl;
return;
}
diff --git a/libs/backends/jack/jack_audiobackend.h b/libs/backends/jack/jack_audiobackend.h
index c59ddb5c67..2c77e6112b 100644
--- a/libs/backends/jack/jack_audiobackend.h
+++ b/libs/backends/jack/jack_audiobackend.h
@@ -126,7 +126,7 @@ class JACKAudioBackend : public AudioBackend {
int set_port_name (PortHandle, const std::string&);
std::string get_port_name (PortHandle) const;
- PortHandle* get_port_by_name (const std::string&) const;
+ PortHandle get_port_by_name (const std::string&) const;
int get_ports (const std::string& port_name_pattern, DataType type, PortFlags flags, std::vector<std::string>&) const;
diff --git a/libs/backends/jack/jack_portengine.cc b/libs/backends/jack/jack_portengine.cc
index 0d66f50448..1fe77fbb70 100644
--- a/libs/backends/jack/jack_portengine.cc
+++ b/libs/backends/jack/jack_portengine.cc
@@ -116,11 +116,11 @@ JACKAudioBackend::get_port_name (PortHandle port) const
return jack_port_name ((jack_port_t*) port);
}
-PortEngine::PortHandle*
+PortEngine::PortHandle
JACKAudioBackend:: get_port_by_name (const std::string& name) const
{
GET_PRIVATE_JACK_POINTER_RET (_priv_jack, 0);
- return (PortHandle*) jack_port_by_name (_priv_jack, name.c_str());
+ return (PortHandle) jack_port_by_name (_priv_jack, name.c_str());
}
void
diff --git a/libs/backends/jack/jack_utils.cc b/libs/backends/jack/jack_utils.cc
index 57ae8cee96..331c164353 100644
--- a/libs/backends/jack/jack_utils.cc
+++ b/libs/backends/jack/jack_utils.cc
@@ -756,6 +756,9 @@ ARDOUR::get_jack_command_line_string (JackCommandLineOptions& options, string& c
string command_line_driver_name;
+ string command_line_input_device_name;
+ string command_line_output_device_name;
+
if (!get_jack_command_line_audio_driver_name (options.driver, command_line_driver_name)) {
return false;
}
@@ -763,60 +766,71 @@ ARDOUR::get_jack_command_line_string (JackCommandLineOptions& options, string& c
args.push_back ("-d");
args.push_back (command_line_driver_name);
- if (options.output_device.empty() && options.input_device.empty()) {
- return false;
- }
-
- string command_line_input_device_name;
- string command_line_output_device_name;
-
- if (!get_jack_command_line_audio_device_name (options.driver,
- options.input_device, command_line_input_device_name)) {
- return false;
- }
+ if (options.driver != dummy_driver_name) {
+ if (options.output_device.empty() && options.input_device.empty()) {
+ return false;
+ }
- if (!get_jack_command_line_audio_device_name (options.driver,
- options.output_device, command_line_output_device_name)) {
- return false;
- }
- if (options.input_device.empty()) {
- // playback only
- if (options.output_device.empty()) {
+ if (!get_jack_command_line_audio_device_name (options.driver,
+ options.input_device, command_line_input_device_name)) {
return false;
}
- args.push_back ("-P");
- } else if (options.output_device.empty()) {
- // capture only
- if (options.input_device.empty()) {
+
+ if (!get_jack_command_line_audio_device_name (options.driver,
+ options.output_device, command_line_output_device_name)) {
return false;
}
- args.push_back ("-C");
- } else if (options.input_device != options.output_device) {
- // capture and playback on two devices if supported
- if (get_jack_audio_driver_supports_two_devices (options.driver)) {
- args.push_back ("-C");
- args.push_back (command_line_input_device_name);
+
+ if (options.input_device.empty()) {
+ // playback only
+ if (options.output_device.empty()) {
+ return false;
+ }
args.push_back ("-P");
- args.push_back (command_line_output_device_name);
- } else {
- return false;
+ } else if (options.output_device.empty()) {
+ // capture only
+ if (options.input_device.empty()) {
+ return false;
+ }
+ args.push_back ("-C");
+ } else if (options.input_device != options.output_device) {
+ // capture and playback on two devices if supported
+ if (get_jack_audio_driver_supports_two_devices (options.driver)) {
+ args.push_back ("-C");
+ args.push_back (command_line_input_device_name);
+ args.push_back ("-P");
+ args.push_back (command_line_output_device_name);
+ } else {
+ return false;
+ }
}
- }
- if (options.input_channels) {
- args.push_back ("-i");
- args.push_back (to_string (options.input_channels, std::dec));
- }
+ if (options.input_channels) {
+ args.push_back ("-i");
+ args.push_back (to_string (options.input_channels, std::dec));
+ }
- if (options.output_channels) {
- args.push_back ("-o");
- args.push_back (to_string (options.output_channels, std::dec));
- }
+ if (options.output_channels) {
+ args.push_back ("-o");
+ args.push_back (to_string (options.output_channels, std::dec));
+ }
+
+ if (get_jack_audio_driver_supports_setting_period_count (options.driver)) {
+ args.push_back ("-n");
+ args.push_back (to_string (options.num_periods, std::dec));
+ }
+ } else {
+ // jackd dummy backend
+ if (options.input_channels) {
+ args.push_back ("-C");
+ args.push_back (to_string (options.input_channels, std::dec));
+ }
- if (get_jack_audio_driver_supports_setting_period_count (options.driver)) {
- args.push_back ("-n");
- args.push_back (to_string (options.num_periods, std::dec));
+ if (options.output_channels) {
+ args.push_back ("-P");
+ args.push_back (to_string (options.output_channels, std::dec));
+ }
}
args.push_back ("-r");
@@ -836,9 +850,11 @@ ARDOUR::get_jack_command_line_string (JackCommandLineOptions& options, string& c
}
}
- if (options.input_device == options.output_device && options.input_device != default_device_name) {
- args.push_back ("-d");
- args.push_back (command_line_input_device_name);
+ if (options.driver != dummy_driver_name) {
+ if (options.input_device == options.output_device && options.input_device != default_device_name) {
+ args.push_back ("-d");
+ args.push_back (command_line_input_device_name);
+ }
}
if (options.driver == alsa_driver_name) {