diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2019-10-17 23:15:53 -0600 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2019-11-02 16:32:18 -0600 |
commit | addebc3240e9f2f9f76defad680e310939b1d269 (patch) | |
tree | 3384b8ff3a4206db5630b920bca98ab66a1b1466 /libs/ardour/midi_playlist.cc | |
parent | 5c0fd05c52165af11df60c5930dacd8c2573d6b5 (diff) |
move ownership of an RT MIDI buffer from DiskIO to MidiPlaylist
Diffstat (limited to 'libs/ardour/midi_playlist.cc')
-rw-r--r-- | libs/ardour/midi_playlist.cc | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/libs/ardour/midi_playlist.cc b/libs/ardour/midi_playlist.cc index 5b66a0fe0d..9144742510 100644 --- a/libs/ardour/midi_playlist.cc +++ b/libs/ardour/midi_playlist.cc @@ -467,7 +467,7 @@ MidiPlaylist::contained_automation() } void -MidiPlaylist::render (RTMidiBuffer& dst, MidiChannelFilter* filter) +MidiPlaylist::render (MidiChannelFilter* filter) { typedef pair<MidiStateTracker*,samplepos_t> TrackerInfo; @@ -488,19 +488,19 @@ MidiPlaylist::render (RTMidiBuffer& dst, MidiChannelFilter* filter) regs.push_back (*i); } - /* If we are reading from a single region, we can read directly into dst. Otherwise, - we read into a temporarily list, sort it, then write that to dst. + /* If we are reading from a single region, we can read directly into _rendered. Otherwise, + we read into a temporarily list, sort it, then write that to _rendered. */ Evoral::EventList<samplepos_t> evlist; Evoral::EventSink<samplepos_t>* tgt; /* RAII */ - RTMidiBuffer::WriteProtectRender wpr (dst); + RTMidiBuffer::WriteProtectRender wpr (_rendered); if (regs.size() == 1) { - tgt = &dst; + tgt = &_rendered; wpr.acquire (); - dst.clear (); + _rendered.clear (); } else { tgt = &evlist; } @@ -524,14 +524,14 @@ MidiPlaylist::render (RTMidiBuffer& dst, MidiChannelFilter* filter) EventsSortByTimeAndType<samplepos_t> cmp; evlist.sort (cmp); - /* Copy ordered events from event list to dst. */ + /* Copy ordered events from event list to _rendered. */ wpr.acquire (); - dst.clear (); + _rendered.clear (); for (Evoral::EventList<samplepos_t>::iterator e = evlist.begin(); e != evlist.end(); ++e) { Evoral::Event<samplepos_t>* ev (*e); - dst.write (ev->time(), ev->event_type(), ev->size(), ev->buffer()); + _rendered.write (ev->time(), ev->event_type(), ev->size(), ev->buffer()); delete ev; } } @@ -539,5 +539,11 @@ MidiPlaylist::render (RTMidiBuffer& dst, MidiChannelFilter* filter) /* no need to release - RAII with WriteProtectRender takes care of it */ - DEBUG_TRACE (DEBUG::MidiPlaylistIO, "---- End MidiPlaylist::dump ----\n"); + DEBUG_TRACE (DEBUG::MidiPlaylistIO, string_compose ("---- End MidiPlaylist::render, events: %1\n", _rendered.size())); +} + +RTMidiBuffer* +MidiPlaylist::rendered () +{ + return &_rendered; } |