summaryrefslogtreecommitdiff
path: root/libs/ardour/midi_diskstream.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2011-10-31 21:17:14 +0000
committerCarl Hetherington <carl@carlh.net>2011-10-31 21:17:14 +0000
commit03b57c455adeb7b9040d9f79a5b87c435a64814c (patch)
tree1ff145fe863ed424c94ca976544ed9354b6775ea /libs/ardour/midi_diskstream.cc
parent5dba72c874def27bef3ba3fe7a5cf2414e77aadb (diff)
Fix compensation of roll delay with MIDI tracks; data
should be obtained from playback_sample, not transport_frame (should fix #4172). git-svn-id: svn://localhost/ardour2/branches/3.0@10362 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/midi_diskstream.cc')
-rw-r--r--libs/ardour/midi_diskstream.cc27
1 files changed, 9 insertions, 18 deletions
diff --git a/libs/ardour/midi_diskstream.cc b/libs/ardour/midi_diskstream.cc
index 79b59eef50..7ab8c46c30 100644
--- a/libs/ardour/midi_diskstream.cc
+++ b/libs/ardour/midi_diskstream.cc
@@ -1409,43 +1409,34 @@ MidiDiskstream::use_pending_capture_data (XMLNode& /*node*/)
return 0;
}
-/** Writes playback events in the given range to \a dst, translating time stamps
- * so that an event at \a start has time = 0
+/** Writes playback events from playback_sample for nframes to dst, translating time stamps
+ * so that an event at playback_sample has time = 0
*/
void
-MidiDiskstream::get_playback (MidiBuffer& dst, framepos_t start, framepos_t end)
+MidiDiskstream::get_playback (MidiBuffer& dst, framecnt_t nframes)
{
dst.clear();
assert(dst.size() == 0);
- // Reverse. ... We just don't do reverse, ok? Back off.
- if (end <= start) {
- return;
- }
-
- // Translate stamps to be relative to start
-
-
#ifndef NDEBUG
DEBUG_TRACE (DEBUG::MidiDiskstreamIO, string_compose (
"%1 MDS pre-read read %4..%5 from %2 write to %3\n", _name,
- _playback_buf->get_read_ptr(), _playback_buf->get_write_ptr(), start, end));
+ _playback_buf->get_read_ptr(), _playback_buf->get_write_ptr(), playback_sample, playback_sample + nframes));
// cerr << "================\n";
// _playback_buf->dump (cerr);
// cerr << "----------------\n";
- const size_t events_read = _playback_buf->read(dst, start, end);
+ const size_t events_read = _playback_buf->read (dst, playback_sample, playback_sample + nframes);
DEBUG_TRACE (DEBUG::MidiDiskstreamIO, string_compose (
"%1 MDS events read %2 range %3 .. %4 rspace %5 wspace %6 r@%7 w@%8\n",
- _name, events_read, start, end,
+ _name, events_read, playback_sample, playback_sample + nframes,
_playback_buf->read_space(), _playback_buf->write_space(),
- _playback_buf->get_read_ptr(), _playback_buf->get_write_ptr()));
+ _playback_buf->get_read_ptr(), _playback_buf->get_write_ptr()));
#else
- _playback_buf->read(dst, start, end);
+ _playback_buf->read (dst, playback_sample, playback_sample + nframes);
#endif
- gint32 frames_read = end - start;
- g_atomic_int_add(&_frames_read_from_ringbuffer, frames_read);
+ g_atomic_int_add (&_frames_read_from_ringbuffer, nframes);
}
bool