X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fport_group.cc;h=448a8d3cf55840bb0a45728bf2d350cfb63253fa;hb=84cb8913b080df9d6dde2ebc478bdb59316b4a1d;hp=5bdd69a00f5dd90d8dd475f8273fb4a4dae5c227;hpb=bce3184ff5383f47675a97a8184f7739552cb04e;p=ardour.git diff --git a/gtk2_ardour/port_group.cc b/gtk2_ardour/port_group.cc index 5bdd69a00f..448a8d3cf5 100644 --- a/gtk2_ardour/port_group.cc +++ b/gtk2_ardour/port_group.cc @@ -21,7 +21,6 @@ #include #include -#include "midi++/manager.h" #include "midi++/mmc.h" #include "ardour/audioengine.h" @@ -29,8 +28,12 @@ #include "ardour/bundle.h" #include "ardour/control_protocol_manager.h" #include "ardour/io_processor.h" +#include "ardour/midi_port.h" +#include "ardour/midiport_manager.h" #include "ardour/session.h" #include "ardour/user_bundle.h" +#include "ardour/port.h" + #include "control_protocol/control_protocol.h" #include "gui_thread.h" @@ -312,7 +315,7 @@ struct RouteIOs { class RouteIOsComparator { public: bool operator() (RouteIOs const & a, RouteIOs const & b) { - return a.route->order_key (EditorSort) < b.route->order_key (EditorSort); + return a.route->order_key () < b.route->order_key (); } }; @@ -422,9 +425,20 @@ PortGroupList::gather (ARDOUR::Session* session, ARDOUR::DataType type, bool inp if (!inputs) { ardour->add_bundle (session->the_auditioner()->output()->bundle()); ardour->add_bundle (session->click_io()->bundle()); + /* Note: the LTC ports do not have the usual ":audio_out 1" postfix, so + * ardour->add_bundle (session->ltc_output_io()->bundle()); + * won't work + */ + boost::shared_ptr ltc (new Bundle (_("LTC Out"), inputs)); + ltc->add_channel (_("LTC Out"), DataType::AUDIO, session->engine().make_port_name_non_relative (session->ltc_output_port()->name())); + ardour->add_bundle (ltc); + } else { + boost::shared_ptr ltc (new Bundle (_("LTC In"), inputs)); + ltc->add_channel (_("LTC In"), DataType::AUDIO, session->engine().make_port_name_non_relative (session->ltc_input_port()->name())); + ardour->add_bundle (ltc); } - /* Ardour's surfaces */ + /* Ardour's control surfaces */ ControlProtocolManager& m = ControlProtocolManager::instance (); for (list::iterator i = m.control_protocol_info.begin(); i != m.control_protocol_info.end(); ++i) { @@ -440,42 +454,35 @@ PortGroupList::gather (ARDOUR::Session* session, ARDOUR::DataType type, bool inp /* Ardour's sync ports */ - MIDI::Manager* midi_manager = MIDI::Manager::instance (); - if (midi_manager && (type == DataType::MIDI || type == DataType::NIL)) { + if ((type == DataType::MIDI || type == DataType::NIL)) { boost::shared_ptr sync (new Bundle (_("Sync"), inputs)); - MIDI::MachineControl* mmc = midi_manager->mmc (); - AudioEngine& ae = session->engine (); + AudioEngine* ae = AudioEngine::instance(); if (inputs) { sync->add_channel ( - _("MTC in"), DataType::MIDI, ae.make_port_name_non_relative (midi_manager->mtc_input_port()->name()) - ); - sync->add_channel ( - _("MIDI control in"), DataType::MIDI, ae.make_port_name_non_relative (midi_manager->midi_input_port()->name()) + _("MTC in"), DataType::MIDI, ae->make_port_name_non_relative (session->mtc_input_port()->name()) ); sync->add_channel ( - _("MIDI clock in"), DataType::MIDI, ae.make_port_name_non_relative (midi_manager->midi_clock_input_port()->name()) + _("MIDI control in"), DataType::MIDI, ae->make_port_name_non_relative (session->midi_input_port()->name()) ); sync->add_channel ( - _("MMC in"), DataType::MIDI, ae.make_port_name_non_relative (mmc->input_port()->name()) + _("MIDI clock in"), DataType::MIDI, ae->make_port_name_non_relative (session->midi_clock_input_port()->name()) ); -#ifdef HAVE_LIBLTC sync->add_channel ( - _("LTC in"), DataType::AUDIO, ae.make_port_name_non_relative (ae->ltc_input_port()->name()) + _("MMC in"), DataType::MIDI, ae->make_port_name_non_relative (session->mmc_input_port()->name()) ); -#endif } else { sync->add_channel ( - _("MTC out"), DataType::MIDI, ae.make_port_name_non_relative (midi_manager->mtc_output_port()->name()) + _("MTC out"), DataType::MIDI, ae->make_port_name_non_relative (session->mtc_output_port()->name()) ); sync->add_channel ( - _("MIDI control out"), DataType::MIDI, ae.make_port_name_non_relative (midi_manager->midi_output_port()->name()) + _("MIDI control out"), DataType::MIDI, ae->make_port_name_non_relative (session->midi_output_port()->name()) ); sync->add_channel ( - _("MIDI clock out"), DataType::MIDI, ae.make_port_name_non_relative (midi_manager->midi_clock_output_port()->name()) + _("MIDI clock out"), DataType::MIDI, ae->make_port_name_non_relative (session->midi_clock_output_port()->name()) ); sync->add_channel ( - _("MMC out"), DataType::MIDI, ae.make_port_name_non_relative (mmc->output_port()->name()) + _("MMC out"), DataType::MIDI, ae->make_port_name_non_relative (session->mmc_output_port()->name()) ); } @@ -492,20 +499,12 @@ PortGroupList::gather (ARDOUR::Session* session, ARDOUR::DataType type, bool inp string lpnc = lpn; lpnc += ':'; - const char ** ports = 0; - if (type == DataType::NIL) { - ports = session->engine().get_ports ("", "", inputs ? JackPortIsInput : JackPortIsOutput); - } else { - ports = session->engine().get_ports ("", type.to_jack_type(), inputs ? JackPortIsInput : JackPortIsOutput); - } - - if (ports) { - - int n = 0; + vector ports; + if (AudioEngine::instance()->get_ports ("", type, inputs ? IsInput : IsOutput, ports) > 0) { - while (ports[n]) { + for (vector::const_iterator s = ports.begin(); s != ports.end(); ) { - std::string const p = ports[n]; + std::string const p = *s; if (!system->has_port(p) && !bus->has_port(p) && @@ -519,7 +518,7 @@ PortGroupList::gather (ARDOUR::Session* session, ARDOUR::DataType type, bool inp */ if (p.find ("Midi-Through") != string::npos) { - ++n; + ++s; continue; } @@ -532,15 +531,15 @@ PortGroupList::gather (ARDOUR::Session* session, ARDOUR::DataType type, bool inp if ((lp.find (N_(":monitor")) != string::npos) && (lp.find (lpn) != string::npos)) { - ++n; + ++s; continue; } /* can't use the audio engine for this as we are looking at non-Ardour ports */ - jack_port_t* jp = jack_port_by_name (session->engine().jack(), p.c_str()); - if (jp) { - DataType t (jack_port_type (jp)); + PortEngine::PortHandle ph = AudioEngine::instance()->port_engine().get_port_by_name (p); + if (ph) { + DataType t (AudioEngine::instance()->port_engine().port_data_type (ph)); if (t != DataType::NIL) { if (port_has_prefix (p, N_("system:")) || port_has_prefix (p, N_("alsa_pcm")) || @@ -553,10 +552,8 @@ PortGroupList::gather (ARDOUR::Session* session, ARDOUR::DataType type, bool inp } } - ++n; + ++s; } - - free (ports); } for (DataType::iterator i = DataType::begin(); i != DataType::end(); ++i) { @@ -567,8 +564,22 @@ PortGroupList::gather (ARDOUR::Session* session, ARDOUR::DataType type, bool inp } for (DataType::iterator i = DataType::begin(); i != DataType::end(); ++i) { - if (!extra_other[*i].empty()) { - boost::shared_ptr b = make_bundle_from_ports (extra_other[*i], *i, inputs); + if (extra_other[*i].empty()) continue; + std::string cp; + std::vector nb; + for (uint32_t j = 0; j < extra_other[*i].size(); ++j) { + std::string nn = extra_other[*i][j]; + std::string pf = nn.substr (0, nn.find_first_of (":") + 1); + if (pf != cp && !nb.empty()) { + boost::shared_ptr b = make_bundle_from_ports (nb, *i, inputs); + other->add_bundle (b); + nb.clear(); + } + cp = pf; + nb.push_back(extra_other[*i][j]); + } + if (!nb.empty()) { + boost::shared_ptr b = make_bundle_from_ports (nb, *i, inputs); other->add_bundle (b); } } @@ -599,7 +610,12 @@ PortGroupList::make_bundle_from_ports (std::vector const & p, ARDOU } for (uint32_t j = 0; j < p.size(); ++j) { - b->add_channel (p[j].substr (pre.length()), type); + std::string n = p[j].substr (pre.length()); + std::string pn = AudioEngine::instance()->get_pretty_name_by_name (p[j]); + if (!pn.empty()) { + n = pn; + } + b->add_channel (n, type); b->set_port (j, p[j]); }