convert from Glib:: to Glib::Threads for all thread-related API
[ardour.git] / libs / ardour / ardour / midi_source.h
index 8859d42532a9ea99c880658b8cbe3162d7d86f46..1a7f3b07c570abada94f9fa1a80869df548b34d2 100644 (file)
@@ -22,7 +22,7 @@
 
 #include <string>
 #include <time.h>
-#include <glibmm/thread.h>
+#include <glibmm/threads.h>
 #include <boost/enable_shared_from_this.hpp>
 #include "pbd/stateful.h"
 #include "pbd/xml++.h"
@@ -48,8 +48,9 @@ class MidiSource : virtual public Source, public boost::enable_shared_from_this<
        MidiSource (Session& session, const XMLNode&);
        virtual ~MidiSource ();
 
-        boost::shared_ptr<MidiSource> clone (Evoral::MusicalTime begin = Evoral::MinMusicalTime, 
-                                             Evoral::MusicalTime end = Evoral::MaxMusicalTime);
+       boost::shared_ptr<MidiSource> clone (const std::string& path,
+                                            Evoral::MusicalTime begin = Evoral::MinMusicalTime,
+                                            Evoral::MusicalTime end = Evoral::MaxMusicalTime);
 
        /** Read the data in a given time range from the MIDI source.
         * All time stamps in parameters are in audio frames (even if the source has tempo time).
@@ -76,20 +77,27 @@ class MidiSource : virtual public Source, public boost::enable_shared_from_this<
 
        virtual bool       empty () const;
        virtual framecnt_t length (framepos_t pos) const;
-       virtual void       update_length (framepos_t pos, framecnt_t cnt);
+       virtual void       update_length (framecnt_t);
 
        virtual void mark_streaming_midi_write_started (NoteMode mode);
        virtual void mark_streaming_write_started ();
        virtual void mark_streaming_write_completed ();
        void mark_write_starting_now ();
 
+       /* like ::mark_streaming_write_completed() but with more arguments to
+        * allow control over MIDI-specific behaviour. Expected to be used only
+        * when recording actual MIDI input, rather then when importing files
+        * etc.
+        */
+       virtual void mark_midi_streaming_write_completed (Evoral::Sequence<Evoral::MusicalTime>::StuckNoteOption, Evoral::MusicalTime when = 0);
+
        virtual void session_saved();
 
        std::string captured_for() const               { return _captured_for; }
        void        set_captured_for (std::string str) { _captured_for = str; }
 
-       uint32_t read_data_count()  const { return _read_data_count; }
-       uint32_t write_data_count() const { return _write_data_count; }
+       framepos_t last_write_end() const { return _last_write_end; }
+       void set_last_write_end (framepos_t pos) { _last_write_end = pos; }
 
        static PBD::Signal1<void,MidiSource*> MidiSourceCreated;
 
@@ -135,18 +143,16 @@ class MidiSource : virtual public Source, public boost::enable_shared_from_this<
   protected:
        virtual void flush_midi() = 0;
 
-       virtual framepos_t read_unlocked (Evoral::EventSink<framepos_t>& dst,
+       virtual framecnt_t read_unlocked (Evoral::EventSink<framepos_t>& dst,
                                          framepos_t position,
                                          framepos_t start, framecnt_t cnt,
                                          MidiStateTracker* tracker) const = 0;
 
-       virtual framepos_t write_unlocked (MidiRingBuffer<framepos_t>& dst,
+       virtual framecnt_t write_unlocked (MidiRingBuffer<framepos_t>& dst,
                                           framepos_t position,
                                           framecnt_t cnt) = 0;
 
        std::string      _captured_for;
-       mutable uint32_t _read_data_count;  ///< modified in read()
-       mutable uint32_t _write_data_count; ///< modified in write()
 
        boost::shared_ptr<MidiModel> _model;
        bool                         _writing;