From 20f7592fab3a24979ab4077405b5e73a34bfeae8 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Wed, 21 Oct 2009 00:53:26 +0000 Subject: Fix MIDI thru, though why this is any different from audio (monitoring) I don't know. git-svn-id: svn://localhost/ardour2/branches/3.0@5837 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/midi_buffer.cc | 10 +++++----- libs/ardour/midi_track.cc | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/libs/ardour/midi_buffer.cc b/libs/ardour/midi_buffer.cc index 2ff04d111f..d14a9b95e9 100644 --- a/libs/ardour/midi_buffer.cc +++ b/libs/ardour/midi_buffer.cc @@ -268,16 +268,14 @@ MidiBuffer::merge_in_place(const MidiBuffer &other) Evoral::MIDIEvent ev_other (*them); size_t sz = 0; - size_t src; + ssize_t src = -1; /* gather up total size of events that are earlier than the event referenced by "us" */ - src = 0; - while (them != other.end() && ev_other.time() < (*us).time()) { - if (!src) { + if (src == -1) { src = them.offset; } sz += sizeof (TimeType) + ev_other.size(); @@ -285,10 +283,12 @@ MidiBuffer::merge_in_place(const MidiBuffer &other) } if (sz) { + assert(src >= 0); /* move existing */ - memmove (_data + us.offset + sz, _data + us.offset , _size - us.offset); + memmove (_data + us.offset + sz, _data + us.offset, _size - us.offset); /* increase _size */ _size += sz; + assert(_size <= _capacity); /* insert new stuff */ memcpy (_data + us.offset, other._data + src, sz); /* update iterator to our own events. this is a miserable hack */ diff --git a/libs/ardour/midi_track.cc b/libs/ardour/midi_track.cc index d3f3638b6b..faa933ae44 100644 --- a/libs/ardour/midi_track.cc +++ b/libs/ardour/midi_track.cc @@ -527,7 +527,7 @@ MidiTrack::write_out_of_band_data (BufferSet& bufs, sframes_t /*start*/, sframes _immediate_events.read (buf, 0, 0, nframes - 1); // all stamps = 0 // MIDI thru: send incoming data "through" output - if (_midi_thru && _input->n_ports().n_midi()) { + if (_midi_thru && _session.transport_speed() != 0.0f && _input->n_ports().n_midi()) { buf.merge_in_place (_input->midi(0)->get_midi_buffer(nframes)); } } -- cgit v1.2.3