class MidiPlaylist;
-class MidiPlaylistSource : public MidiSource, public PlaylistSource {
- public:
- virtual ~MidiPlaylistSource ();
-
- bool empty() const;
- framecnt_t length (framepos_t) const;
-
- framecnt_t read_unlocked (Sample *dst, framepos_t start, framecnt_t cnt) const;
- framecnt_t write_unlocked (Sample *src, framecnt_t cnt);
-
- XMLNode& get_state ();
- int set_state (const XMLNode&, int version);
-
- void append_event_unlocked_beats(const Evoral::Event<Evoral::MusicalTime>& ev);
- void append_event_unlocked_frames(const Evoral::Event<framepos_t>& ev, framepos_t source_start);
- void load_model(bool lock=true, bool force_reload=false);
- void destroy_model();
-
- protected:
- friend class SourceFactory;
-
- MidiPlaylistSource (Session&, const PBD::ID& orig, const std::string& name, boost::shared_ptr<MidiPlaylist>, uint32_t chn,
- frameoffset_t begin, framecnt_t len, Source::Flag flags);
- MidiPlaylistSource (Session&, const XMLNode&);
-
-
- void flush_midi();
-
- framepos_t read_unlocked (Evoral::EventSink<framepos_t>& dst,
- framepos_t position,
- framepos_t start, framecnt_t cnt,
- MidiStateTracker* tracker) const;
-
- framepos_t write_unlocked (MidiRingBuffer<framepos_t>& dst,
- framepos_t position,
- framecnt_t cnt);
-
- private:
- int set_state (const XMLNode&, int version, bool with_descendants);
- framecnt_t _length;
+class LIBARDOUR_API MidiPlaylistSource : public MidiSource, public PlaylistSource {
+public:
+ virtual ~MidiPlaylistSource ();
+
+ bool empty() const;
+ framecnt_t length (framepos_t) const;
+
+ framecnt_t read_unlocked (Sample *dst, framepos_t start, framecnt_t cnt) const;
+ framecnt_t write_unlocked (Sample *src, framecnt_t cnt);
+
+ XMLNode& get_state ();
+ int set_state (const XMLNode&, int version);
+
+ void append_event_beats(const Glib::Threads::Mutex::Lock& lock, const Evoral::Event<Evoral::Beats>& ev);
+ void append_event_frames(const Glib::Threads::Mutex::Lock& lock, const Evoral::Event<framepos_t>& ev, framepos_t source_start);
+ void load_model(const Glib::Threads::Mutex::Lock& lock, bool force_reload=false);
+ void destroy_model(const Glib::Threads::Mutex::Lock& lock);
+
+protected:
+ friend class SourceFactory;
+
+ MidiPlaylistSource (Session&, const PBD::ID& orig, const std::string& name, boost::shared_ptr<MidiPlaylist>, uint32_t chn,
+ frameoffset_t begin, framecnt_t len, Source::Flag flags);
+ MidiPlaylistSource (Session&, const XMLNode&);
+
+
+ void flush_midi(const Lock& lock);
+
+ framecnt_t read_unlocked (const Lock& lock,
+ Evoral::EventSink<framepos_t>& dst,
+ framepos_t position,
+ framepos_t start,
+ framecnt_t cnt,
+ MidiStateTracker* tracker,
+ MidiChannelFilter* filter) const;
+
+ framecnt_t write_unlocked (const Lock& lock,
+ MidiRingBuffer<framepos_t>& dst,
+ framepos_t position,
+ framecnt_t cnt);
+
+private:
+ int set_state (const XMLNode&, int version, bool with_descendants);
+ framecnt_t _length;
};
-
+
} /* namespace */
#endif /* __ardour_midi_playlist_source_h__ */