diff --git a/libs/ardour/ardour/rc_configuration_vars.h b/libs/ardour/ardour/rc_configuration_vars.h index d8d4f3e9b8..646ef54479 100644 --- a/libs/ardour/ardour/rc_configuration_vars.h +++ b/libs/ardour/ardour/rc_configuration_vars.h @@ -47,6 +47,12 @@ CONFIG_VARIABLE (AutoConnectOption, output_auto_connect, "output-auto-connect", CONFIG_VARIABLE (AutoConnectOption, input_auto_connect, "input-auto-connect", AutoConnectPhysical) CONFIG_VARIABLE (bool, strict_io, "strict-io", true) +/* Connect all physical inputs to a dummy port, this makes raw input data available. + * `jack_port_get_buffer (jack_port_by_name (c, "system:capture_1") , n_samples);` + * nees to work for input-monitoring (recorder page). + */ +CONFIG_VARIABLE (bool, work_around_jack_no_copy_optimization, "work-around-jack-no-copy-optimization", true) + /* Naming */ CONFIG_VARIABLE (TracksAutoNamingRule, tracks_auto_naming, "tracks-auto-naming", UseDefaultNames) diff --git a/libs/ardour/port_manager.cc b/libs/ardour/port_manager.cc index aad3486480..523bd00b12 100644 --- a/libs/ardour/port_manager.cc +++ b/libs/ardour/port_manager.cc @@ -737,6 +737,16 @@ PortManager::reestablish_ports () set_pretty_names (port_names, DataType::MIDI, false); } + + if (Config->get_work_around_jack_no_copy_optimization () && AudioEngine::instance()->current_backend_name() == X_("JACK")) { + PortEngine::PortHandle ph = port_engine().register_port (X_("physical_input_monitor_enable"), DataType::AUDIO, ARDOUR::PortFlags (IsInput|IsTerminal|Hidden)); + std::vector audio_ports; + get_physical_inputs (DataType::AUDIO, audio_ports); + for (std::vector::iterator p = audio_ports.begin(); p != audio_ports.end(); ++p) { + port_engine().connect (ph, *p); + } + } + update_input_ports (true); return 0; }