summaryrefslogtreecommitdiff
path: root/libs/ardour/midi_buffer.cc
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2009-02-16 00:53:26 +0000
committerDavid Robillard <d@drobilla.net>2009-02-16 00:53:26 +0000
commitfd1a3cfa4cd302a0ce0dbe97810dadb69f323ce6 (patch)
treeadee113bb75bd025dfa9a4d0acc2bf1927084578 /libs/ardour/midi_buffer.cc
parent85ab34179583db06899105586e7ac2d264b437fb (diff)
Gracefully ignore illegal MIDI events at the buffer level (i.e. from Jack).
Ardour should now be able to more or less tolerate crazy incoming MIDI (except for SYSEX). git-svn-id: svn://localhost/ardour2/branches/3.0@4592 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/midi_buffer.cc')
-rw-r--r--libs/ardour/midi_buffer.cc13
1 files changed, 11 insertions, 2 deletions
diff --git a/libs/ardour/midi_buffer.cc b/libs/ardour/midi_buffer.cc
index b0e46f8ad1..8a7d67e2e6 100644
--- a/libs/ardour/midi_buffer.cc
+++ b/libs/ardour/midi_buffer.cc
@@ -135,8 +135,12 @@ MidiBuffer::push_back(const Evoral::MIDIEvent<TimeType>& ev)
<< " stamp size: " << stamp_size << " \n";*/
if (_size + stamp_size + ev.size() >= _capacity) {
- cerr << "MidiBuffer::push_back failed (buffer is full)"
- << endl;
+ cerr << "MidiBuffer::push_back failed (buffer is full)" << endl;
+ return false;
+ }
+
+ if (!Evoral::midi_event_is_valid(ev.buffer(), ev.size())) {
+ cerr << "WARNING: MidiBuffer ignoring illegal MIDI event" << endl;
return false;
}
@@ -166,6 +170,11 @@ MidiBuffer::push_back(const jack_midi_event_t& ev)
cerr << "MidiBuffer::push_back failed (buffer is full)" << endl;
return false;
}
+
+ if (!Evoral::midi_event_is_valid(ev.buffer, ev.size)) {
+ cerr << "WARNING: MidiBuffer ignoring illegal MIDI event" << endl;
+ return false;
+ }
uint8_t* const write_loc = _data + _size;
*((TimeType*)write_loc) = ev.time;