change session construction so that the the monitor bus config is derived (once) from the master bus config
git-svn-id: svn://localhost/ardour2/branches/3.0@6779 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
692987ee2e
commit
814f2fbd8f
@ -2273,7 +2273,6 @@ int
|
||||
ARDOUR_UI::build_session_from_nsd (const Glib::ustring& session_path, const Glib::ustring& session_name)
|
||||
{
|
||||
|
||||
uint32_t cchns;
|
||||
uint32_t mchns;
|
||||
AutoConnectOption iconnect;
|
||||
AutoConnectOption oconnect;
|
||||
@ -2282,7 +2281,6 @@ ARDOUR_UI::build_session_from_nsd (const Glib::ustring& session_path, const Glib
|
||||
|
||||
if (Profile->get_sae()) {
|
||||
|
||||
cchns = 0;
|
||||
mchns = 2;
|
||||
iconnect = AutoConnectPhysical;
|
||||
oconnect = AutoConnectMaster;
|
||||
@ -2293,12 +2291,6 @@ ARDOUR_UI::build_session_from_nsd (const Glib::ustring& session_path, const Glib
|
||||
|
||||
/* get settings from advanced section of NSD */
|
||||
|
||||
if (_startup->create_control_bus()) {
|
||||
cchns = (uint32_t) _startup->control_channel_count();
|
||||
} else {
|
||||
cchns = 0;
|
||||
}
|
||||
|
||||
if (_startup->create_master_bus()) {
|
||||
mchns = (uint32_t) _startup->master_channel_count();
|
||||
} else {
|
||||
@ -2329,7 +2321,7 @@ ARDOUR_UI::build_session_from_nsd (const Glib::ustring& session_path, const Glib
|
||||
|
||||
if (build_session (session_path,
|
||||
session_name,
|
||||
cchns,
|
||||
_startup->create_control_bus(),
|
||||
mchns,
|
||||
iconnect,
|
||||
oconnect,
|
||||
@ -2642,7 +2634,7 @@ ARDOUR_UI::load_session (const Glib::ustring& path, const Glib::ustring& snap_na
|
||||
|
||||
int
|
||||
ARDOUR_UI::build_session (const Glib::ustring& path, const Glib::ustring& snap_name,
|
||||
uint32_t control_channels,
|
||||
bool with_monitor,
|
||||
uint32_t master_channels,
|
||||
AutoConnectOption input_connect,
|
||||
AutoConnectOption output_connect,
|
||||
@ -2671,7 +2663,7 @@ ARDOUR_UI::build_session (const Glib::ustring& path, const Glib::ustring& snap_n
|
||||
|
||||
try {
|
||||
new_session = new Session (*engine, path, snap_name, input_connect, output_connect,
|
||||
control_channels, master_channels, nphysin, nphysout, initial_length);
|
||||
with_monitor, master_channels, nphysin, nphysout, initial_length);
|
||||
}
|
||||
|
||||
catch (...) {
|
||||
|
@ -125,7 +125,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
|
||||
int load_session (const Glib::ustring& path, const Glib::ustring& snapshot, Glib::ustring mix_template = Glib::ustring());
|
||||
bool session_loaded;
|
||||
int build_session (const Glib::ustring& path, const Glib::ustring& snapshot,
|
||||
uint32_t ctl_chns,
|
||||
bool with_monitor,
|
||||
uint32_t master_chns,
|
||||
ARDOUR::AutoConnectOption input_connect,
|
||||
ARDOUR::AutoConnectOption output_connect,
|
||||
|
@ -812,11 +812,9 @@ ArdourStartup::setup_more_options_page ()
|
||||
|
||||
_output_limit_count.set_adjustment (_output_limit_count_adj);
|
||||
_input_limit_count.set_adjustment (_input_limit_count_adj);
|
||||
_control_bus_channel_count.set_adjustment (_control_bus_channel_count_adj);
|
||||
_master_bus_channel_count.set_adjustment (_master_bus_channel_count_adj);
|
||||
|
||||
chan_count_label_1.set_text (_("channels"));
|
||||
chan_count_label_2.set_text (_("channels"));
|
||||
chan_count_label_3.set_text (_("channels"));
|
||||
chan_count_label_4.set_text (_("channels"));
|
||||
|
||||
@ -824,10 +822,6 @@ ArdourStartup::setup_more_options_page ()
|
||||
chan_count_label_1.set_padding(0,0);
|
||||
chan_count_label_1.set_line_wrap(false);
|
||||
|
||||
chan_count_label_2.set_alignment(0,0.5);
|
||||
chan_count_label_2.set_padding(0,0);
|
||||
chan_count_label_2.set_line_wrap(false);
|
||||
|
||||
chan_count_label_3.set_alignment(0,0.5);
|
||||
chan_count_label_3.set_padding(0,0);
|
||||
chan_count_label_3.set_line_wrap(false);
|
||||
@ -847,13 +841,6 @@ ArdourStartup::setup_more_options_page ()
|
||||
_create_control_bus.set_active(false);
|
||||
_create_control_bus.set_border_width(0);
|
||||
|
||||
_control_bus_channel_count.set_flags(Gtk::CAN_FOCUS);
|
||||
_control_bus_channel_count.set_update_policy(Gtk::UPDATE_ALWAYS);
|
||||
_control_bus_channel_count.set_numeric(true);
|
||||
_control_bus_channel_count.set_digits(0);
|
||||
_control_bus_channel_count.set_wrap(false);
|
||||
_control_bus_channel_count.set_sensitive(false);
|
||||
|
||||
_master_bus_channel_count.set_flags(Gtk::CAN_FOCUS);
|
||||
_master_bus_channel_count.set_update_policy(Gtk::UPDATE_ALWAYS);
|
||||
_master_bus_channel_count.set_numeric(true);
|
||||
@ -909,8 +896,6 @@ ArdourStartup::setup_more_options_page ()
|
||||
bus_table.attach (_master_bus_channel_count, 1, 2, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
|
||||
bus_table.attach (chan_count_label_1, 2, 3, 0, 1, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 6, 0);
|
||||
bus_table.attach (_create_control_bus, 0, 1, 1, 2, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
|
||||
bus_table.attach (_control_bus_channel_count, 1, 2, 1, 2, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 0);
|
||||
bus_table.attach (chan_count_label_2, 2, 3, 1, 2, Gtk::EXPAND|Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 6, 0);
|
||||
|
||||
input_port_limit_hbox.pack_start(_limit_input_ports, Gtk::PACK_SHRINK, 6);
|
||||
input_port_limit_hbox.pack_start(_input_limit_count, Gtk::PACK_SHRINK, 0);
|
||||
@ -1037,12 +1022,6 @@ ArdourStartup::create_control_bus() const
|
||||
return _create_control_bus.get_active();
|
||||
}
|
||||
|
||||
int
|
||||
ArdourStartup::control_channel_count() const
|
||||
{
|
||||
return _control_bus_channel_count.get_value_as_int();
|
||||
}
|
||||
|
||||
bool
|
||||
ArdourStartup::connect_inputs() const
|
||||
{
|
||||
@ -1130,13 +1109,16 @@ ArdourStartup::limit_outputs_clicked ()
|
||||
void
|
||||
ArdourStartup::master_bus_button_clicked ()
|
||||
{
|
||||
_master_bus_channel_count.set_sensitive(_create_master_bus.get_active());
|
||||
bool yn = _create_master_bus.get_active();
|
||||
|
||||
_master_bus_channel_count.set_sensitive(yn);
|
||||
_create_control_bus.set_sensitive (yn);
|
||||
}
|
||||
|
||||
void
|
||||
ArdourStartup::monitor_bus_button_clicked ()
|
||||
{
|
||||
_control_bus_channel_count.set_sensitive(_create_control_bus.get_active());
|
||||
/* relax */
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -45,7 +45,6 @@ class ArdourStartup : public Gtk::Assistant {
|
||||
int master_channel_count() const;
|
||||
|
||||
bool create_control_bus() const;
|
||||
int control_channel_count() const;
|
||||
|
||||
bool connect_inputs() const;
|
||||
bool limit_inputs_used_for_connection() const;
|
||||
@ -180,7 +179,6 @@ class ArdourStartup : public Gtk::Assistant {
|
||||
Gtk::VBox more_options_vbox;
|
||||
|
||||
Gtk::Label chan_count_label_1;
|
||||
Gtk::Label chan_count_label_2;
|
||||
Gtk::Label chan_count_label_3;
|
||||
Gtk::Label chan_count_label_4;
|
||||
Gtk::Table advanced_table;
|
||||
@ -211,7 +209,6 @@ class ArdourStartup : public Gtk::Assistant {
|
||||
Gtk::SpinButton _master_bus_channel_count;
|
||||
|
||||
Gtk::CheckButton _create_control_bus;
|
||||
Gtk::SpinButton _control_bus_channel_count;
|
||||
|
||||
Gtk::CheckButton _connect_inputs;
|
||||
Gtk::CheckButton _limit_input_ports;
|
||||
|
@ -107,6 +107,7 @@ class IO : public SessionObject, public Latent
|
||||
int disconnect (Port *our_port, std::string other_port, void *src);
|
||||
int disconnect (void *src);
|
||||
bool connected_to (boost::shared_ptr<const IO>) const;
|
||||
bool connected () const;
|
||||
|
||||
nframes_t signal_latency() const { return _own_latency; }
|
||||
nframes_t latency() const;
|
||||
|
@ -138,18 +138,18 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi
|
||||
/* creating a new Session */
|
||||
|
||||
Session (AudioEngine&,
|
||||
std::string fullpath,
|
||||
std::string snapshot_name,
|
||||
AutoConnectOption input_auto_connect,
|
||||
AutoConnectOption output_auto_connect,
|
||||
uint32_t control_out_channels,
|
||||
uint32_t master_out_channels,
|
||||
uint32_t n_physical_in,
|
||||
uint32_t n_physical_out,
|
||||
nframes_t initial_length);
|
||||
|
||||
std::string fullpath,
|
||||
std::string snapshot_name,
|
||||
AutoConnectOption input_auto_connect,
|
||||
AutoConnectOption output_auto_connect,
|
||||
bool with_monitor,
|
||||
uint32_t master_out_channels,
|
||||
uint32_t n_physical_in,
|
||||
uint32_t n_physical_out,
|
||||
nframes_t initial_length);
|
||||
|
||||
virtual ~Session ();
|
||||
|
||||
|
||||
std::string path() const { return _path; }
|
||||
std::string name() const { return _name; }
|
||||
std::string snap_name() const { return _current_snapshot_name; }
|
||||
|
@ -1443,19 +1443,25 @@ IO::set_name_in_state (XMLNode& node, const string& new_name)
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
IO::connected () const
|
||||
{
|
||||
/* do we have any connections at all? */
|
||||
|
||||
for (PortSet::const_iterator p = _ports.begin(); p != _ports.end(); ++p) {
|
||||
if (p->connected()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
IO::connected_to (boost::shared_ptr<const IO> other) const
|
||||
{
|
||||
if (!other) {
|
||||
/* do we have any connections at all? */
|
||||
|
||||
for (PortSet::const_iterator p = _ports.begin(); p != _ports.end(); ++p) {
|
||||
if (p->connected()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
return connected ();
|
||||
}
|
||||
|
||||
assert (_direction != other->direction());
|
||||
|
@ -206,7 +206,7 @@ Session::Session (AudioEngine &eng,
|
||||
string snapshot_name,
|
||||
AutoConnectOption input_ac,
|
||||
AutoConnectOption output_ac,
|
||||
uint32_t control_out_channels,
|
||||
bool with_monitor,
|
||||
uint32_t master_out_channels,
|
||||
uint32_t requested_physical_in,
|
||||
uint32_t requested_physical_out,
|
||||
@ -295,8 +295,8 @@ Session::Session (AudioEngine &eng,
|
||||
output_ac = AutoConnectOption (output_ac & ~AutoConnectMaster);
|
||||
}
|
||||
|
||||
if (control_out_channels) {
|
||||
ChanCount count(DataType::AUDIO, control_out_channels);
|
||||
if (with_monitor) {
|
||||
ChanCount count(DataType::AUDIO, master_out_channels);
|
||||
Route* rt = new Route (*this, _("monitor"), Route::ControlOut, DataType::AUDIO);
|
||||
boost_debug_shared_ptr_mark_interesting (rt, "Route");
|
||||
shared_ptr<Route> r (rt);
|
||||
@ -648,7 +648,9 @@ Session::when_engine_running (bool new_session)
|
||||
|
||||
if (new_session && !no_auto_connect()) {
|
||||
|
||||
if (_master_out && Config->get_auto_connect_standard_busses()) {
|
||||
/* don't connect the master bus outputs if there is a monitor bus */
|
||||
|
||||
if (_master_out && Config->get_auto_connect_standard_busses() && !_control_out) {
|
||||
|
||||
/* if requested auto-connect the outputs to the first N physical ports.
|
||||
*/
|
||||
@ -697,11 +699,10 @@ Session::when_engine_running (bool new_session)
|
||||
}
|
||||
}
|
||||
|
||||
/* if control out is not connected,
|
||||
connect control out to physical outs, but use ones after the master if possible
|
||||
/* if control out is not connected, connect control out to physical outs
|
||||
*/
|
||||
|
||||
if (!_control_out->output()->connected_to (boost::shared_ptr<IO>())) {
|
||||
if (!_control_out->output()->connected ()) {
|
||||
|
||||
if (!Config->get_monitor_bus_preferred_bundle().empty()) {
|
||||
|
||||
@ -716,19 +717,15 @@ Session::when_engine_running (bool new_session)
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
|
||||
for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) {
|
||||
uint32_t shift = _master_out->n_outputs().get(*t);
|
||||
uint32_t mod = _engine.n_physical_outputs (*t);
|
||||
uint32_t limit = _control_out->n_outputs().get(*t);
|
||||
|
||||
cerr << "Connecting " << limit << " control out ports, shift is " << shift
|
||||
<< " mod is " << mod << endl;
|
||||
|
||||
for (uint32_t n = 0; n < limit; ++n) {
|
||||
|
||||
Port* p = _control_out->output()->ports().port(*t, n);
|
||||
string connect_to = _engine.get_nth_physical_output (*t, (n+shift) % mod);
|
||||
string connect_to = _engine.get_nth_physical_output (*t, (n % mod));
|
||||
|
||||
if (!connect_to.empty()) {
|
||||
if (_control_out->output()->connect (p, connect_to, this)) {
|
||||
|
Loading…
Reference in New Issue
Block a user