X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fmidi_playlist_source.h;h=12c184d7b50c3c921184cbc817cac5aa625b77d6;hb=11da4a83e499db74e75d5b59973b0e52b0c1277a;hp=1042b61369506e3e70082c30e5fe87e142361918;hpb=489d2ba1a76c64a935808591571ca63a053172c8;p=ardour.git diff --git a/libs/ardour/ardour/midi_playlist_source.h b/libs/ardour/ardour/midi_playlist_source.h index 1042b61369..12c184d7b5 100644 --- a/libs/ardour/ardour/midi_playlist_source.h +++ b/libs/ardour/ardour/midi_playlist_source.h @@ -32,48 +32,52 @@ namespace ARDOUR { 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& ev); - void append_event_unlocked_frames(const Evoral::Event& 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, 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& dst, - framepos_t position, - framepos_t start, framecnt_t cnt, - MidiStateTracker* tracker) const; - - framepos_t write_unlocked (MidiRingBuffer& 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& ev); + void append_event_frames(const Glib::Threads::Mutex::Lock& lock, const Evoral::Event& 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, 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& dst, + framepos_t position, + framepos_t start, + framecnt_t cnt, + MidiStateTracker* tracker, + MidiChannelFilter* filter) const; + + framecnt_t write_unlocked (const Lock& lock, + MidiRingBuffer& 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__ */