remove all remaining vestiges of per-track varispeed from libardour
authorPaul Davis <paul@linuxaudiosystems.com>
Tue, 18 Apr 2017 11:28:44 +0000 (12:28 +0100)
committerPaul Davis <paul@linuxaudiosystems.com>
Mon, 18 Sep 2017 15:40:53 +0000 (11:40 -0400)
12 files changed:
libs/ardour/ardour/disk_io.h
libs/ardour/ardour/disk_reader.h
libs/ardour/ardour/session.h
libs/ardour/ardour/session_event.h
libs/ardour/ardour/track.h
libs/ardour/disk_io.cc
libs/ardour/disk_reader.cc
libs/ardour/disk_writer.cc
libs/ardour/enums.cc
libs/ardour/session_process.cc
libs/ardour/session_transport.cc
libs/ardour/track.cc

index 47b02582a14c5459312fa2013cca6e33bee0c40e..e09f25d7675fb369b4b723555c1503ad6de80127 100644 (file)
@@ -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() {}
index c3cbe33f158fddb2608542cb5e1f417dc0312686..b0a6f6a1581e2fab19374d76b19d2e639c2daf3d 100644 (file)
@@ -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);
index 7d408234b20c2b14bd8538b16c104e026ca88da7..1175ec189c82e1b045ad9071fe4dd3c7b6ce547b 100644 (file)
@@ -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 ();
index 740fcae1a2b246ed51c591bc02c0d9194d71b969..2780924c276ad12138bc9ed713103047206ec5ff 100644 (file)
@@ -40,7 +40,6 @@ class LIBARDOUR_API SessionEvent {
 public:
        enum Type {
                SetTransportSpeed,
-               SetTrackSpeed,
                Locate,
                LocateRoll,
                LocateRollLocate,
index 103def70417445cd9658984b16f0ff02f3a88503..99f4ae2f49154aa4920e65b3dcb51575754289a1 100644 (file)
@@ -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);
index 5b81e2a161b94073fa4afc8aa7facc4a090b5656..587ba19ed05a79c1cfaba85ba02ec9ff9aa85b27 100644 (file)
@@ -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;
 }
 
index fbc48c01c970ffaa1a2af98df0bdee885da86529..2f4b9a903df5f536a8f493879a7d462e2f1357e1 100644 (file)
@@ -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));
 
index 09b10696c0f47afe64d241286043a9fa41994335..5cddb514991a54297115283d24734353bedf9e98 100644 (file)
@@ -1706,5 +1706,5 @@ DiskWriter::adjust_buffering ()
 void
 DiskWriter::realtime_handle_transport_stopped ()
 {
-       realtime_set_speed (0.0f, true);
+       realtime_speed_change ();
 }
index 8fa43508a93cc871e54fb3c11b5e7f36de62fd59..fbf0dd42d2dd4cb139994f155f5a360d7873ff9a 100644 (file)
@@ -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);
index a24123d959c481ca79cbc8f8096820d9e95c02d9..9254a8c1ec329ad7bfc3a60277ebdf91db69c5e6 100644 (file)
@@ -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);
index 3d3cea645cf2438e295fb7675c13cdd74a58c824..f8f241d11ab8805453fb40f7b533db9a2416176d 100644 (file)
@@ -132,14 +132,6 @@ Session::request_transport_speed_nonzero (double speed, bool as_default)
        request_transport_speed (speed, 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)
 {
@@ -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);
@@ -1953,16 +1945,6 @@ Session::switch_to_sync_source (SyncSource src)
        request_sync_source (new_slave);
 }
 
-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 ()
 {
index d37fbb64c8be42d7a535b3975446e6fe3a4b8f20..4b9eb740b6e8bbe3dfb462e531a4dda0e1d53199 100644 (file)
@@ -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