diff options
author | Hans Baier <hansfbaier@googlemail.com> | 2008-05-11 20:23:17 +0000 |
---|---|---|
committer | Hans Baier <hansfbaier@googlemail.com> | 2008-05-11 20:23:17 +0000 |
commit | ddaaff448302bb5c3cda36d16b785b2eb3f269e2 (patch) | |
tree | 3bb0744734bd95067294d4c3b20d21b6a09abfd6 /libs | |
parent | 7fd65ed78de5f0e3e9dcb99a3aeb55bedd640daf (diff) |
* Added a couple of guards to prevent MIDI::Events with NULL buffers to enter into ring buffers
git-svn-id: svn://localhost/ardour2/branches/3.0@3332 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs')
-rw-r--r-- | libs/ardour/ardour/midi_ring_buffer.h | 8 | ||||
-rw-r--r-- | libs/ardour/midi_diskstream.cc | 1 | ||||
-rw-r--r-- | libs/ardour/midi_model.cc | 1 | ||||
-rw-r--r-- | libs/ardour/midi_track.cc | 7 |
4 files changed, 15 insertions, 2 deletions
diff --git a/libs/ardour/ardour/midi_ring_buffer.h b/libs/ardour/ardour/midi_ring_buffer.h index c817866600..aaad5769a3 100644 --- a/libs/ardour/ardour/midi_ring_buffer.h +++ b/libs/ardour/ardour/midi_ring_buffer.h @@ -399,7 +399,15 @@ MidiRingBuffer::read(MidiBuffer& dst, nframes_t start, nframes_t end, nframes_t if (ev.time() >= start) { ev.time() -= start; + // TODO: Right now there come MIDI Events with empty buffer + if(!ev.buffer()) { + std::cerr << "MidiRingBuffer::read WARNING: Skipping MIDI Event with NULL buffer pointer " + << " and length " << int(ev.size()) << std::endl; + return 0; + } + Byte* write_loc = dst.reserve(ev.time(), ev.size()); + success = MidiRingBufferBase<Byte>::full_read(ev.size(), write_loc); if (success) { diff --git a/libs/ardour/midi_diskstream.cc b/libs/ardour/midi_diskstream.cc index 2e1647f507..6efa1abbae 100644 --- a/libs/ardour/midi_diskstream.cc +++ b/libs/ardour/midi_diskstream.cc @@ -549,6 +549,7 @@ MidiDiskstream::process (nframes_t transport_frame, nframes_t nframes, nframes_t for (size_t i=0; i < to_write; ++i) { const MIDI::Event& ev = *port_iter; + assert(ev.buffer()); _capture_buf->write(ev.time() + transport_frame, ev.size(), ev.buffer()); ++port_iter; } diff --git a/libs/ardour/midi_model.cc b/libs/ardour/midi_model.cc index 3cef80deb6..8a62eba8a6 100644 --- a/libs/ardour/midi_model.cc +++ b/libs/ardour/midi_model.cc @@ -312,6 +312,7 @@ size_t MidiModel::read(MidiRingBuffer& dst, nframes_t start, nframes_t nframes, while (_read_iter != end() && _read_iter->time() < start + nframes) { assert(_read_iter->size()> 0); + assert(_read_iter->buffer()); dst.write(_read_iter->time() + stamp_offset - negative_stamp_offset, _read_iter->size(), _read_iter->buffer()); diff --git a/libs/ardour/midi_track.cc b/libs/ardour/midi_track.cc index 6132d14dc8..ab13ad410c 100644 --- a/libs/ardour/midi_track.cc +++ b/libs/ardour/midi_track.cc @@ -572,7 +572,10 @@ MidiTrack::process_output_buffers (BufferSet& bufs, } else { MidiBuffer& output_buf = bufs.get_midi(0); - write_controller_messages(output_buf, start_frame, end_frame, nframes, offset); + // TODO this crashes: (sends events with NULL buffer pointer) + // Is this necessary anyway here? Dont know. + //write_controller_messages(output_buf, start_frame, end_frame, nframes, offset); + deliver_output(bufs, start_frame, end_frame, nframes, offset); } } @@ -581,6 +584,7 @@ void MidiTrack::write_controller_messages(MidiBuffer& output_buf, nframes_t start_frame, nframes_t end_frame, nframes_t nframes, nframes_t offset) { +#if 0 BufferSet& mix_buffers = _session.get_mix_buffers(ChanCount(DataType::MIDI, 2)); /* FIXME: this could be more realtimey */ @@ -594,7 +598,6 @@ MidiTrack::write_controller_messages(MidiBuffer& output_buf, nframes_t start_fra MIDI::Event ev(0, 3, buf, false); // Write track controller automation -#if 0 // This now lives in MidiModel. Any need for track automation like this? // Relative Velocity? if (_session.transport_rolling()) { |