remove unused API
[ardour.git] / libs / ardour / disk_reader.cc
index 27831aba934f66f78ee9a2164890872da567b111..0df940a13b97dcbd099ff44f12f0392988ad49c5 100644 (file)
@@ -57,6 +57,7 @@ DiskReader::DiskReader (Session& s, string const & str, DiskIOProcessor::Flag f)
        : DiskIOProcessor (s, str, f)
        , overwrite_sample (0)
        , overwrite_queued (false)
+       , run_must_resolve (false)
        , _declick_amp (s.nominal_sample_rate ())
        , _declick_offs (0)
 {
@@ -203,17 +204,11 @@ DiskReader::adjust_buffering ()
        }
 }
 
-void
-DiskReader::playlist_changed (const PropertyChange&)
-{
-       playlist_modified ();
-}
-
 void
 DiskReader::playlist_modified ()
 {
        if (!overwrite_queued) {
-               _session.request_overwrite_buffer (_route);
+               _session.request_overwrite_buffer (_track);
                overwrite_queued = true;
        }
 }
@@ -236,8 +231,10 @@ DiskReader::use_playlist (DataType dt, boost::shared_ptr<Playlist> playlist)
           take care of the buffer refill.
        */
 
+        cerr << "DR " << _track->name() << " using playlist, loading ? " << _session.loading() << endl;
+
         if (!overwrite_queued && (prior_playlist || _session.loading())) {
-               _session.request_overwrite_buffer (_route);
+               _session.request_overwrite_buffer (_track);
                overwrite_queued = true;
        }
 
@@ -252,7 +249,15 @@ DiskReader::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_samp
        boost::shared_ptr<ChannelList> c = channels.reader();
        ChannelList::iterator chan;
        sampleoffset_t disk_samples_to_consume;
-       MonitorState ms = _route->monitoring_state ();
+       MonitorState ms = _track->monitoring_state ();
+
+       if (run_must_resolve) {
+               boost::shared_ptr<MidiTrack> mt = boost::dynamic_pointer_cast<MidiTrack> (_track);
+               if (mt) {
+                       resolve_tracker (mt->immediate_events(), start_sample);
+               }
+               run_must_resolve = false;
+       }
 
        if (_active) {
                if (!_pending_active) {
@@ -453,8 +458,6 @@ DiskReader::pending_overwrite () const {
        return g_atomic_int_get (&_pending_overwrite) != 0;
 }
 
-PBD::Timing minsert;
-
 void
 DiskReader::set_pending_overwrite ()
 {
@@ -467,7 +470,9 @@ DiskReader::set_pending_overwrite ()
        for (ChannelList::iterator chan = c->begin(); chan != c->end(); ++chan) {
                (*chan)->rbuf->read_flush ();
        }
+
        g_atomic_int_set (&_pending_overwrite, 1);
+       run_must_resolve = true;
 }
 
 bool
@@ -514,12 +519,15 @@ DiskReader::overwrite_existing_buffers ()
 
   midi:
 
-       if (_playlists[DataType::MIDI]) {
+       RTMidiBuffer* mbuf = rt_midibuffer ();
 
-               minsert.reset(); minsert.start();
-               _mbuf.clear(); midi_playlist()->dump (_mbuf, 0);
-               minsert.update(); cerr << "Reading " << name()  << " took " << minsert.elapsed() << " microseconds, final size = " << _mbuf.size() << endl;
-               _mbuf.dump (40);
+       if (mbuf) {
+               PBD::Timing minsert;
+               minsert.start();
+               midi_playlist()->render (0);
+               minsert.update();
+               assert (midi_playlist()->rendered());
+               // cerr << "Reading " << name()  << " took " << minsert.elapsed() << " microseconds, final size = " << midi_playlist()->rendered()->size() << endl;
        }
 
        g_atomic_int_set (&_pending_overwrite, 0);
@@ -974,7 +982,7 @@ DiskReader::playlist_ranges_moved (list< Evoral::RangeMove<samplepos_t> > const
                return;
        }
 
-       if (!_route || Config->get_automation_follows_regions () == false) {
+       if (!_track || Config->get_automation_follows_regions () == false) {
                return;
        }
 
@@ -988,7 +996,7 @@ DiskReader::playlist_ranges_moved (list< Evoral::RangeMove<samplepos_t> > const
        }
 
        /* move panner automation */
-       boost::shared_ptr<Pannable> pannable = _route->pannable();
+       boost::shared_ptr<Pannable> pannable = _track->pannable();
         Evoral::ControlSet::Controls& c (pannable->controls());
 
         for (Evoral::ControlSet::Controls::iterator ci = c.begin(); ci != c.end(); ++ci) {
@@ -1008,7 +1016,7 @@ DiskReader::playlist_ranges_moved (list< Evoral::RangeMove<samplepos_t> > const
                 }
         }
        /* move processor automation */
-        _route->foreach_processor (boost::bind (&DiskReader::move_processor_automation, this, _1, movements_samples));
+        _track->foreach_processor (boost::bind (&DiskReader::move_processor_automation, this, _1, movements_samples));
 }
 
 void
@@ -1064,7 +1072,10 @@ DiskReader::get_midi_playback (MidiBuffer& dst, samplepos_t start_sample, sample
        MidiBuffer* target;
        samplepos_t nframes = ::llabs (end_sample - start_sample);
 
-       if (_mbuf.size() == 0) {
+       RTMidiBuffer* rtmb = rt_midibuffer();
+
+       if (!rtmb || (rtmb->size() == 0)) {
+               /* no data to read, so do nothing */
                return;
        }
 
@@ -1075,13 +1086,14 @@ DiskReader::get_midi_playback (MidiBuffer& dst, samplepos_t start_sample, sample
                target = &scratch_bufs.get_midi (0);
        }
 
-       if (ms & MonitoringDisk) {
+       size_t events_read = 0;
+
+       if (!pending_overwrite() && (ms & MonitoringDisk)) {
+
                /* disk data needed */
 
                Location* loc = _loop_location;
 
-               size_t events_read = 0;
-
                if (loc) {
                        samplepos_t effective_start;
 
@@ -1118,30 +1130,30 @@ DiskReader::get_midi_playback (MidiBuffer& dst, samplepos_t start_sample, sample
                                if (first) {
                                        DEBUG_TRACE (DEBUG::MidiDiskIO, string_compose ("loop read #1, from %1 for %2\n",
                                                                                              effective_start, first));
-                                       events_read = _mbuf.read (*target, effective_start, effective_start + first, _tracker);
+                                       events_read = rtmb->read (*target, effective_start, effective_start + first, _tracker);
                                }
 
                                if (second) {
                                        DEBUG_TRACE (DEBUG::MidiDiskIO, string_compose ("loop read #2, from %1 for %2\n",
                                                                                              loc->start(), second));
-                                       events_read += _mbuf.read (*target, loc->start(), loc->start() + second, _tracker);
+                                       events_read += rtmb->read (*target, loc->start(), loc->start() + second, _tracker);
                                }
 
                        } else {
                                DEBUG_TRACE (DEBUG::MidiDiskIO, string_compose ("loop read #3, adjusted start as %1 for %2\n",
                                                                                effective_start, nframes));
-                               events_read = _mbuf.read (*target, effective_start, effective_start + nframes, _tracker);
+                               events_read = rtmb->read (*target, effective_start, effective_start + nframes, _tracker);
                        }
                } else {
                        DEBUG_TRACE (DEBUG::MidiDiskIO, string_compose ("playback buffer read, from %1 to %2 (%3)", start_sample, end_sample, nframes));
-                       events_read = _mbuf.read (*target, start_sample, end_sample, _tracker, Port::port_offset ());
+                       events_read = rtmb->read (*target, start_sample, end_sample, _tracker, Port::port_offset ());
                }
 
                DEBUG_TRACE (DEBUG::MidiDiskIO, string_compose ("%1 MDS events read %2 range %3 .. %4\n", _name, events_read, playback_sample, playback_sample + nframes));
        }
 
 
-       if (!_no_disk_output && (ms & MonitoringInput)) {
+       if (!pending_overwrite() && !_no_disk_output && (ms & MonitoringInput)) {
                dst.merge_from (*target, nframes);
        }
 
@@ -1161,13 +1173,6 @@ DiskReader::get_midi_playback (MidiBuffer& dst, samplepos_t start_sample, sample
 #endif
 }
 
-/** @a start is set to the new sample position (TIME) read up to */
-int
-DiskReader::midi_read (samplepos_t& start, samplecnt_t dur, bool reversed)
-{
-       return 0;
-}
-
 int
 DiskReader::refill_midi ()
 {
@@ -1246,3 +1251,22 @@ DiskReader::DeclickAmp::apply_gain (AudioBuffer& buf, samplecnt_t n_samples, con
                _g = g;
        }
 }
+
+RTMidiBuffer*
+DiskReader::rt_midibuffer ()
+{
+       boost::shared_ptr<Playlist> pl = _playlists[DataType::MIDI];
+
+       if (!pl) {
+               return 0;
+       }
+
+       boost::shared_ptr<MidiPlaylist> mpl = boost::dynamic_pointer_cast<MidiPlaylist> (pl);
+
+       if (!mpl) {
+               /* error, but whatever ... */
+               return 0;
+       }
+
+       return mpl->rendered();
+}