summaryrefslogtreecommitdiff
path: root/libs/ardour/midi_source.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2011-07-20 18:13:03 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2011-07-20 18:13:03 +0000
commitc99738d88e8a2ad806b219b9f3614a6b55b6bf37 (patch)
treed506a27d404e1b63063372ebe2f63aacc7e6ebb4 /libs/ardour/midi_source.cc
parent8c7fda11cf47cd8dd04c6eabffc437dd942403d5 (diff)
try to fix data loss at end of a capture pass for MIDI - add a new virtual method to MidiSource that specifies what should be done with stuck notes, remove duplicate(i hope) _last_flush_frame from SMFSource that mirrored, more or less, MidiSource::_last_write_end; use new virtual method when stopping after capture.
git-svn-id: svn://localhost/ardour2/branches/3.0@9910 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/midi_source.cc')
-rw-r--r--libs/ardour/midi_source.cc18
1 files changed, 15 insertions, 3 deletions
diff --git a/libs/ardour/midi_source.cc b/libs/ardour/midi_source.cc
index 404ac3a73d..42b4518655 100644
--- a/libs/ardour/midi_source.cc
+++ b/libs/ardour/midi_source.cc
@@ -267,7 +267,13 @@ MidiSource::midi_write (MidiRingBuffer<framepos_t>& source, framepos_t source_st
Glib::Mutex::Lock lm (_lock);
cerr << "MidiSource calling write unlocked\n";
const framecnt_t ret = write_unlocked (source, source_start, duration);
- _last_write_end += duration;
+
+ if (duration == max_framecnt) {
+ _last_read_end = 0;
+ } else {
+ _last_write_end += duration;
+ }
+
cerr << name() << " last write end now @ " << _last_write_end << endl;
return ret;
}
@@ -311,15 +317,21 @@ MidiSource::mark_streaming_write_started ()
}
void
-MidiSource::mark_streaming_write_completed ()
+MidiSource::mark_midi_streaming_write_completed (Evoral::Sequence<Evoral::MusicalTime>::StuckNoteOption option, Evoral::MusicalTime end)
{
if (_model) {
- _model->end_write (false);
+ _model->end_write (option, end);
}
_writing = false;
}
+void
+MidiSource::mark_streaming_write_completed ()
+{
+ mark_midi_streaming_write_completed (Evoral::Sequence<Evoral::MusicalTime>::DeleteStuckNotes);
+}
+
boost::shared_ptr<MidiSource>
MidiSource::clone (Evoral::MusicalTime begin, Evoral::MusicalTime end)
{