summaryrefslogtreecommitdiff
path: root/libs/ardour/async_midi_port.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-06-20 08:30:21 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2016-09-27 14:59:30 -0500
commit8565d61444fb97e2f2911f96f0f13ff3f900d096 (patch)
tree941813c803471ea54497982bb9a5caf965aa31c3 /libs/ardour/async_midi_port.cc
parent62d2d86b88e01f3bef38f6a642e1a2174d043f21 (diff)
change API for shadow ports and filters
Filter functor needs to be set before registering port, so provide it when adding the port.
Diffstat (limited to 'libs/ardour/async_midi_port.cc')
-rw-r--r--libs/ardour/async_midi_port.cc37
1 files changed, 8 insertions, 29 deletions
diff --git a/libs/ardour/async_midi_port.cc b/libs/ardour/async_midi_port.cc
index ff9a920c69..23465a238b 100644
--- a/libs/ardour/async_midi_port.cc
+++ b/libs/ardour/async_midi_port.cc
@@ -41,30 +41,6 @@ pthread_t AsyncMIDIPort::_process_thread;
#define port_engine AudioEngine::instance()->port_engine()
-static bool
-filter_relax (MidiBuffer& in, MidiBuffer& out)
-{
- return false;
-}
-
-static bool
-filter_copy (MidiBuffer& in, MidiBuffer& out)
-{
- out.copy (in);
- return false;
-}
-
-static bool
-filter_notes_only (MidiBuffer& in, MidiBuffer& out)
-{
- for (MidiBuffer::iterator b = in.begin(); b != in.end(); ++b) {
- if ((*b).is_note_on() || (*b).is_note_off()) {
- out.push_back (*b);
- }
- }
- return false;
-}
-
AsyncMIDIPort::AsyncMIDIPort (string const & name, PortFlags flags)
: MidiPort (name, flags)
, MIDI::Port (name, MIDI::Port::Flags (0))
@@ -74,7 +50,6 @@ AsyncMIDIPort::AsyncMIDIPort (string const & name, PortFlags flags)
, output_fifo (2048)
, input_fifo (1024)
, _xthread (true)
- , inbound_midi_filter (boost::bind (filter_notes_only, _1, _2))
{
}
@@ -171,11 +146,13 @@ AsyncMIDIPort::cycle_start (MIDI::pframes_t nframes)
_xthread.wakeup ();
}
- if (shadow_port) {
- inbound_midi_filter (mb, shadow_port->get_midi_buffer (nframes));
- } else {
+ if (inbound_midi_filter) {
inbound_midi_filter (mb, mb);
}
+
+ if (shadow_port) {
+ shadow_midi_filter (mb, shadow_port->get_midi_buffer (nframes));
+ }
}
}
@@ -373,7 +350,7 @@ AsyncMIDIPort::is_process_thread()
}
int
-AsyncMIDIPort::add_shadow_port (string const & name)
+AsyncMIDIPort::add_shadow_port (string const & name, MidiFilter mf)
{
if (!ARDOUR::Port::receives_input()) {
return -1;
@@ -383,6 +360,8 @@ AsyncMIDIPort::add_shadow_port (string const & name)
return -2;
}
+ shadow_midi_filter = mf;
+
/* shadow port is not async. */
if (!(shadow_port = boost::dynamic_pointer_cast<MidiPort> (AudioEngine::instance()->register_output_port (DataType::MIDI, name, false)))) {