* Added a couple of guards to prevent MIDI::Events with NULL buffers to enter into...
authorHans Baier <hansfbaier@googlemail.com>
Sun, 11 May 2008 20:23:17 +0000 (20:23 +0000)
committerHans Baier <hansfbaier@googlemail.com>
Sun, 11 May 2008 20:23:17 +0000 (20:23 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@3332 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/ardour/ardour/midi_ring_buffer.h
libs/ardour/midi_diskstream.cc
libs/ardour/midi_model.cc
libs/ardour/midi_track.cc

index c817866600f93e277eb4aa5a341b3db1bf61a9fe..aaad5769a32a20f3182f2ce4f2359696acd131da 100644 (file)
@@ -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) {
index 2e1647f507255e430eadcc3de328452157610c4a..6efa1abbae98c7344f7beb2937754c4f0d299fcc 100644 (file)
@@ -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;
                }
index 3cef80deb6f0af6fa0e00f4a00f2351db2e202e3..8a62eba8a6a532d33fe262822b46984177967321 100644 (file)
@@ -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());
 
index 6132d14dc8a083a58f6c25f8e692c3d80680a983..ab13ad410c852c31b88869a587517e6847a38eef 100644 (file)
@@ -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()) {