summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2019-10-17 15:44:57 -0600
committerPaul Davis <paul@linuxaudiosystems.com>2019-11-02 16:32:18 -0600
commit2cf9ad8f8c21cc445c8eabc6856fd9956926203f (patch)
tree53227bb8f61f20d669806f2508aa308f6abdd264 /libs
parent5b92ef435390ee9fbffc4ad964f7497cf46a3d3f (diff)
refactor SessionEvent and DiskIO so that we pass around boost::shared_ptr<Track> rather than Route
(this the raw pointers used inside SessionEvent)
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/disk_io.h9
-rw-r--r--libs/ardour/ardour/disk_reader.h1
-rw-r--r--libs/ardour/ardour/midi_track.h1
-rw-r--r--libs/ardour/ardour/session.h4
-rw-r--r--libs/ardour/ardour/session_event.h9
-rw-r--r--libs/ardour/disk_io.cc13
-rw-r--r--libs/ardour/disk_reader.cc18
-rw-r--r--libs/ardour/disk_writer.cc8
-rw-r--r--libs/ardour/session_butler.cc11
-rw-r--r--libs/ardour/session_process.cc2
-rw-r--r--libs/ardour/track.cc8
11 files changed, 47 insertions, 37 deletions
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<typename T> class MidiRingBuffer;
@@ -64,8 +63,8 @@ public:
DiskIOProcessor (Session&, const std::string& name, Flag f);
virtual ~DiskIOProcessor ();
- void set_route (boost::shared_ptr<Route>);
- void drop_route ();
+ void set_track (boost::shared_ptr<Track>);
+ 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> _route;
+ boost::shared_ptr<Track> _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<typename T> 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<samplepos_t>& 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<Route>);
+ void request_overwrite_buffer (boost::shared_ptr<Track>);
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<Route>);
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> 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<Track> 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<Route> r)
+DiskIOProcessor::set_track (boost::shared_ptr<Track> 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> 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<ChannelList> 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<MidiTrack> mt = boost::dynamic_pointer_cast<MidiTrack> (_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<samplepos_t> > 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<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) {
@@ -1010,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
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<MidiTrack> mt = boost::dynamic_pointer_cast<MidiTrack>(_route);
+ boost::shared_ptr<MidiTrack> mt = boost::dynamic_pointer_cast<MidiTrack>(_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<Route> r)
+Session::request_overwrite_buffer (boost::shared_ptr<Track> t)
{
- boost::shared_ptr<Track> t = boost::dynamic_pointer_cast<Track> (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<Route> r)
{
if (actively_recording()) {
return;
}
- if (t) {
+ if (r) {
+ boost::shared_ptr<Track> t = boost::dynamic_pointer_cast<Track> (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<Track*>(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<Route>());
+ _disk_reader->set_track (boost::shared_ptr<Track>());
_disk_reader.reset ();
}
if (_disk_writer) {
- _disk_writer->set_route (boost::shared_ptr<Route>());
+ _disk_writer->set_track (boost::shared_ptr<Track>());
_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<Route> (shared_from_this()));
+ _disk_reader->set_track (boost::dynamic_pointer_cast<Track> (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<Route> (shared_from_this()));
+ _disk_writer->set_track (boost::dynamic_pointer_cast<Track> (shared_from_this()));
_disk_writer->set_owner (this);
set_align_choice_from_io ();