summaryrefslogtreecommitdiff
path: root/libs/ardour/midiport_manager.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2013-08-07 22:22:11 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2013-08-07 22:22:11 -0400
commit1ab61b8564f9934c533d1c1a229888bc7e2fd557 (patch)
treebaa1b05b50c018ca0edbda936b35de58adb29d94 /libs/ardour/midiport_manager.cc
parent83a0c30c24ce6bb6e3e718c267a82fbaffc33b4b (diff)
major redesign of MIDI port heirarchy and management (part 2)
Diffstat (limited to 'libs/ardour/midiport_manager.cc')
-rw-r--r--libs/ardour/midiport_manager.cc40
1 files changed, 38 insertions, 2 deletions
diff --git a/libs/ardour/midiport_manager.cc b/libs/ardour/midiport_manager.cc
index fb27800762..ec525fd9f8 100644
--- a/libs/ardour/midiport_manager.cc
+++ b/libs/ardour/midiport_manager.cc
@@ -66,11 +66,47 @@ MidiPortManager::port (string const & n)
void
MidiPortManager::create_ports ()
{
- _midi_in = AudioEngine::instance()->register_input_port (DataType::MIDI, _("MIDI control in"), true);
- _midi_out = AudioEngine::instance()->register_output_port (DataType::MIDI, _("MIDI control out"), true);
+ /* this method is idempotent
+ */
+
+ if (_midi_in) {
+ return;
+ }
+
+ _midi_in = AudioEngine::instance()->register_input_port (DataType::MIDI, _("control in"), true);
+ _midi_out = AudioEngine::instance()->register_output_port (DataType::MIDI, _("control out"), true);
+
+ _mmc_in = AudioEngine::instance()->register_input_port (DataType::MIDI, _("mmc in"), true);
+ _mmc_out = AudioEngine::instance()->register_output_port (DataType::MIDI, _("mmc out"), true);
+ /* XXX nasty type conversion needed because of the mixed inheritance
+ * required to integrate MIDI::IPMidiPort and ARDOUR::AsyncMIDIPort.
+ *
+ * At some point, we'll move IPMidiPort into Ardour and make it
+ * inherit from ARDOUR::MidiPort not MIDI::Port, and then this
+ * mess can go away
+ */
+
_midi_input_port = boost::dynamic_pointer_cast<AsyncMIDIPort>(_midi_in).get();
_midi_output_port = boost::dynamic_pointer_cast<AsyncMIDIPort>(_midi_out).get();
+
+ _mmc_input_port = boost::dynamic_pointer_cast<AsyncMIDIPort>(_mmc_in).get();
+ _mmc_output_port = boost::dynamic_pointer_cast<AsyncMIDIPort>(_mmc_out).get();
+
+ /* Now register ports used for sync (MTC and MIDI Clock)
+ */
+
+ boost::shared_ptr<ARDOUR::Port> p;
+
+ p = AudioEngine::instance()->register_input_port (DataType::MIDI, _("timecode in"));
+ _mtc_input_port = boost::dynamic_pointer_cast<MidiPort> (p);
+ p = AudioEngine::instance()->register_output_port (DataType::MIDI, _("timecode out"));
+ _mtc_output_port= boost::dynamic_pointer_cast<MidiPort> (p);
+
+ p = AudioEngine::instance()->register_input_port (DataType::MIDI, _("clock in"));
+ _midi_clock_input_port = boost::dynamic_pointer_cast<MidiPort> (p);
+ p = AudioEngine::instance()->register_output_port (DataType::MIDI, _("clock out"));
+ _midi_clock_output_port= boost::dynamic_pointer_cast<MidiPort> (p);
}
void