From 2cf9ad8f8c21cc445c8eabc6856fd9956926203f Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Thu, 17 Oct 2019 15:44:57 -0600 Subject: refactor SessionEvent and DiskIO so that we pass around boost::shared_ptr rather than Route (this the raw pointers used inside SessionEvent) --- libs/ardour/ardour/disk_io.h | 9 ++++----- libs/ardour/ardour/disk_reader.h | 1 + libs/ardour/ardour/midi_track.h | 1 + libs/ardour/ardour/session.h | 4 ++-- libs/ardour/ardour/session_event.h | 9 +++++---- libs/ardour/disk_io.cc | 13 +++++++------ libs/ardour/disk_reader.cc | 18 ++++++++++++------ libs/ardour/disk_writer.cc | 8 ++++---- libs/ardour/session_butler.cc | 11 ++++++----- libs/ardour/session_process.cc | 2 +- libs/ardour/track.cc | 8 ++++---- 11 files changed, 47 insertions(+), 37 deletions(-) (limited to 'libs/ardour') diff --git a/libs/ardour/ardour/disk_io.h b/libs/ardour/ardour/disk_io.h index fc420f48a9..fc9424c217 100644 --- a/libs/ardour/ardour/disk_io.h +++ b/libs/ardour/ardour/disk_io.h @@ -43,8 +43,7 @@ class AudioPlaylist; class Location; class MidiPlaylist; class Playlist; -class Route; -class Route; +class Track; class Session; template class MidiRingBuffer; @@ -64,8 +63,8 @@ public: DiskIOProcessor (Session&, const std::string& name, Flag f); virtual ~DiskIOProcessor (); - void set_route (boost::shared_ptr); - void drop_route (); + void set_track (boost::shared_ptr); + void drop_track (); static void set_buffering_parameters (BufferingPreset bp); @@ -122,7 +121,7 @@ protected: bool in_set_state; samplepos_t playback_sample; bool _need_butler; - boost::shared_ptr _route; + boost::shared_ptr _track; void init (); diff --git a/libs/ardour/ardour/disk_reader.h b/libs/ardour/ardour/disk_reader.h index 64a72cdd35..384bbbc2ce 100644 --- a/libs/ardour/ardour/disk_reader.h +++ b/libs/ardour/ardour/disk_reader.h @@ -32,6 +32,7 @@ namespace ARDOUR class Playlist; class AudioPlaylist; class MidiPlaylist; + template class MidiRingBuffer; class LIBARDOUR_API DiskReader : public DiskIOProcessor diff --git a/libs/ardour/ardour/midi_track.h b/libs/ardour/ardour/midi_track.h index 74d58e4db2..e32b1c5b32 100644 --- a/libs/ardour/ardour/midi_track.h +++ b/libs/ardour/ardour/midi_track.h @@ -130,6 +130,7 @@ public: MonitorState get_auto_monitoring_state () const; MidiBuffer const& immediate_event_buffer () const { return _immediate_event_buffer; } + MidiRingBuffer& immediate_events () { return _immediate_events; } void set_input_active (bool); bool input_active () const; diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index decf9f7991..2c760a6b1e 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -456,7 +456,7 @@ public: void allow_auto_play (bool yn); void request_transport_speed (double speed, bool as_default = true, TransportRequestSource origin = TRS_UI); void request_transport_speed_nonzero (double, bool as_default = true, TransportRequestSource origin = TRS_UI); - void request_overwrite_buffer (boost::shared_ptr); + void request_overwrite_buffer (boost::shared_ptr); void adjust_playback_buffering(); void adjust_capture_buffering(); @@ -1685,7 +1685,7 @@ private: void set_play_loop (bool yn, double speed); void unset_play_loop (); - void overwrite_some_buffers (Track *); + void overwrite_some_buffers (boost::shared_ptr); void flush_all_inserts (); int micro_locate (samplecnt_t distance); diff --git a/libs/ardour/ardour/session_event.h b/libs/ardour/ardour/session_event.h index 98fe6838f5..da6a0505f2 100644 --- a/libs/ardour/ardour/session_event.h +++ b/libs/ardour/ardour/session_event.h @@ -37,6 +37,7 @@ namespace ARDOUR { class TransportMaster; class Region; +class Track; class LIBARDOUR_API SessionEvent { public: @@ -80,12 +81,12 @@ public: double speed; union { - void* ptr; bool yes_or_no; samplepos_t target2_sample; - Route* route; }; + boost::shared_ptr track; + union { bool second_yes_or_no; double control_value; @@ -113,8 +114,8 @@ public: SessionEvent (Type t, Action a, samplepos_t when, samplepos_t where, double spd, bool yn = false, bool yn2 = false, bool yn3 = false); - void set_ptr (void* p) { - ptr = p; + void set_track (boost::shared_ptr t) { + track = t; } bool before (const SessionEvent& other) const { diff --git a/libs/ardour/disk_io.cc b/libs/ardour/disk_io.cc index 74a6af4a06..aae1447eb4 100644 --- a/libs/ardour/disk_io.cc +++ b/libs/ardour/disk_io.cc @@ -35,6 +35,7 @@ #include "ardour/rc_configuration.h" #include "ardour/session.h" #include "ardour/session_playlists.h" +#include "ardour/track.h" #include "pbd/i18n.h" @@ -343,18 +344,18 @@ DiskIOProcessor::ChannelInfo::~ChannelInfo () } void -DiskIOProcessor::drop_route () +DiskIOProcessor::drop_track () { - _route.reset (); + _track.reset (); } void -DiskIOProcessor::set_route (boost::shared_ptr r) +DiskIOProcessor::set_track (boost::shared_ptr t) { - _route = r; + _track = t; - if (_route) { - _route->DropReferences.connect_same_thread (*this, boost::bind (&DiskIOProcessor::drop_route, this)); + if (_track) { + _track->DropReferences.connect_same_thread (*this, boost::bind (&DiskIOProcessor::drop_track, this)); } } diff --git a/libs/ardour/disk_reader.cc b/libs/ardour/disk_reader.cc index bed7596be6..cd276ca918 100644 --- a/libs/ardour/disk_reader.cc +++ b/libs/ardour/disk_reader.cc @@ -213,7 +213,7 @@ void DiskReader::playlist_modified () { if (!overwrite_queued) { - _session.request_overwrite_buffer (_route); + _session.request_overwrite_buffer (_track); overwrite_queued = true; } } @@ -237,7 +237,7 @@ DiskReader::use_playlist (DataType dt, boost::shared_ptr playlist) */ if (!overwrite_queued && (prior_playlist || _session.loading())) { - _session.request_overwrite_buffer (_route); + _session.request_overwrite_buffer (_track); overwrite_queued = true; } @@ -252,7 +252,7 @@ DiskReader::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_samp boost::shared_ptr c = channels.reader(); ChannelList::iterator chan; sampleoffset_t disk_samples_to_consume; - MonitorState ms = _route->monitoring_state (); + MonitorState ms = _track->monitoring_state (); if (_active) { if (!_pending_active) { @@ -467,6 +467,12 @@ DiskReader::set_pending_overwrite () for (ChannelList::iterator chan = c->begin(); chan != c->end(); ++chan) { (*chan)->rbuf->read_flush (); } + + boost::shared_ptr mt = boost::dynamic_pointer_cast (_track); + if (mt) { + resolve_tracker (mt->immediate_events(), _session.audible_sample()); + } + g_atomic_int_set (&_pending_overwrite, 1); } @@ -976,7 +982,7 @@ DiskReader::playlist_ranges_moved (list< Evoral::RangeMove > const return; } - if (!_route || Config->get_automation_follows_regions () == false) { + if (!_track || Config->get_automation_follows_regions () == false) { return; } @@ -990,7 +996,7 @@ DiskReader::playlist_ranges_moved (list< Evoral::RangeMove > const } /* move panner automation */ - boost::shared_ptr pannable = _route->pannable(); + boost::shared_ptr pannable = _track->pannable(); Evoral::ControlSet::Controls& c (pannable->controls()); for (Evoral::ControlSet::Controls::iterator ci = c.begin(); ci != c.end(); ++ci) { @@ -1010,7 +1016,7 @@ DiskReader::playlist_ranges_moved (list< Evoral::RangeMove > 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 diff --git a/libs/ardour/disk_writer.cc b/libs/ardour/disk_writer.cc index 8f6a868f9f..35c7d120b0 100644 --- a/libs/ardour/disk_writer.cc +++ b/libs/ardour/disk_writer.cc @@ -519,7 +519,7 @@ DiskWriter::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_samp // Pump entire port buffer into the ring buffer (TODO: split cycles?) MidiBuffer& buf = bufs.get_midi (0); - boost::shared_ptr mt = boost::dynamic_pointer_cast(_route); + boost::shared_ptr mt = boost::dynamic_pointer_cast(_track); MidiChannelFilter* filter = mt ? &mt->capture_filter() : 0; assert (buf.size() == 0 || _midi_buf); @@ -1294,9 +1294,9 @@ DiskWriter::transport_stopped_wallclock (struct tm& when, time_t twhen, bool abo _last_capture_sources.insert (_last_capture_sources.end(), midi_srcs.begin(), midi_srcs.end()); - if (_route) { - _route->use_captured_sources (audio_srcs, capture_info); - _route->use_captured_sources (midi_srcs, capture_info); + if (_track) { + _track->use_captured_sources (audio_srcs, capture_info); + _track->use_captured_sources (midi_srcs, capture_info); } mark_write_completed = true; diff --git a/libs/ardour/session_butler.cc b/libs/ardour/session_butler.cc index 1f472b710b..0dda13cd3e 100644 --- a/libs/ardour/session_butler.cc +++ b/libs/ardour/session_butler.cc @@ -74,28 +74,29 @@ Session::schedule_capture_buffering_adjustment () } void -Session::request_overwrite_buffer (boost::shared_ptr r) +Session::request_overwrite_buffer (boost::shared_ptr t) { - boost::shared_ptr t = boost::dynamic_pointer_cast (r); if (!t) { return; } SessionEvent *ev = new SessionEvent (SessionEvent::Overwrite, SessionEvent::Add, SessionEvent::Immediate, 0, 0, 0.0); - ev->set_ptr (t.get()); + ev->set_track (t); queue_event (ev); } /** Process thread. */ void -Session::overwrite_some_buffers (Track* t) +Session::overwrite_some_buffers (boost::shared_ptr r) { if (actively_recording()) { return; } - if (t) { + if (r) { + boost::shared_ptr t = boost::dynamic_pointer_cast (r); + assert (t); t->set_pending_overwrite (); } else { diff --git a/libs/ardour/session_process.cc b/libs/ardour/session_process.cc index da7df17fa7..0691bd4379 100644 --- a/libs/ardour/session_process.cc +++ b/libs/ardour/session_process.cc @@ -927,7 +927,7 @@ Session::process_event (SessionEvent* ev) break; case SessionEvent::Overwrite: - overwrite_some_buffers (static_cast(ev->ptr)); + overwrite_some_buffers (ev->track); break; case SessionEvent::Audition: diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc index f43406843f..9e43635a24 100644 --- a/libs/ardour/track.cc +++ b/libs/ardour/track.cc @@ -73,12 +73,12 @@ Track::~Track () DEBUG_TRACE (DEBUG::Destruction, string_compose ("track %1 destructor\n", _name)); if (_disk_reader) { - _disk_reader->set_route (boost::shared_ptr()); + _disk_reader->set_track (boost::shared_ptr()); _disk_reader.reset (); } if (_disk_writer) { - _disk_writer->set_route (boost::shared_ptr()); + _disk_writer->set_track (boost::shared_ptr()); _disk_writer.reset (); } } @@ -98,12 +98,12 @@ Track::init () _disk_reader.reset (new DiskReader (_session, name(), dflags)); _disk_reader->set_block_size (_session.get_block_size ()); - _disk_reader->set_route (boost::dynamic_pointer_cast (shared_from_this())); + _disk_reader->set_track (boost::dynamic_pointer_cast (shared_from_this())); _disk_reader->set_owner (this); _disk_writer.reset (new DiskWriter (_session, name(), dflags)); _disk_writer->set_block_size (_session.get_block_size ()); - _disk_writer->set_route (boost::dynamic_pointer_cast (shared_from_this())); + _disk_writer->set_track (boost::dynamic_pointer_cast (shared_from_this())); _disk_writer->set_owner (this); set_align_choice_from_io (); -- cgit v1.2.3