Fix displaying of notes in auto-created MIDI region when it's the first region in...
[ardour.git] / libs / ardour / midi_diskstream.cc
index 54f4c1069880e09ed9482f47bb73ac01ee9e7357..3a2842be7a91fcbd23be6381667dce46d389c2e8 100644 (file)
@@ -137,6 +137,17 @@ MidiDiskstream::~MidiDiskstream ()
        Glib::Mutex::Lock lm (state_lock);
 }
 
+       
+void
+MidiDiskstream::non_realtime_locate (nframes_t position)
+{
+       //cerr << "MDS: non_realtime_locate: " << position << endl;
+       assert(_write_source);
+       _write_source->set_timeline_position (position);
+       seek(position, true); // correct?
+}
+
+
 void
 MidiDiskstream::non_realtime_input_change ()
 {
@@ -196,25 +207,7 @@ MidiDiskstream::get_input_sources ()
 
        _source_port = _io->midi_input(0);
 
-       /* I don't get it....
-       const char **connections = _io->input(0)->get_connections ();
-
-       if (connections == 0 || connections[0] == 0) {
-
-               if (_source_port) {
-                       // _source_port->disable_metering ();
-               }
-
-               _source_port = 0;
-
-       } else {
-               _source_port = dynamic_cast<MidiPort*>(
-                       _session.engine().get_port_by_name (connections[0]) );
-       }
-
-       if (connections) {
-               free (connections);
-       }*/
+       // do... stuff?
 }              
 
 int
@@ -677,6 +670,7 @@ MidiDiskstream::set_pending_overwrite (bool yn)
 int
 MidiDiskstream::overwrite_existing_buffers ()
 {
+       cerr << "MDS: overwrite_existing_buffers() (does nothing)" << endl;
        return 0;
 }
 
@@ -685,6 +679,8 @@ MidiDiskstream::seek (nframes_t frame, bool complete_refill)
 {
        Glib::Mutex::Lock lm (state_lock);
        int ret = -1;
+       
+       //cerr << "MDS: seek: " << frame << endl;
 
        _playback_buf->reset();
        _capture_buf->reset();
@@ -714,6 +710,8 @@ MidiDiskstream::can_internal_playback_seek (nframes_t distance)
 int
 MidiDiskstream::internal_playback_seek (nframes_t distance)
 {
+       cerr << "MDS: internal_playback_seek " << distance << endl;
+
        first_recordable_frame += distance;
        playback_sample += distance;
 
@@ -1195,7 +1193,11 @@ MidiDiskstream::engage_record_enable ()
                _source_port->request_monitor_input (!(Config->get_auto_input() && rolling));
        }
 
-       _write_source->mark_streaming_midi_write_started (_note_mode);
+       // FIXME: Why is this necessary?  Isn't needed for AudioDiskstream...
+       if (!_write_source)
+               use_new_write_source();
+
+       _write_source->mark_streaming_midi_write_started (_note_mode, _session.transport_frame());
 
        RecordEnableChanged (); /* EMIT SIGNAL */
 }
@@ -1397,6 +1399,7 @@ MidiDiskstream::reset_write_sources (bool mark_write_complete, bool force)
        if (_write_source && mark_write_complete) {
                _write_source->mark_streaming_write_completed ();
        }
+
        use_new_write_source (0);
                        
        if (record_enabled()) {