From c55e23e7aadca4ebe3b9ee8029abce939b4403ec Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 16 Oct 2019 23:07:29 -0600 Subject: [PATCH] change MidiPlaylist::dump() into ::render(); change type of initial argument --- libs/ardour/ardour/midi_playlist.h | 3 ++- libs/ardour/ardour/midi_region.h | 8 ++++---- libs/ardour/ardour/rt_midibuffer.h | 4 ++++ libs/ardour/disk_reader.cc | 8 +++++--- libs/ardour/midi_playlist.cc | 13 ++++++++++--- libs/ardour/midi_region.cc | 8 ++++---- 6 files changed, 29 insertions(+), 15 deletions(-) diff --git a/libs/ardour/ardour/midi_playlist.h b/libs/ardour/ardour/midi_playlist.h index cd2ccddef7..1b01bbdc2d 100644 --- a/libs/ardour/ardour/midi_playlist.h +++ b/libs/ardour/ardour/midi_playlist.h @@ -48,6 +48,7 @@ namespace ARDOUR class BeatsSamplesConverter; class MidiChannelFilter; class MidiRegion; +class RTMidiBuffer; class Session; class Source; @@ -88,7 +89,7 @@ public: uint32_t chan_n = 0, MidiChannelFilter* filter = NULL); - void dump (Evoral::EventSink&, MidiChannelFilter*); + void render (RTMidiBuffer&, MidiChannelFilter*); int set_state (const XMLNode&, int version); diff --git a/libs/ardour/ardour/midi_region.h b/libs/ardour/ardour/midi_region.h index 2b99ede256..500c483827 100644 --- a/libs/ardour/ardour/midi_region.h +++ b/libs/ardour/ardour/midi_region.h @@ -118,10 +118,10 @@ class LIBARDOUR_API MidiRegion : public Region void clobber_sources (boost::shared_ptr source); - int dump_to (Evoral::EventSink& dst, - uint32_t chan_n, - NoteMode mode, - MidiChannelFilter* filter) const; + int render (Evoral::EventSink& dst, + uint32_t chan_n, + NoteMode mode, + MidiChannelFilter* filter) const; protected: diff --git a/libs/ardour/ardour/rt_midibuffer.h b/libs/ardour/ardour/rt_midibuffer.h index da2c5c0e05..5bb12afef9 100644 --- a/libs/ardour/ardour/rt_midibuffer.h +++ b/libs/ardour/ardour/rt_midibuffer.h @@ -25,6 +25,8 @@ #include +#include + #include "evoral/Event.hpp" #include "evoral/EventSink.hpp" #include "ardour/types.h" @@ -82,6 +84,8 @@ class LIBARDOUR_API RTMidiBuffer : public Evoral::EventSink uint32_t _pool_size; uint32_t _pool_capacity; uint8_t* _pool; + + mutable Glib::Threads::RWLock _lock; }; } // namespace ARDOUR diff --git a/libs/ardour/disk_reader.cc b/libs/ardour/disk_reader.cc index 27831aba93..bed7596be6 100644 --- a/libs/ardour/disk_reader.cc +++ b/libs/ardour/disk_reader.cc @@ -516,9 +516,11 @@ DiskReader::overwrite_existing_buffers () if (_playlists[DataType::MIDI]) { - minsert.reset(); minsert.start(); - _mbuf.clear(); midi_playlist()->dump (_mbuf, 0); - minsert.update(); cerr << "Reading " << name() << " took " << minsert.elapsed() << " microseconds, final size = " << _mbuf.size() << endl; + minsert.reset(); + minsert.start(); + midi_playlist()->render (_mbuf, 0); + minsert.update(); + cerr << "Reading " << name() << " took " << minsert.elapsed() << " microseconds, final size = " << _mbuf.size() << endl; _mbuf.dump (40); } diff --git a/libs/ardour/midi_playlist.cc b/libs/ardour/midi_playlist.cc index 2231791de6..61d114f67f 100644 --- a/libs/ardour/midi_playlist.cc +++ b/libs/ardour/midi_playlist.cc @@ -36,6 +36,7 @@ #include "ardour/midi_source.h" #include "ardour/midi_state_tracker.h" #include "ardour/region_factory.h" +#include "ardour/rt_midibuffer.h" #include "ardour/session.h" #include "ardour/tempo.h" #include "ardour/types.h" @@ -491,7 +492,7 @@ MidiPlaylist::contained_automation() } void -MidiPlaylist::dump (Evoral::EventSink& dst, MidiChannelFilter* filter) +MidiPlaylist::render (RTMidiBuffer& dst, MidiChannelFilter* filter) { typedef pair TrackerInfo; @@ -516,7 +517,13 @@ MidiPlaylist::dump (Evoral::EventSink& dst, MidiChannelFilter* filt we read into a temporarily list, sort it, then write that to dst. */ Evoral::EventList evlist; - Evoral::EventSink& tgt = (regs.size() == 1) ? dst : evlist; + Evoral::EventSink* tgt; + + if (regs.size() == 1) { + tgt = &dst; + } else { + tgt = &evlist; + } DEBUG_TRACE (DEBUG::MidiPlaylistIO, string_compose ("\t%1 regions to read, direct: %2\n", regs.size(), (regs.size() == 1))); @@ -529,7 +536,7 @@ MidiPlaylist::dump (Evoral::EventSink& dst, MidiChannelFilter* filt } DEBUG_TRACE (DEBUG::MidiPlaylistIO, string_compose ("dump from %1 at %2\n", mr->name())); - mr->dump_to (tgt, 0, _note_mode, filter); + mr->render (*tgt, 0, _note_mode, filter); } if (!evlist.empty()) { diff --git a/libs/ardour/midi_region.cc b/libs/ardour/midi_region.cc index 177555c0ba..d1a1f672d7 100644 --- a/libs/ardour/midi_region.cc +++ b/libs/ardour/midi_region.cc @@ -483,10 +483,10 @@ MidiRegion::_read_at (const SourceList& /*srcs*/, int -MidiRegion::dump_to (Evoral::EventSink& dst, - uint32_t chan_n, - NoteMode mode, - MidiChannelFilter* filter) const +MidiRegion::render (Evoral::EventSink& dst, + uint32_t chan_n, + NoteMode mode, + MidiChannelFilter* filter) const { sampleoffset_t internal_offset = 0;