Fix crash on out of range MIDI events (though this shouldn't be possible at all....
[ardour.git] / libs / ardour / midi_playlist.cc
index 9720384130701ca22cf55a22b331644cd011b7c2..d258d495247db4b54aba0418ee9399b69976b1dd 100644 (file)
@@ -42,6 +42,7 @@ using namespace std;
 
 MidiPlaylist::MidiPlaylist (Session& session, const XMLNode& node, bool hidden)
                : Playlist (session, node, DataType::MIDI, hidden)
+               , _note_mode(Sustained)
 {
        const XMLProperty* prop = node.property("type");
        assert(prop && DataType(prop->value()) == DataType::MIDI);
@@ -264,6 +265,30 @@ MidiPlaylist::destroy_region (boost::shared_ptr<Region> region)
        return changed;
 }
 
+set<Parameter>
+MidiPlaylist::contained_automation()
+{
+       /* this function is never called from a realtime thread, so
+          its OK to block (for short intervals).
+       */
+
+       Glib::Mutex::Lock rm (region_lock);
+
+       set<Parameter> ret;
+
+       for (RegionList::const_iterator r = regions.begin(); r != regions.end(); ++r) {
+               boost::shared_ptr<MidiRegion> mr = boost::dynamic_pointer_cast<MidiRegion>(*r);
+
+               for (Automatable::Controls::iterator c = mr->controls().begin();
+                               c != mr->controls().end(); ++c) {
+                       ret.insert(c->first);
+               }
+       }
+
+       return ret;
+}
+
+
 bool
 MidiPlaylist::region_changed (Change what_changed, boost::shared_ptr<Region> region)
 {