From ac81ea642e2448abed8dbb697fa7ee662079832f Mon Sep 17 00:00:00 2001 From: Colin Fletcher Date: Wed, 23 Oct 2013 16:03:18 +0100 Subject: Don't fail jackd command line creation for jack dummy backend. The dummy jackd backend doesn't require a device to be specified, so much of the error checking in get_jack_command_line_string() is irrelevant, if not actively wrong, when the dummy backend is specified. Only perform the checks if the chosen jack backend is not the dummy. --- libs/backends/jack/jack_utils.cc | 65 +++++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 31 deletions(-) (limited to 'libs/backends') diff --git a/libs/backends/jack/jack_utils.cc b/libs/backends/jack/jack_utils.cc index 92f175d9cb..0aa0eca9b1 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,44 +766,44 @@ 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 (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.input_device, command_line_input_device_name)) { - 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; + } } } -- cgit v1.2.3 From 903d728b9ce1eae8d68e885fc0158a6d67627360 Mon Sep 17 00:00:00 2001 From: Colin Fletcher Date: Tue, 22 Oct 2013 18:48:26 +0100 Subject: Fix setting playback & capture channel counts for jackd dummy backend. Unlike all the other jack backends which allow setting the number of inputs and outputs with -i & -o, the dummy backend uses -P & -C for this. Make the jackd command line use these options when the dummy backend is requested with a specified input or output channel count. --- libs/backends/jack/jack_utils.cc | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) (limited to 'libs/backends') diff --git a/libs/backends/jack/jack_utils.cc b/libs/backends/jack/jack_utils.cc index 0aa0eca9b1..ba63977e77 100644 --- a/libs/backends/jack/jack_utils.cc +++ b/libs/backends/jack/jack_utils.cc @@ -805,21 +805,32 @@ ARDOUR::get_jack_command_line_string (JackCommandLineOptions& options, string& c 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"); -- cgit v1.2.3 From 70f0cfdb3b7de14c2e3c36b97bd1b4f013c07f2e Mon Sep 17 00:00:00 2001 From: Colin Fletcher Date: Wed, 23 Oct 2013 17:46:51 +0100 Subject: Don't ever pass -d for device name to dummy jackd driver --- libs/backends/jack/jack_utils.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'libs/backends') diff --git a/libs/backends/jack/jack_utils.cc b/libs/backends/jack/jack_utils.cc index ba63977e77..e009b05cd7 100644 --- a/libs/backends/jack/jack_utils.cc +++ b/libs/backends/jack/jack_utils.cc @@ -850,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) { -- cgit v1.2.3 From a18db90264a91a5fe80b5993511c960329964742 Mon Sep 17 00:00:00 2001 From: Colin Fletcher Date: Wed, 23 Oct 2013 16:10:36 +0100 Subject: Report an error to stderr if creation of jack command line fails. Output a simple message to stderr if get_jack_command_line_string() still fails for any reason. --- libs/backends/jack/jack_audiobackend.cc | 1 + 1 file changed, 1 insertion(+) (limited to 'libs/backends') 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; } -- cgit v1.2.3 From 7fec9910775f6ecb2ec15c145846086edf5a1df5 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 28 Oct 2013 09:46:59 -0400 Subject: fix thinko in declaration of ARDOUR::PortEngine::get_port_by_name() --- libs/ardour/ardour/port_engine.h | 5 +++-- libs/ardour/audioengine.cc | 4 ++-- libs/backends/jack/jack_audiobackend.h | 2 +- libs/backends/jack/jack_portengine.cc | 4 ++-- 4 files changed, 8 insertions(+), 7 deletions(-) (limited to 'libs/backends') diff --git a/libs/ardour/ardour/port_engine.h b/libs/ardour/ardour/port_engine.h index 8c0ec9e754..68f8fe1232 100644 --- a/libs/ardour/ardour/port_engine.h +++ b/libs/ardour/ardour/port_engine.h @@ -117,10 +117,11 @@ class PortEngine { * does not exist, return an empty string. */ virtual std::string get_port_name (PortHandle) const = 0; + /** Return a reference to a port with the fullname @param name. Return - * a null pointer if no such port exists. + * an "empty" PortHandle (analogous to a null pointer) if no such port exists. */ - virtual PortHandle* get_port_by_name (const std::string&) const = 0; + virtual PortHandle get_port_by_name (const std::string&) const = 0; /** Find the set of ports whose names, types and flags match * specified values, place the names of each port into @param ports, diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc index 45b8bbf757..7f4d3c2a1d 100644 --- a/libs/ardour/audioengine.cc +++ b/libs/ardour/audioengine.cc @@ -1065,8 +1065,8 @@ AudioEngine::start_latency_detection () /* find the ports we will connect to */ - PortEngine::PortHandle* out = pe.get_port_by_name (_latency_output_name); - PortEngine::PortHandle* in = pe.get_port_by_name (_latency_input_name); + PortEngine::PortHandle out = pe.get_port_by_name (_latency_output_name); + PortEngine::PortHandle in = pe.get_port_by_name (_latency_input_name); if (!out || !in) { stop (true); 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&) 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 -- cgit v1.2.3