summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2017-04-18 12:28:44 +0100
committerPaul Davis <paul@linuxaudiosystems.com>2017-09-18 11:40:53 -0400
commite24ca13394da73f2cf5f3ffa99b0fc0c8dacaff9 (patch)
treeb2a908e409460acc3076d5c999a6bc56c05cf7c3
parentf9e7ffc601fdec2470f106a963da80d60e6290e6 (diff)
remove all remaining vestiges of per-track varispeed from libardour
-rw-r--r--libs/ardour/ardour/disk_io.h5
-rw-r--r--libs/ardour/ardour/disk_reader.h1
-rw-r--r--libs/ardour/ardour/session.h2
-rw-r--r--libs/ardour/ardour/session_event.h1
-rw-r--r--libs/ardour/ardour/track.h4
-rw-r--r--libs/ardour/disk_io.cc40
-rw-r--r--libs/ardour/disk_reader.cc54
-rw-r--r--libs/ardour/disk_writer.cc2
-rw-r--r--libs/ardour/enums.cc1
-rw-r--r--libs/ardour/session_process.cc4
-rw-r--r--libs/ardour/session_transport.cc26
-rw-r--r--libs/ardour/track.cc10
12 files changed, 45 insertions, 105 deletions
diff --git a/libs/ardour/ardour/disk_io.h b/libs/ardour/ardour/disk_io.h
index 47b02582a1..e09f25d767 100644
--- a/libs/ardour/ardour/disk_io.h
+++ b/libs/ardour/ardour/disk_io.h
@@ -77,12 +77,11 @@ class LIBARDOUR_API DiskIOProcessor : public Processor
bool hidden() const { return _flags & Hidden; }
bool recordable() const { return _flags & Recordable; }
bool non_layered() const { return _flags & NonLayered; }
- bool reversed() const { return _actual_speed < 0.0f; }
virtual void non_realtime_locate (framepos_t);
- void non_realtime_set_speed ();
- bool realtime_set_speed (double sp, bool global);
+ void non_realtime_speed_change ();
+ bool realtime_speed_change ();
virtual void punch_in() {}
virtual void punch_out() {}
diff --git a/libs/ardour/ardour/disk_reader.h b/libs/ardour/ardour/disk_reader.h
index c3cbe33f15..b0a6f6a158 100644
--- a/libs/ardour/ardour/disk_reader.h
+++ b/libs/ardour/ardour/disk_reader.h
@@ -118,7 +118,6 @@ class LIBARDOUR_API DiskReader : public DiskIOProcessor
bool overwrite_queued;
IOChange input_change_pending;
framecnt_t wrap_buffer_size;
- framecnt_t speed_buffer_size;
MonitorChoice _monitoring_choice;
int _do_refill_with_alloc (bool partial_fill);
diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h
index 7d408234b2..1175ec189c 100644
--- a/libs/ardour/ardour/session.h
+++ b/libs/ardour/ardour/session.h
@@ -432,7 +432,6 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
void request_overwrite_buffer (boost::shared_ptr<Route>);
void adjust_playback_buffering();
void adjust_capture_buffering();
- void request_track_speed (Track *, double speed);
void request_input_change_handling ();
bool locate_pending() const { return static_cast<bool>(post_transport_work()&PostTransportLocate); }
@@ -1699,7 +1698,6 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
void locate (framepos_t, bool with_roll, bool with_flush, bool with_loop=false, bool force=false, bool with_mmc=true);
void start_locate (framepos_t, bool with_roll, bool with_flush, bool for_loop_enabled=false, bool force=false);
void force_locate (framepos_t frame, bool with_roll = false);
- void set_track_speed (Track *, double speed);
void set_transport_speed (double speed, framepos_t destination_frame, bool abort = false, bool clear_state = false, bool as_default = false);
void stop_transport (bool abort = false, bool clear_state = false);
void start_transport ();
diff --git a/libs/ardour/ardour/session_event.h b/libs/ardour/ardour/session_event.h
index 740fcae1a2..2780924c27 100644
--- a/libs/ardour/ardour/session_event.h
+++ b/libs/ardour/ardour/session_event.h
@@ -40,7 +40,6 @@ class LIBARDOUR_API SessionEvent {
public:
enum Type {
SetTransportSpeed,
- SetTrackSpeed,
Locate,
LocateRoll,
LocateRollLocate,
diff --git a/libs/ardour/ardour/track.h b/libs/ardour/ardour/track.h
index 103def7041..99f4ae2f49 100644
--- a/libs/ardour/ardour/track.h
+++ b/libs/ardour/ardour/track.h
@@ -158,12 +158,12 @@ class LIBARDOUR_API Track : public Route, public Recordable
int internal_playback_seek (framecnt_t);
void non_realtime_locate (framepos_t);
void realtime_handle_transport_stopped ();
- void non_realtime_set_speed ();
+ void non_realtime_speed_change ();
int overwrite_existing_buffers ();
framecnt_t get_captured_frames (uint32_t n = 0) const;
int set_loop (ARDOUR::Location *);
void transport_looped (framepos_t);
- bool realtime_set_speed (double, bool);
+ bool realtime_speed_change ();
void transport_stopped_wallclock (struct tm &, time_t, bool);
bool pending_overwrite () const;
void prepare_to_stop (framepos_t, framepos_t);
diff --git a/libs/ardour/disk_io.cc b/libs/ardour/disk_io.cc
index 5b81e2a161..587ba19ed0 100644
--- a/libs/ardour/disk_io.cc
+++ b/libs/ardour/disk_io.cc
@@ -49,8 +49,6 @@ DiskIOProcessor::DiskIOProcessor (Session& s, string const & str, Flag f)
: Processor (s, str)
, _flags (f)
, i_am_the_modifier (false)
- , _actual_speed (0.0)
- , _target_speed (0.0)
, _buffer_reallocation_required (false)
, _seek_required (false)
, _slaved (false)
@@ -204,7 +202,7 @@ DiskIOProcessor::non_realtime_locate (framepos_t location)
}
void
-DiskIOProcessor::non_realtime_set_speed ()
+DiskIOProcessor::non_realtime_speed_change ()
{
if (_buffer_reallocation_required) {
_buffer_reallocation_required = false;
@@ -217,31 +215,18 @@ DiskIOProcessor::non_realtime_set_speed ()
}
bool
-DiskIOProcessor::realtime_set_speed (double new_speed, bool global)
+DiskIOProcessor::realtime_speed_change ()
{
- bool changed = false;
+ const framecnt_t required_wrap_size = (framecnt_t) ceil (_session.get_block_size() * fabs (_session.transport_speed())) + 2;
+ bool _buffer_reallocation_required;
- DEBUG_TRACE (DEBUG::Transport, string_compose ("%1 will run at %2\n", name(), new_speed));
-
- if (_target_speed != new_speed) {
- _target_speed = new_speed;
- changed = true;
-
- framecnt_t required_wrap_size = (framecnt_t) ceil (_session.get_block_size() * fabs (new_speed)) + 2;
-
- if (required_wrap_size > wrap_buffer_size) {
- _buffer_reallocation_required = true;
- }
- }
-
- if (changed) {
- if (!global) {
- _seek_required = true;
- }
- SpeedChanged (); /* EMIT SIGNAL */
+ if (required_wrap_size > wrap_buffer_size) {
+ _buffer_reallocation_required = true;
+ } else {
+ _buffer_reallocation_required = false;
}
- return _buffer_reallocation_required || _seek_required;
+ return _buffer_reallocation_required;
}
int
@@ -255,13 +240,6 @@ DiskIOProcessor::set_state (const XMLNode& node, int version)
_flags = Flag (string_2_enum (prop->value(), _flags));
}
- if ((prop = node.property ("speed")) != 0) {
- double sp = atof (prop->value().c_str());
-
- if (realtime_set_speed (sp, false)) {
- non_realtime_set_speed ();
- }
- }
return 0;
}
diff --git a/libs/ardour/disk_reader.cc b/libs/ardour/disk_reader.cc
index fbc48c01c9..2f4b9a903d 100644
--- a/libs/ardour/disk_reader.cc
+++ b/libs/ardour/disk_reader.cc
@@ -149,7 +149,7 @@ DiskReader::set_state (const XMLNode& node, int version)
void
DiskReader::realtime_handle_transport_stopped ()
{
- realtime_set_speed (0.0f, true);
+ realtime_speed_change ();
}
void
@@ -239,11 +239,21 @@ DiskReader::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame,
uint32_t n;
boost::shared_ptr<ChannelList> c = channels.reader();
ChannelList::iterator chan;
- framecnt_t playback_distance = 0;
const bool need_disk_signal = result_required || _monitoring_choice == MonitorDisk || _monitoring_choice == MonitorCue;
+ frameoffset_t playback_distance = nframes;
_need_butler = false;
- playback_distance = calculate_playback_distance (nframes);
+
+
+ if (speed != 1.0f && speed != -1.0f) {
+ interpolation.set_speed (speed);
+ midi_interpolation.set_speed (speed);
+ playback_distance = midi_interpolation.distance (nframes);
+ }
+
+ if (speed < 0.0) {
+ playback_distance = -playback_distance;
+ }
if (!need_disk_signal) {
@@ -277,7 +287,7 @@ DiskReader::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame,
if (playback_distance <= (framecnt_t) chaninfo->rw_vector.len[0]) {
- if (fabsf (_actual_speed) != 1.0f) {
+ if (fabsf (speed) != 1.0f) {
(void) interpolation.interpolate (
n, nframes,
chaninfo->rw_vector.buf[0],
@@ -295,7 +305,7 @@ DiskReader::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame,
/* We have enough samples, but not in one lump.
*/
- if (fabsf (_actual_speed) != 1.0f) {
+ if (fabsf (speed) != 1.0f) {
interpolation.interpolate (n, chaninfo->rw_vector.len[0],
chaninfo->rw_vector.buf[0],
outgoing);
@@ -343,7 +353,7 @@ DiskReader::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame,
get_playback (mbuf, playback_distance);
/* vari-speed */
- if (_actual_speed != 0.0 && fabsf (_actual_speed) != 1.0f) {
+ if (speed != 0.0 && fabsf (speed) != 1.0f) {
MidiBuffer& mbuf (bufs.get_midi (0));
for (MidiBuffer::iterator i = mbuf.begin(); i != mbuf.end(); ++i) {
MidiBuffer::TimeType *tme = i.timeptr();
@@ -352,7 +362,7 @@ DiskReader::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame,
}
}
- if (_actual_speed < 0.0) {
+ if (speed < 0.0) {
playback_sample -= playback_distance;
} else {
playback_sample += playback_distance;
@@ -436,26 +446,6 @@ DiskReader::run (BufferSet& bufs, framepos_t start_frame, framepos_t end_frame,
bufs.set_count (cnt);
}
-frameoffset_t
-DiskReader::calculate_playback_distance (pframes_t nframes)
-{
- frameoffset_t playback_distance = nframes;
-
- if (_target_speed != 1.0f && _target_speed != -1.0f) {
- interpolation.set_speed (_target_speed);
- midi_interpolation.set_speed (_target_speed);
- playback_distance = midi_interpolation.distance (nframes);
- }
-
- _actual_speed = _target_speed;
-
- if (_actual_speed < 0.0) {
- return -playback_distance;
- } else {
- return playback_distance;
- }
-}
-
void
DiskReader::set_pending_overwrite (bool yn)
{
@@ -486,7 +476,7 @@ DiskReader::overwrite_existing_buffers ()
/* AUDIO */
- bool reversed = (_target_speed * _session.transport_speed()) < 0.0f;
+ const bool reversed = _session.transport_speed() < 0.0f;
/* assume all are the same size */
framecnt_t size = c->front()->buf->bufsize();
@@ -829,7 +819,7 @@ DiskReader::refill_audio (Sample* mixdown_buffer, float* gain_buffer, framecnt_t
int32_t ret = 0;
framecnt_t to_read;
RingBufferNPT<Sample>::rw_vector vector;
- bool const reversed = (_target_speed * _session.transport_speed()) < 0.0f;
+ bool const reversed = _session.transport_speed() < 0.0f;
framecnt_t total_space;
framecnt_t zero_fill;
uint32_t chan_n;
@@ -877,8 +867,8 @@ DiskReader::refill_audio (Sample* mixdown_buffer, float* gain_buffer, framecnt_t
the playback buffer is empty.
*/
- DEBUG_TRACE (DEBUG::DiskIO, string_compose ("%1: space to refill %2 vs. chunk %3 (speed = %4)\n", name(), total_space, _chunk_frames, _actual_speed));
- if ((total_space < _chunk_frames) && fabs (_actual_speed) < 2.0f) {
+ DEBUG_TRACE (DEBUG::DiskIO, string_compose ("%1: space to refill %2 vs. chunk %3 (speed = %4)\n", name(), total_space, _chunk_frames, _session.transport_speed()));
+ if ((total_space < _chunk_frames) && fabs (_session.transport_speed()) < 2.0f) {
return 0;
}
@@ -1391,7 +1381,7 @@ DiskReader::refill_midi ()
}
size_t write_space = _midi_buf->write_space();
- bool reversed = (_target_speed * _session.transport_speed()) < 0.0f;
+ const bool reversed = _session.transport_speed() < 0.0f;
DEBUG_TRACE (DEBUG::DiskIO, string_compose ("MIDI refill, write space = %1 file frame = %2\n", write_space, file_frame));
diff --git a/libs/ardour/disk_writer.cc b/libs/ardour/disk_writer.cc
index 09b10696c0..5cddb51499 100644
--- a/libs/ardour/disk_writer.cc
+++ b/libs/ardour/disk_writer.cc
@@ -1706,5 +1706,5 @@ DiskWriter::adjust_buffering ()
void
DiskWriter::realtime_handle_transport_stopped ()
{
- realtime_set_speed (0.0f, true);
+ realtime_speed_change ();
}
diff --git a/libs/ardour/enums.cc b/libs/ardour/enums.cc
index 8fa43508a9..fbf0dd42d2 100644
--- a/libs/ardour/enums.cc
+++ b/libs/ardour/enums.cc
@@ -392,7 +392,6 @@ setup_enum_writer ()
REGISTER (_Session_RecordState);
REGISTER_CLASS_ENUM (SessionEvent, SetTransportSpeed);
- REGISTER_CLASS_ENUM (SessionEvent, SetTrackSpeed);
REGISTER_CLASS_ENUM (SessionEvent, Locate);
REGISTER_CLASS_ENUM (SessionEvent, LocateRoll);
REGISTER_CLASS_ENUM (SessionEvent, LocateRollLocate);
diff --git a/libs/ardour/session_process.cc b/libs/ardour/session_process.cc
index a24123d959..9254a8c1ec 100644
--- a/libs/ardour/session_process.cc
+++ b/libs/ardour/session_process.cc
@@ -1231,10 +1231,6 @@ Session::process_event (SessionEvent* ev)
overwrite_some_buffers (static_cast<Track*>(ev->ptr));
break;
- case SessionEvent::SetTrackSpeed:
- set_track_speed (static_cast<Track*> (ev->ptr), ev->speed);
- break;
-
case SessionEvent::SetSyncSource:
DEBUG_TRACE (DEBUG::Slave, "seen request for new slave\n");
use_sync_source (ev->slave);
diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc
index 3d3cea645c..f8f241d11a 100644
--- a/libs/ardour/session_transport.cc
+++ b/libs/ardour/session_transport.cc
@@ -133,14 +133,6 @@ Session::request_transport_speed_nonzero (double speed, bool as_default)
}
void
-Session::request_track_speed (Track* tr, double speed)
-{
- SessionEvent* ev = new SessionEvent (SessionEvent::SetTrackSpeed, SessionEvent::Add, SessionEvent::Immediate, 0, speed);
- ev->set_ptr (tr);
- queue_event (ev);
-}
-
-void
Session::request_stop (bool abort, bool clear_state)
{
SessionEvent* ev = new SessionEvent (SessionEvent::SetTransportSpeed, SessionEvent::Add, SessionEvent::Immediate, audible_frame(), 0.0, abort, clear_state);
@@ -542,7 +534,7 @@ Session::non_realtime_set_speed ()
for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
if (tr) {
- tr->non_realtime_set_speed ();
+ tr->non_realtime_speed_change ();
}
}
}
@@ -1530,7 +1522,7 @@ Session::set_transport_speed (double speed, framepos_t destination_frame, bool a
boost::shared_ptr<RouteList> rl = routes.reader();
for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
- if (tr && tr->realtime_set_speed (_transport_speed, true)) {
+ if (tr && tr->realtime_speed_change()) {
todo = PostTransportWork (todo | PostTransportSpeed);
}
}
@@ -1694,7 +1686,7 @@ Session::start_transport ()
for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
if (tr) {
- tr->realtime_set_speed (_transport_speed, true);
+ tr->realtime_speed_change ();
}
}
@@ -1861,7 +1853,7 @@ Session::use_sync_source (Slave* new_slave)
for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
if (tr && !tr->hidden()) {
- if (tr->realtime_set_speed (_transport_speed, true)) {
+ if (tr->realtime_speed_change()) {
non_rt_required = true;
}
tr->set_slaved (_slave != 0);
@@ -1954,16 +1946,6 @@ Session::switch_to_sync_source (SyncSource src)
}
void
-Session::set_track_speed (Track* track, double speed)
-{
- if (track->realtime_set_speed (speed, false)) {
- add_post_transport_work (PostTransportSpeed);
- _butler->schedule_transport_work ();
- set_dirty ();
- }
-}
-
-void
Session::unset_play_range ()
{
_play_range = false;
diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc
index d37fbb64c8..4b9eb740b6 100644
--- a/libs/ardour/track.cc
+++ b/libs/ardour/track.cc
@@ -672,9 +672,9 @@ Track::non_realtime_locate (framepos_t p)
}
void
-Track::non_realtime_set_speed ()
+Track::non_realtime_speed_change ()
{
- _disk_reader->non_realtime_set_speed ();
+ _disk_reader->non_realtime_speed_change ();
}
int
@@ -705,12 +705,12 @@ Track::transport_looped (framepos_t p)
}
bool
-Track::realtime_set_speed (double s, bool g)
+Track::realtime_speed_change ()
{
- if (_disk_reader->realtime_set_speed (s, g)) {
+ if (_disk_reader->realtime_speed_change ()) {
return -1;
}
- return _disk_writer->realtime_set_speed (s, g);
+ return _disk_writer->realtime_speed_change ();
}
void