mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-17 12:16:30 +01:00
* 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
This commit is contained in:
parent
7fd65ed78d
commit
ddaaff4483
4 changed files with 15 additions and 2 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
||||
|
|
|
|||
|
|
@ -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()) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue