#include <boost/shared_ptr.hpp>
#include <boost/algorithm/string.hpp>
-#include "midi++/manager.h"
#include "midi++/mmc.h"
#include "ardour/audioengine.h"
#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"
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 ();
}
};
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<Bundle> 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<Bundle> 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<ControlProtocolInfo*>::iterator i = m.control_protocol_info.begin(); i != m.control_protocol_info.end(); ++i) {
/* 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<Bundle> 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())
+ _("MTC in"), DataType::MIDI, ae->make_port_name_non_relative (session->mtc_input_port()->name())
);
sync->add_channel (
- _("MIDI control in"), DataType::MIDI, ae.make_port_name_non_relative (midi_manager->midi_input_port()->name())
+ _("MIDI control in"), DataType::MIDI, ae->make_port_name_non_relative (session->midi_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 clock in"), DataType::MIDI, ae->make_port_name_non_relative (session->midi_clock_input_port()->name())
);
sync->add_channel (
- _("MMC in"), DataType::MIDI, ae.make_port_name_non_relative (mmc->input_port()->name())
+ _("MMC in"), DataType::MIDI, ae->make_port_name_non_relative (session->mmc_input_port()->name())
);
} 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())
);
}
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) {
+ vector<string> ports;
+ if (AudioEngine::instance()->get_ports ("", type, inputs ? IsInput : IsOutput, ports) > 0) {
- int n = 0;
+ for (vector<string>::const_iterator s = ports.begin(); s != ports.end(); ) {
- while (ports[n]) {
-
- std::string const p = ports[n];
+ std::string const p = *s;
if (!system->has_port(p) &&
!bus->has_port(p) &&
*/
if (p.find ("Midi-Through") != string::npos) {
- ++n;
+ ++s;
continue;
}
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")) ||
}
}
- ++n;
+ ++s;
}
-
- free (ports);
}
for (DataType::iterator i = DataType::begin(); i != DataType::end(); ++i) {
}
for (DataType::iterator i = DataType::begin(); i != DataType::end(); ++i) {
- if (!extra_other[*i].empty()) {
- boost::shared_ptr<Bundle> b = make_bundle_from_ports (extra_other[*i], *i, inputs);
+ if (extra_other[*i].empty()) continue;
+ std::string cp;
+ std::vector<std::string> 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<Bundle> 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<Bundle> b = make_bundle_from_ports (nb, *i, inputs);
other->add_bundle (b);
}
}
}
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]);
}