diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2016-06-20 15:00:58 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2016-09-27 14:59:30 -0500 |
commit | d1c024f4f9ef5b5d273d3fb86e066a53e28965cd (patch) | |
tree | 4f5f996f4d8e9189c24f00eaa57917fd759a58de /libs/ardour/midi_port.cc | |
parent | 67620c353ff94dcaf8ee0f8cf003110535071a90 (diff) |
move shadow port stuff from AsyncMIDIPort to MidiPort, where it belongs
Diffstat (limited to 'libs/ardour/midi_port.cc')
-rw-r--r-- | libs/ardour/midi_port.cc | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/libs/ardour/midi_port.cc b/libs/ardour/midi_port.cc index 53e25fee19..02a86bfb8f 100644 --- a/libs/ardour/midi_port.cc +++ b/libs/ardour/midi_port.cc @@ -81,6 +81,19 @@ MidiPort::cycle_start (pframes_t nframes) } } } + + if (inbound_midi_filter) { + MidiBuffer& mb (get_midi_buffer (nframes)); + inbound_midi_filter (mb, mb); + } + + if (_shadow_port) { + MidiBuffer& mb (get_midi_buffer (nframes)); + if (shadow_midi_filter (mb, _shadow_port->get_midi_buffer (nframes))) { + _shadow_port->flush_buffers (nframes); + } + } + } Buffer& @@ -318,3 +331,31 @@ MidiPort::set_trace_on (bool yn) { _trace_on = yn; } + +int +MidiPort::add_shadow_port (string const & name, MidiFilter mf) +{ + if (!ARDOUR::Port::receives_input()) { + return -1; + } + + if (_shadow_port) { + return -2; + } + + shadow_midi_filter = mf; + + if (!(_shadow_port = boost::dynamic_pointer_cast<MidiPort> (AudioEngine::instance()->register_output_port (DataType::MIDI, name, false, PortFlags (Shadow|IsTerminal))))) { + return -3; + } + + /* forward on our port latency to the shadow port. + + XXX: need to capture latency changes and forward them too. + */ + + LatencyRange latency = private_latency_range (false); + _shadow_port->set_private_latency_range (latency, false); + + return 0; +} |