diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2012-06-18 19:20:59 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2012-06-18 19:20:59 +0000 |
commit | a8237f1aed3cd514cfa580aefad5a082bcdecb56 (patch) | |
tree | 36680d1a8926abc7bfe53b340f5ed7c86d8054ab /libs/ardour/midi_diskstream.cc | |
parent | 88dfe91ce3c7e8d1154f1c51b960f4133a71a661 (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.cc | 15 |
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 */ |