Clean up.
[ardour.git] / libs / ardour / midi_diskstream.cc
index cd50fc950aa0f58a610590a6eb7068b5d267b624..f960c170db095fbdbf1c1284ced71b7846613b2c 100644 (file)
@@ -121,8 +121,9 @@ MidiDiskstream::init (Diskstream::Flag f)
        set_block_size (_session.get_block_size());
        allocate_temporary_buffers ();
 
-       _playback_buf = new MidiRingBuffer (_session.midi_diskstream_buffer_size());
-       _capture_buf = new MidiRingBuffer (_session.midi_diskstream_buffer_size());
+       const size_t size = _session.midi_diskstream_buffer_size();
+       _playback_buf = new MidiRingBuffer<nframes_t>(size);
+       _capture_buf = new MidiRingBuffer<nframes_t>(size);
        
        _n_channels = ChanCount(DataType::MIDI, 1);
 
@@ -521,7 +522,7 @@ MidiDiskstream::process (nframes_t transport_frame, nframes_t nframes, nframes_t
                // Pump entire port buffer into the ring buffer (FIXME: split cycles?)
                MidiBuffer& buf = _source_port->get_midi_buffer(nframes, offset);
                for (MidiBuffer::iterator i = buf.begin(); i != buf.end(); ++i) {
-                       const Evoral::MIDIEvent ev(*i, false);
+                       const Evoral::MIDIEvent<MidiBuffer::TimeType> ev(*i, false);
                        assert(ev.buffer());
                        _capture_buf->write(ev.time() + transport_frame, ev.type(), ev.size(), ev.buffer());
                }
@@ -989,9 +990,9 @@ MidiDiskstream::transport_stopped (struct tm& when, time_t twhen, bool abort_cap
                   */
 
                try {
-                       boost::shared_ptr<Region> rx (RegionFactory::create (srcs, _write_source->last_capture_start_frame(), total_capture, 
-                                                                            whole_file_region_name, 
-                                                                            0, Region::Flag (Region::DefaultFlags|Region::Automatic|Region::WholeFile)));
+                       boost::shared_ptr<Region> rx (RegionFactory::create (srcs, 0,
+                                       total_capture, whole_file_region_name, 0,
+                                       Region::Flag (Region::DefaultFlags|Region::Automatic|Region::WholeFile)));
 
                        region = boost::dynamic_pointer_cast<MidiRegion> (rx);
                        region->special_set_position (capture_info.front()->start);
@@ -1010,7 +1011,7 @@ MidiDiskstream::transport_stopped (struct tm& when, time_t twhen, bool abort_cap
                XMLNode &before = _playlist->get_state();
                _playlist->freeze ();
 
-               for (buffer_position = _write_source->last_capture_start_frame(), ci = capture_info.begin(); ci != capture_info.end(); ++ci) {
+               for (buffer_position = 0, ci = capture_info.begin(); ci != capture_info.end(); ++ci) {
 
                        string region_name;
 
@@ -1486,19 +1487,24 @@ MidiDiskstream::get_playback(MidiBuffer& dst, nframes_t start, nframes_t end, nf
 
        // Check only events added this offset cycle
        MidiBuffer::iterator this_cycle_start = dst.end();
-
+       
        // Translates stamps to be relative to start, but add offset.
-       _playback_buf->read(dst, start, end, offset);
-
-       gint32 data_read = end-start;
-       //cout << "data read = " << data_read << " e=" << end << " s=" << start << "off= " << offset
-       //      << " readspace " << _playback_buf->read_space() << " writespace " << _playback_buf->write_space() << endl;
-       g_atomic_int_add(&_frames_read_from_ringbuffer, data_read);
+       #if 1
+               _playback_buf->read(dst, start, end, offset);
+       #else   
+               const size_t events_read = _playback_buf->read(dst, start, end, offset);
+               cout << "frames read = " << frames_read << " events read = " << events_read
+               << " end = " << end << " start = " << start << " offset = " << offset
+               << " readspace " << _playback_buf->read_space()
+               << " writespace " << _playback_buf->write_space() << endl;
+       #endif
        
-       // Now feed the data through the MidiStateTracker.
-       // In case it detects a LoopEvent it will add necessary note
-       // offs.
-
-       if (_midistate_tracker.track(this_cycle_start, dst.end()))
-               _midistate_tracker.resolve_notes(dst, end-start - 1 + offset);
+       gint32 frames_read = end - start;
+       g_atomic_int_add(&_frames_read_from_ringbuffer, frames_read);
+       
+       // Feed the data through the MidiStateTracker
+       // If it detects a LoopEvent it will add necessary note offs
+       if (_midi_state_tracker.track(this_cycle_start, dst.end())) {
+               _midi_state_tracker.resolve_notes(dst, end-start - 1 + offset);
+       }
 }