summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2015-02-12 00:59:55 +0100
committerRobin Gareus <robin@gareus.org>2015-02-12 01:05:16 +0100
commite8c24f1efda442d3a17a774c31ce4452c8d84de9 (patch)
treeaaec8851c91c29374ebe92fa78261d91de105bd3 /libs/ardour
parentd92608b05feb02ee467c73fb26e29ff5a8646179 (diff)
fix midi-capture filter
diskstream reads directly from port, Route use prefilled buffer-set.
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/midi_diskstream.cc11
-rw-r--r--libs/ardour/midi_track.cc6
2 files changed, 12 insertions, 5 deletions
diff --git a/libs/ardour/midi_diskstream.cc b/libs/ardour/midi_diskstream.cc
index 3e04876eb4..7b196e1fd0 100644
--- a/libs/ardour/midi_diskstream.cc
+++ b/libs/ardour/midi_diskstream.cc
@@ -48,6 +48,7 @@
#include "ardour/midi_port.h"
#include "ardour/midi_region.h"
#include "ardour/midi_ring_buffer.h"
+#include "ardour/midi_track.h"
#include "ardour/playlist_factory.h"
#include "ardour/region_factory.h"
#include "ardour/session.h"
@@ -404,8 +405,14 @@ MidiDiskstream::process (BufferSet& bufs, framepos_t transport_frame, pframes_t
// Pump entire port buffer into the ring buffer (FIXME: split cycles?)
MidiBuffer& buf = sp->get_midi_buffer(nframes);
- ChannelMode mode = AllChannels; // _track->get_capture_channel_mode ();
- uint32_t mask = 0xffff; // _track->get_capture_channel_mask ();
+ ChannelMode mode = AllChannels;
+ uint32_t mask = 0xffff;
+
+ MidiTrack * mt = dynamic_cast<MidiTrack*> (_track);
+ if (mt) {
+ mode = mt->get_capture_channel_mode ();
+ mask = mt->get_capture_channel_mask ();
+ }
for (MidiBuffer::iterator i = buf.begin(); i != buf.end(); ++i) {
Evoral::MIDIEvent<MidiBuffer::TimeType> ev(*i, false);
diff --git a/libs/ardour/midi_track.cc b/libs/ardour/midi_track.cc
index 2de47263b5..6e59600990 100644
--- a/libs/ardour/midi_track.cc
+++ b/libs/ardour/midi_track.cc
@@ -370,13 +370,13 @@ MidiTrack::roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame
fill_buffers_with_input (bufs, _input, nframes);
+ /* filter captured data before meter sees it */
+ filter_channels (bufs, get_capture_channel_mode(), get_capture_channel_mask());
+
if (_meter_point == MeterInput && (_monitoring & MonitorInput || _diskstream->record_enabled())) {
_meter->run (bufs, start_frame, end_frame, nframes, true);
}
- /* filter captured data before the diskstream sees it */
-
- filter_channels (bufs, get_capture_channel_mode(), get_capture_channel_mask());
_silent = false;