fix midi-capture filter
authorRobin Gareus <robin@gareus.org>
Wed, 11 Feb 2015 23:59:55 +0000 (00:59 +0100)
committerRobin Gareus <robin@gareus.org>
Thu, 12 Feb 2015 00:05:16 +0000 (01:05 +0100)
diskstream reads directly from port, Route
use prefilled buffer-set.

libs/ardour/midi_diskstream.cc
libs/ardour/midi_track.cc

index 3e04876eb4de41007c92e52ab31360a1b0bdfc46..7b196e1fd0db6ab8cd0111870cab8c1f737b6bf8 100644 (file)
@@ -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);
index 2de47263b5cff79de5dbc42610fc4a6855e7bbb8..6e59600990c37e06e86a37fe829deb24c9751409 100644 (file)
@@ -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;