summaryrefslogtreecommitdiff
path: root/libs/ardour/midi_diskstream.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2012-06-18 19:20:59 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2012-06-18 19:20:59 +0000
commita8237f1aed3cd514cfa580aefad5a082bcdecb56 (patch)
tree36680d1a8926abc7bfe53b340f5ed7c86d8054ab /libs/ardour/midi_diskstream.cc
parent88dfe91ce3c7e8d1154f1c51b960f4133a71a661 (diff)
make switching between input+disk monitoring work "right" for MIDI tracks; also fix a bug that led to messages about notes already being on at program start because of a double seek with no read in between
git-svn-id: svn://localhost/ardour2/branches/3.0@12762 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/midi_diskstream.cc')
-rw-r--r--libs/ardour/midi_diskstream.cc15
1 files changed, 15 insertions, 0 deletions
diff --git a/libs/ardour/midi_diskstream.cc b/libs/ardour/midi_diskstream.cc
index a8757d7575..5e2a6e23b9 100644
--- a/libs/ardour/midi_diskstream.cc
+++ b/libs/ardour/midi_diskstream.cc
@@ -506,6 +506,14 @@ MidiDiskstream::seek (framepos_t frame, bool complete_refill)
Glib::Mutex::Lock lm (state_lock);
int ret = -1;
+ if (g_atomic_int_get (&_frames_read_from_ringbuffer) == 0) {
+ /* we haven't read anything since the last seek,
+ so flush all note trackers to prevent
+ wierdness
+ */
+ reset_tracker ();
+ }
+
_playback_buf->reset();
_capture_buf->reset();
g_atomic_int_set(&_frames_read_from_ringbuffer, 0);
@@ -1269,6 +1277,13 @@ MidiDiskstream::use_pending_capture_data (XMLNode& /*node*/)
return 0;
}
+void
+MidiDiskstream::flush_playback (framepos_t start, framepos_t end)
+{
+ _playback_buf->flush (start, end);
+ g_atomic_int_add (&_frames_read_from_ringbuffer, end - start);
+}
+
/** Writes playback events from playback_sample for nframes to dst, translating time stamps
* so that an event at playback_sample has time = 0
*/