Support thread-safe LV2 state restoration
[ardour.git] / libs / ardour / ardour / export_timespan.h
index 7995da36d2c30320c05a811806fac5c581f53332..d4631cbccc00731ba634191673c9ac94c5fc6874 100644 (file)
 #ifndef __ardour_export_timespan_h__
 #define __ardour_export_timespan_h__
 
-#include <map>
-#include <list>
+#include <string>
 
-#include <glibmm/ustring.h>
+#include <boost/shared_ptr.hpp>
 
-#include <ardour/export_status.h>
-#include <ardour/ardour.h>
-
-using Glib::ustring;
+#include "ardour/libardour_visibility.h"
+#include "ardour/types.h"
 
 namespace ARDOUR
 {
 
+class ExportStatus;
 class ExportChannel;
 class ExportTempFile;
 
-class ExportTimespan : public sigc::trackable
+class LIBARDOUR_API ExportTimespan
 {
   private:
-       typedef boost::shared_ptr<ExportTempFile> TempFilePtr;
-       typedef std::pair<ExportChannel const, TempFilePtr> ChannelFilePair;
-       typedef std::map<ExportChannel const, TempFilePtr> TempFileMap;
+       typedef boost::shared_ptr<ExportStatus> ExportStatusPtr;
 
   private:
        friend class ExportElementFactory;
-       ExportTimespan (ExportStatus & status, nframes_t frame_rate);
-       
+       ExportTimespan (ExportStatusPtr status, framecnt_t frame_rate);
+
   public:
        ~ExportTimespan ();
-       
-       ustring name () const { return _name; }
-       void set_name (ustring name) { _name = name; }
-       
-       ustring range_id () const { return _range_id; }
-       void set_range_id (ustring range_id) { _range_id = range_id; }
-       
-       /// Registers a channel to be read when export starts rolling
-       void register_channel (ExportChannel const & channel);
-       
-       /// "Rewinds" the tempfiles to start reading the beginnings again
-       void rewind ();
-       
-       /// Reads data from the tempfile belonging to channel into data
-       nframes_t get_data (float * data, nframes_t frames, ExportChannel const & channel);
-       
-       /// Reads data from each channel and writes to tempfile
-       int process (nframes_t frames);
-       
-       sigc::connection  process_connection;
-       
-       void set_range (nframes_t start, nframes_t end);
-       nframes_t get_length () const { return end_frame - start_frame; }
-       nframes_t get_start () const { return start_frame; }
-       nframes_t get_end () const { return end_frame; }
+
+       std::string name () const { return _name; }
+       void set_name (std::string name) { _name = name; }
+
+       std::string range_id () const { return _range_id; }
+       void set_range_id (std::string range_id) { _range_id = range_id; }
+
+       bool realtime () const { return _realtime; }
+       void set_realtime (bool rt) { _realtime = rt; }
+
+       void set_range (framepos_t start, framepos_t end);
+       framecnt_t get_length () const { return end_frame - start_frame; }
+       framepos_t get_start () const { return start_frame; }
+       framepos_t get_end () const { return end_frame; }
+
+       /// Primarily compare start time, then end time
+       bool operator< (ExportTimespan const & other) {
+               if (start_frame < other.start_frame) { return true; }
+               if (start_frame > other.start_frame) { return false; }
+               return end_frame < other.end_frame;
+       }
 
   private:
 
-       ExportStatus & status;
+       ExportStatusPtr status;
 
-       nframes_t      start_frame;
-       nframes_t      end_frame;
-       nframes_t      position;
-       nframes_t      frame_rate;
+       framepos_t      start_frame;
+       framepos_t      end_frame;
+       framepos_t      position;
+       framecnt_t      frame_rate;
 
-       TempFileMap    filemap;
-       
-       ustring       _name;
-       ustring       _range_id;
+       std::string _name;
+       std::string _range_id;
+       bool        _realtime;
 
 };