X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fmidi_playlist.cc;h=9c1e338b6c320e9ce9981df9e9e6c9695d1c3677;hb=aa0effb4cb38f4c3a06564bd9e6a0ee516d4f958;hp=84bcc70d0b860e62cc06de9c1cf9543b6df8547b;hpb=dd53e7284ae1ef8ae594cb1a34db6500f944eab3;p=ardour.git diff --git a/libs/ardour/midi_playlist.cc b/libs/ardour/midi_playlist.cc index 84bcc70d0b..9c1e338b6c 100644 --- a/libs/ardour/midi_playlist.cc +++ b/libs/ardour/midi_playlist.cc @@ -21,20 +21,16 @@ #include #include +#include #include -#include "pbd/error.h" - #include "evoral/EventList.hpp" -#include "ardour/configuration.h" #include "ardour/debug.h" #include "ardour/midi_model.h" #include "ardour/midi_playlist.h" #include "ardour/midi_region.h" -#include "ardour/midi_ring_buffer.h" -#include "ardour/session.h" #include "ardour/types.h" #include "i18n.h" @@ -107,7 +103,8 @@ MidiPlaylist::read (Evoral::EventSink& dst, framepos_t start, framec its OK to block (for short intervals). */ - Glib::RecMutex::Lock rm (region_lock); + Playlist::RegionReadLock rl (this); + DEBUG_TRACE (DEBUG::MidiPlaylistIO, string_compose ("++++++ %1 .. %2 +++++++ %3 trackers +++++++++++++++++\n", start, start + dur, _note_trackers.size())); @@ -128,13 +125,13 @@ MidiPlaylist::read (Evoral::EventSink& dst, framepos_t start, framec */ switch ((*i)->coverage (start, end)) { - case OverlapStart: - case OverlapInternal: - case OverlapExternal: + case Evoral::OverlapStart: + case Evoral::OverlapInternal: + case Evoral::OverlapExternal: regs.push_back (*i); break; - case OverlapEnd: + case Evoral::OverlapEnd: /* this region ends within the read range */ regs.push_back (*i); ended.push_back (*i); @@ -256,10 +253,7 @@ MidiPlaylist::read (Evoral::EventSink& dst, framepos_t start, framec } else { if (new_tracker) { - pair newpair; - newpair.first = mr.get(); - newpair.second = tracker; - _note_trackers.insert (newpair).first; + _note_trackers.insert (make_pair (mr.get(), tracker)); DEBUG_TRACE (DEBUG::MidiPlaylistIO, "\tadded tracker to trackers\n"); } } @@ -294,7 +288,8 @@ MidiPlaylist::read (Evoral::EventSink& dst, framepos_t start, framec void MidiPlaylist::clear_note_trackers () { - Glib::RecMutex::Lock rm (region_lock); + Playlist::RegionWriteLock rl (this, false); + for (NoteTrackers::iterator n = _note_trackers.begin(); n != _note_trackers.end(); ++n) { delete n->second; } @@ -316,26 +311,6 @@ MidiPlaylist::remove_dependents (boost::shared_ptr region) } } - -void -MidiPlaylist::refresh_dependents (boost::shared_ptr /*r*/) -{ - /* MIDI regions have no dependents (crossfades) */ -} - -void -MidiPlaylist::finalize_split_region (boost::shared_ptr /*original*/, boost::shared_ptr /*left*/, boost::shared_ptr /*right*/) -{ - /* No MIDI crossfading (yet?), so nothing to do here */ -} - -void -MidiPlaylist::check_dependents (boost::shared_ptr /*r*/, bool /*norefresh*/) -{ - /* MIDI regions have no dependents (crossfades) */ -} - - int MidiPlaylist::set_state (const XMLNode& node, int version) { @@ -385,7 +360,7 @@ MidiPlaylist::destroy_region (boost::shared_ptr region) bool changed = false; { - RegionLock rlock (this); + RegionWriteLock rlock (this); RegionList::iterator i; RegionList::iterator tmp; @@ -419,8 +394,7 @@ MidiPlaylist::contained_automation() its OK to block (for short intervals). */ - Glib::RecMutex::Lock rm (region_lock); - + Playlist::RegionReadLock rl (this); set ret; for (RegionList::const_iterator r = regions.begin(); r != regions.end(); ++r) {