Wrap MusicalTime in a class.
[ardour.git] / libs / ardour / midi_diskstream.cc
index 7c75c8d2e6e35b043d65754e478ed15fac319866..40d333d584a701542881de734288e723f65fe858 100644 (file)
@@ -138,6 +138,8 @@ MidiDiskstream::init ()
 MidiDiskstream::~MidiDiskstream ()
 {
        Glib::Threads::Mutex::Lock lm (state_lock);
+       delete _playback_buf;
+       delete _capture_buf;
 }
 
 
@@ -925,7 +927,7 @@ MidiDiskstream::transport_stopped_wallclock (struct tm& /*when*/, time_t /*twhen
                        /* set length in beats to entire capture length */
 
                        BeatsFramesConverter converter (_session.tempo_map(), capture_info.front()->start);
-                       const double total_capture_beats = converter.from (total_capture);
+                       const Evoral::MusicalTime total_capture_beats = converter.from (total_capture);
                        _write_source->set_length_beats (total_capture_beats);
 
                        /* flush to disk: this step differs from the audio path,
@@ -1221,7 +1223,7 @@ MidiDiskstream::use_new_write_source (uint32_t n)
 
        try {
                _write_source = boost::dynamic_pointer_cast<SMFSource>(
-                       _session.create_midi_source_for_session (name ()));
+                       _session.create_midi_source_for_session (write_source_name ()));
 
                if (!_write_source) {
                        throw failed_constructor();
@@ -1256,9 +1258,9 @@ MidiDiskstream::steal_write_source_name ()
         */
 
        try {
-               string new_name = _session.new_midi_source_name (name());
+               string new_path = _session.new_midi_source_path (name());
                
-               if (_write_source->rename (new_name)) {
+               if (_write_source->rename (new_path)) {
                        return string();
                }
        } catch (...) {
@@ -1439,6 +1441,9 @@ MidiDiskstream::get_playback (MidiBuffer& dst, framecnt_t nframes)
 bool
 MidiDiskstream::set_name (string const & name)
 {
+       if (_name == name) {
+               return true;
+       }
        Diskstream::set_name (name);
 
        /* get a new write source so that its name reflects the new diskstream name */
@@ -1447,6 +1452,19 @@ MidiDiskstream::set_name (string const & name)
        return true;
 }
 
+bool
+MidiDiskstream::set_write_source_name (const std::string& str) {
+       if (_write_source_name == str) {
+               return true;
+       }
+       Diskstream::set_write_source_name (str);
+       if (_write_source_name == name()) {
+               return true;
+       }
+       use_new_write_source (0);
+       return true;
+}
+
 boost::shared_ptr<MidiBuffer>
 MidiDiskstream::get_gui_feed_buffer () const
 {