X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fengine_dialog.cc;h=a3c3edd1cc4815fad04270771516184b442e7fb9;hb=25a702798e7fc2f3875208ceb67e0b6a7dfb1715;hp=ef2fa67ce74750c362c7026e96eb93fd051eb6c7;hpb=da8eec7a8311295ee91308eca9fae2146385c512;p=ardour.git diff --git a/gtk2_ardour/engine_dialog.cc b/gtk2_ardour/engine_dialog.cc index ef2fa67ce7..a3c3edd1cc 100644 --- a/gtk2_ardour/engine_dialog.cc +++ b/gtk2_ardour/engine_dialog.cc @@ -65,6 +65,10 @@ EngineControl::EngineControl () priority_spinner (priority_adjustment), ports_adjustment (128, 8, 1024, 1, 16), ports_spinner (ports_adjustment), + input_latency_adjustment (0, 0, 99999, 1), + input_latency (input_latency_adjustment), + output_latency_adjustment (0, 0, 99999, 1), + output_latency (output_latency_adjustment), realtime_button (_("Realtime")), no_memory_lock_button (_("Do not lock memory")), unlock_memory_button (_("Unlock memory")), @@ -134,6 +138,7 @@ EngineControl::EngineControl () #else strings.push_back (X_("ALSA")); strings.push_back (X_("OSS")); + strings.push_back (X_("FreeBoB")); strings.push_back (X_("FFADO")); #endif strings.push_back (X_("NetJACK")); @@ -406,12 +411,10 @@ EngineControl::build_command_line (vector& cmd) { string str; string driver; - bool using_oss = false; bool using_alsa = false; bool using_coreaudio = false; - bool using_netjack = false; - bool using_ffado = false; bool using_dummy = false; + bool using_ffado = false; /* first, path to jackd */ @@ -420,11 +423,14 @@ EngineControl::build_command_line (vector& cmd) /* now jackd arguments */ str = timeout_combo.get_active_text (); + if (str != _("Ignore")) { + double secs = 0; uint32_t msecs; secs = atof (str); msecs = (uint32_t) floor (secs * 1000.0); + if (msecs > 0) { cmd.push_back ("-t"); cmd.push_back (to_string (msecs, std::dec)); @@ -463,31 +469,22 @@ EngineControl::build_command_line (vector& cmd) cmd.push_back ("-d"); driver = driver_combo.get_active_text (); + if (driver == X_("ALSA")) { using_alsa = true; cmd.push_back ("alsa"); } else if (driver == X_("OSS")) { - using_oss = true; cmd.push_back ("oss"); } else if (driver == X_("CoreAudio")) { using_coreaudio = true; cmd.push_back ("coreaudio"); } else if (driver == X_("NetJACK")) { - using_netjack = true; cmd.push_back ("netjack"); + } else if (driver == X_("FreeBoB")) { + cmd.push_back ("freebob"); } else if (driver == X_("FFADO")) { using_ffado = true; - - /* do this until FFADO becomes the standard */ - - char* hack = getenv ("ARDOUR_FIREWIRE_DRIVER_NAME"); - - if (hack) { - cmd.push_back (hack); - } else { - cmd.push_back ("freebob"); - } - + cmd.push_back ("firewire"); } else if ( driver == X_("Dummy")) { using_dummy = true; cmd.push_back ("dummy"); @@ -514,6 +511,7 @@ EngineControl::build_command_line (vector& cmd) cmd.push_back ("-C"); cmd.push_back (input_device); + cmd.push_back ("-P"); cmd.push_back (output_device); @@ -523,7 +521,7 @@ EngineControl::build_command_line (vector& cmd) cmd.push_back ("-C"); } - if (! using_dummy ) { + if (!using_dummy) { cmd.push_back ("-n"); cmd.push_back (to_string ((uint32_t) floor (periods_spinner.get_value()), std::dec)); } @@ -534,6 +532,23 @@ EngineControl::build_command_line (vector& cmd) cmd.push_back ("-p"); cmd.push_back (period_size_combo.get_active_text()); + + if (using_alsa || using_ffado || using_coreaudio) { + + double val = input_latency_adjustment.get_value(); + + if (val) { + cmd.push_back ("-I"); + cmd.push_back (to_string ((uint32_t) val, std::dec)); + } + + val = output_latency_adjustment.get_value(); + + if (val) { + cmd.push_back ("-O"); + cmd.push_back (to_string ((uint32_t) val, std::dec)); + } + } if (using_alsa) { @@ -583,7 +598,6 @@ EngineControl::build_command_line (vector& cmd) } else if (str == _("raw")) { cmd.push_back ("-X raw"); } - } else if (using_coreaudio) { #ifdef __APPLE__ @@ -599,10 +613,6 @@ EngineControl::build_command_line (vector& cmd) cmd.push_back (device); #endif - } else if (using_oss) { - - } else if (using_netjack) { - } } @@ -674,6 +684,8 @@ EngineControl::enumerate_devices (const string& driver) #ifndef __APPLE__ } else if (driver == "ALSA") { devices[driver] = enumerate_alsa_devices (); + } else if (driver == "FreeBOB") { + devices[driver] = enumerate_freebob_devices (); } else if (driver == "FFADO") { devices[driver] = enumerate_ffado_devices (); } else if (driver == "OSS") { @@ -858,6 +870,7 @@ EngineControl::enumerate_freebob_devices () vector devs; return devs; } + vector EngineControl::enumerate_oss_devices () { @@ -890,7 +903,7 @@ EngineControl::driver_changed () vector& strings = devices[driver]; - if (strings.empty() && driver != "FFADO" && driver != "Dummy") { + if (strings.empty() && driver != "FreeBoB" && driver != "FFADO" && driver != "Dummy") { error << string_compose (_("No devices found for driver \"%1\""), driver) << endmsg; return; } @@ -1208,15 +1221,21 @@ EngineControl::set_state (const XMLNode& root) XMLNode* child; XMLProperty* prop = NULL; bool using_dummy = false; + bool using_ffado = false; int val; string strval; if ( (child = root.child ("driver"))){ prop = child->property("val"); + if (prop && (prop->value() == "Dummy") ) { using_dummy = true; } + if (prop && (prop->value() == "FFADO") ) { + using_ffado = true; + } + } clist = root.children(); @@ -1229,9 +1248,15 @@ EngineControl::set_state (const XMLNode& root) if (!prop || prop->value().empty()) { - if ((using_dummy && ( child->name() == "interface" || child->name() == "inputdevice" || child->name() == "outputdevice" )) || - child->name() == "timeout") + if (((using_dummy || using_ffado) + && ( child->name() == "interface" + || child->name() == "inputdevice" + || child->name() == "outputdevice")) + || child->name() == "timeout") + { continue; + } + error << string_compose (_("AudioSetup value for %1 is missing data"), child->name()) << endmsg; continue; }