resolve merge with master (?)
[ardour.git] / libs / backends / jack / jack_utils.cc
index 57ae8cee96b44410b7ec0bcb915cc68645cc419b..331c164353604000fa672c4776c50209e03d7522 100644 (file)
@@ -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) {