move rt-stop to route

currently this is only used to resolve midi events for plugins
(this is conceptually not correct, note offs should be resolved by
the disk-reader only), but it calls into all processors now (incl
disk-reader if present), which is handy (e.g. flush delaylins)
This commit is contained in:
Robin Gareus 2017-11-08 18:05:04 +01:00
parent 2953b575f2
commit cdec333bfe
4 changed files with 15 additions and 17 deletions

View File

@ -150,8 +150,9 @@ public:
virtual bool can_record() { return false; }
virtual void non_realtime_transport_stop (samplepos_t now, bool flush);
virtual void realtime_handle_transport_stopped () {}
void non_realtime_transport_stop (samplepos_t now, bool flush);
void realtime_handle_transport_stopped ();
virtual void realtime_locate () {}
virtual void non_realtime_locate (samplepos_t);
void set_loop (ARDOUR::Location *);

View File

@ -139,7 +139,6 @@ public:
int can_internal_playback_seek (samplecnt_t);
int internal_playback_seek (samplecnt_t);
void non_realtime_locate (samplepos_t);
void realtime_handle_transport_stopped ();
void non_realtime_speed_change ();
int overwrite_existing_buffers ();
samplecnt_t get_captured_samples (uint32_t n = 0) const;

View File

@ -3412,6 +3412,18 @@ Route::non_realtime_transport_stop (samplepos_t now, bool flush)
}
}
void
Route::realtime_handle_transport_stopped ()
{
Glib::Threads::RWLock::ReaderLock lm (_processor_lock);
/* currently only by Plugin, queue note-off events */
for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
(*i)->realtime_handle_transport_stopped ();
}
}
void
Route::input_change_handler (IOChange change, void * /*src*/)
{

View File

@ -542,20 +542,6 @@ Track::transport_looped (samplepos_t p)
return _disk_writer->transport_looped (p);
}
void
Track::realtime_handle_transport_stopped ()
{
Glib::Threads::RWLock::ReaderLock lm (_processor_lock, Glib::Threads::TRY_LOCK);
if (!lm.locked ()) {
return;
}
for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
(*i)->realtime_handle_transport_stopped ();
}
}
void
Track::transport_stopped_wallclock (struct tm & n, time_t t, bool g)
{