diff options
author | David Robillard <d@drobilla.net> | 2009-02-16 00:53:26 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2009-02-16 00:53:26 +0000 |
commit | fd1a3cfa4cd302a0ce0dbe97810dadb69f323ce6 (patch) | |
tree | adee113bb75bd025dfa9a4d0acc2bf1927084578 /libs/ardour/midi_buffer.cc | |
parent | 85ab34179583db06899105586e7ac2d264b437fb (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.cc | 13 |
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; |