diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index 058010788f..c6f9096329 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -1337,7 +1337,7 @@ protected: /* transport API */ - void locate (samplepos_t, bool with_roll, bool with_flush, bool for_loop_end=false, bool force=false, bool with_mmc=true); + void locate (samplepos_t, bool with_roll, bool for_loop_end=false, bool force=false, bool with_mmc=true); void stop_transport (bool abort = false, bool clear_state = false); void start_transport (); void butler_completed_transport_work (); diff --git a/libs/ardour/ardour/transport_api.h b/libs/ardour/ardour/transport_api.h index 6fac31ac53..89299a0178 100644 --- a/libs/ardour/ardour/transport_api.h +++ b/libs/ardour/ardour/transport_api.h @@ -34,7 +34,8 @@ class LIBARDOUR_API TransportAPI private: friend struct TransportFSM; - virtual void locate (samplepos_t, bool with_roll, bool with_flush, bool with_loop=false, bool force=false, bool with_mmc=true) = 0; + virtual void locate (samplepos_t, bool with_roll, bool with_loop=false, bool force=false, bool with_mmc=true) = 0; + virtual bool should_stop_before_locate () const = 0; virtual void stop_transport (bool abort = false, bool clear_state = false) = 0; virtual void start_transport () = 0; virtual void butler_completed_transport_work () = 0; diff --git a/libs/ardour/ardour/transport_fsm.h b/libs/ardour/ardour/transport_fsm.h index 4fb0d676e1..6efaa84f1b 100644 --- a/libs/ardour/ardour/transport_fsm.h +++ b/libs/ardour/ardour/transport_fsm.h @@ -50,7 +50,6 @@ struct TransportFSM bool clear_state; /* for locate */ LocateTransportDisposition ltd; - bool with_flush; samplepos_t target; bool for_loop_end; bool force; @@ -63,7 +62,6 @@ struct TransportFSM , abort_capture (false) , clear_state (false) , ltd (MustStop) - , with_flush (false) , target (0) , for_loop_end (false) , force (false) @@ -76,19 +74,17 @@ struct TransportFSM , abort_capture (ab) , clear_state (cl) , ltd (MustStop) - , with_flush (false) , target (0) , for_loop_end (false) , force (false) { assert (t == StopTransport); } - Event (EventType t, samplepos_t pos, LocateTransportDisposition l, bool fl, bool lp, bool f4c) + Event (EventType t, samplepos_t pos, LocateTransportDisposition l, bool lp, bool f4c) : type (t) , abort_capture (false) , clear_state (false) , ltd (l) - , with_flush (fl) , target (pos) , for_loop_end (lp) , force (f4c) diff --git a/libs/ardour/session_process.cc b/libs/ardour/session_process.cc index 5ad35d7021..643841bf0c 100644 --- a/libs/ardour/session_process.cc +++ b/libs/ardour/session_process.cc @@ -64,7 +64,7 @@ using namespace std; #define TFSM_ROLL() { _transport_fsm->enqueue (new TransportFSM::Event (TransportFSM::StartTransport)); } #define TFSM_STOP(abort,clear) { _transport_fsm->enqueue (new TransportFSM::Event (TransportFSM::StopTransport,abort,clear)); } #define TFSM_SPEED(speed,as_default) { _transport_fsm->enqueue (new TransportFSM::Event (speed,as_default)); } -#define TFSM_LOCATE(target,ltd,flush,loop,force) { _transport_fsm->enqueue (new TransportFSM::Event (TransportFSM::Locate,target,ltd,flush,loop,force)); } +#define TFSM_LOCATE(target,ltd,loop,force) { _transport_fsm->enqueue (new TransportFSM::Event (TransportFSM::Locate,target,ltd,loop,force)); } /** Called by the audio engine when there is work to be done with JACK. @@ -873,9 +873,9 @@ Session::process_event (SessionEvent* ev) loop range. */ if (play_loop) { - /* roll after locate, do not flush, set "for loop end" true + /* roll after locate, set "for loop end" true */ - TFSM_LOCATE (ev->target_sample, MustRoll, false, true, false); + TFSM_LOCATE (ev->target_sample, MustRoll, true, false); } remove = false; del = false; @@ -884,19 +884,19 @@ Session::process_event (SessionEvent* ev) case SessionEvent::Locate: /* args: do not roll after locate, clear state, not for loop, force */ DEBUG_TRACE (DEBUG::Transport, string_compose ("sending locate to %1 to tfsm\n", ev->target_sample)); - TFSM_LOCATE (ev->target_sample, ev->locate_transport_disposition, true, false, ev->yes_or_no); + TFSM_LOCATE (ev->target_sample, ev->locate_transport_disposition, false, ev->yes_or_no); _send_timecode_update = true; break; case SessionEvent::LocateRoll: /* args: roll after locate, clear state if not looping, not for loop, force */ - TFSM_LOCATE (ev->target_sample, MustRoll, !play_loop, false, ev->yes_or_no); + TFSM_LOCATE (ev->target_sample, MustRoll, false, ev->yes_or_no); _send_timecode_update = true; break; case SessionEvent::Skip: if (Config->get_skip_playback()) { - TFSM_LOCATE (ev->target_sample, MustRoll, true, false, false); + TFSM_LOCATE (ev->target_sample, MustRoll, false, false); _send_timecode_update = true; } remove = false; @@ -906,7 +906,7 @@ Session::process_event (SessionEvent* ev) case SessionEvent::LocateRollLocate: // locate is handled by ::request_roll_at_and_return() _requested_return_sample = ev->target_sample; - TFSM_LOCATE (ev->target2_sample, MustRoll, true, false, false); + TFSM_LOCATE (ev->target2_sample, MustRoll, false, false); _send_timecode_update = true; break; @@ -957,8 +957,8 @@ Session::process_event (SessionEvent* ev) break; case SessionEvent::RangeLocate: - /* args: roll after locate, do flush, not with loop */ - TFSM_LOCATE (ev->target_sample, MustRoll, true, false, false); + /* args: roll after locate, not with loop */ + TFSM_LOCATE (ev->target_sample, MustRoll, false, false); remove = false; del = false; break; @@ -1520,7 +1520,7 @@ Session::implement_master_strategy () break; case TransportMasterLocate: transport_master_strategy.action = TransportMasterWait; - TFSM_LOCATE(transport_master_strategy.target, transport_master_strategy.roll_disposition, true, false, false); + TFSM_LOCATE(transport_master_strategy.target, transport_master_strategy.roll_disposition, false, false); break; case TransportMasterStart: TFSM_EVENT (TransportFSM::StartTransport); diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc index 12308ec956..04543d4fef 100644 --- a/libs/ardour/session_transport.cc +++ b/libs/ardour/session_transport.cc @@ -85,7 +85,7 @@ using namespace PBD; #define TFSM_EVENT(evtype) { _transport_fsm->enqueue (new TransportFSM::Event (evtype)); } #define TFSM_STOP(abort,clear) { _transport_fsm->enqueue (new TransportFSM::Event (TransportFSM::StopTransport,abort,clear)); } -#define TFSM_LOCATE(target,ltd,flush,loop,force) { _transport_fsm->enqueue (new TransportFSM::Event (TransportFSM::Locate,target,ltd,flush,loop,force)); } +#define TFSM_LOCATE(target,ltd,loop,force) { _transport_fsm->enqueue (new TransportFSM::Event (TransportFSM::Locate,target,ltd,loop,force)); } #define TFSM_SPEED(speed,as_default) { _transport_fsm->enqueue (new TransportFSM::Event (speed,as_default)); } /* ***************************************************************************** @@ -195,7 +195,7 @@ Session::realtime_stop (bool abort, bool clear_state) /** @param with_mmc true to send a MMC locate command when the locate is done */ void -Session::locate (samplepos_t target_sample, bool with_roll, bool with_flush, bool for_loop_end, bool force, bool with_mmc) +Session::locate (samplepos_t target_sample, bool with_roll, bool for_loop_end, bool force, bool with_mmc) { ENSURE_PROCESS_THREAD; @@ -214,8 +214,8 @@ Session::locate (samplepos_t target_sample, bool with_roll, bool with_flush, boo * changes in the value of _transport_sample. */ - DEBUG_TRACE (DEBUG::Transport, string_compose ("rt-locate to %1 ts = %7, roll %2 flush %3 for loop end %4 force %5 mmc %6\n", - target_sample, with_roll, with_flush, for_loop_end, force, with_mmc, _transport_sample)); + DEBUG_TRACE (DEBUG::Transport, string_compose ("rt-locate to %1 ts = %7, roll %2 for loop end %3 force %4 mmc %5\n", + target_sample, with_roll, for_loop_end, force, with_mmc, _transport_sample)); if (!force && (_transport_sample == target_sample) && !for_loop_end) { @@ -1639,12 +1639,12 @@ Session::set_play_loop (bool yn, bool change_transport_state) /* set loop_changing to ensure that non_realtime_stop does not unset_play_loop */ loop_changing = true; } - /* args: position, disposition, flush=true, for_loop_end=false, force=true */ - TFSM_LOCATE (loc->start(), MustRoll, true, false, true); + /* args: position, disposition, for_loop_end=false, force=true */ + TFSM_LOCATE (loc->start(), MustRoll, false, true); } else { if (!transport_rolling()) { /* loop-is-mode: not rolling, just locate to loop start */ - TFSM_LOCATE (loc->start(), MustStop, true, false, true); + TFSM_LOCATE (loc->start(), MustStop, false, true); } } TransportStateChange (); /* EMIT SIGNAL */ diff --git a/libs/ardour/transport_fsm.cc b/libs/ardour/transport_fsm.cc index db68b700ac..ce31a5cb8a 100644 --- a/libs/ardour/transport_fsm.cc +++ b/libs/ardour/transport_fsm.cc @@ -56,7 +56,7 @@ TransportFSM::Event::operator delete (void *ptr, size_t /*size*/) } TransportFSM::TransportFSM (TransportAPI& tapi) - : _last_locate (Locate, 0, MustRoll, false, false, false) /* all but first argument don't matter */ + : _last_locate (Locate, 0, MustRoll, false, false) /* all but first argument don't matter */ , last_speed_request (0, false) /* SetSpeed request */ , api (&tapi) , processing (0) @@ -292,9 +292,8 @@ TransportFSM::process_event (Event& ev, bool already_deferred, bool& deferred) break; case Locate: - DEBUG_TRACE (DEBUG::TFSMEvents, string_compose ("locate, ltd = %1 flush = %2 target = %3 loop %4 force %5\n", + DEBUG_TRACE (DEBUG::TFSMEvents, string_compose ("locate, ltd = %1 target = %2 loop %3 force %4\n", enum_2_string (ev.ltd), - ev.with_flush, ev.target, ev.for_loop_end, ev.force)); @@ -490,7 +489,7 @@ TransportFSM::start_locate_while_stopped (Event const & l) const set_roll_after (compute_should_roll (l.ltd)); - api->locate (l.target, current_roll_after_locate_status.get(), l.with_flush, l.for_loop_end, l.force); + api->locate (l.target, current_roll_after_locate_status.get(), l.for_loop_end, l.force); } bool @@ -525,7 +524,7 @@ TransportFSM::locate_for_loop (Event const & l) const bool should_roll = compute_should_roll (l.ltd); current_roll_after_locate_status = should_roll; _last_locate = l; - api->locate (l.target, should_roll, l.with_flush, l.for_loop_end, l.force); + api->locate (l.target, should_roll, l.for_loop_end, l.force); } void @@ -535,7 +534,7 @@ TransportFSM::start_locate_after_declick () const current_roll_after_locate_status ? current_roll_after_locate_status.get() : compute_should_roll (_last_locate.ltd))); const bool roll = current_roll_after_locate_status ? current_roll_after_locate_status.get() : compute_should_roll (_last_locate.ltd); - api->locate (_last_locate.target, roll, _last_locate.with_flush, _last_locate.for_loop_end, _last_locate.force); + api->locate (_last_locate.target, roll, _last_locate.for_loop_end, _last_locate.force); } void @@ -564,7 +563,7 @@ TransportFSM::interrupt_locate (Event const & l) const * we are interrupting the locate to start a new one. */ _last_locate = l; - api->locate (l.target, false, l.with_flush, l.for_loop_end, l.force); + api->locate (l.target, false, l.for_loop_end, l.force); } void @@ -705,7 +704,7 @@ TransportFSM::set_speed (Event const & ev) last_speed_request = ev; transition (Reversing); - Event lev (Locate, api->position(), must_roll ? MustRoll : MustStop, false, false, true); + Event lev (Locate, api->position(), must_roll ? MustRoll : MustStop, false, true); transition (DeclickToLocate); start_declick_for_locate (lev);