diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index 4680e20f94..6f5d088b0c 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -475,7 +475,7 @@ public: void request_bounded_roll (samplepos_t start, samplepos_t end); void request_roll (TransportRequestSource origin = TRS_UI); void request_stop (bool abort = false, bool clear_state = false, TransportRequestSource origin = TRS_UI); - void request_locate (samplepos_t sample, LocateTransportDisposition ltd = RollIfAppropriate, TransportRequestSource origin = TRS_UI); + void request_locate (samplepos_t sample, bool force = false, LocateTransportDisposition ltd = RollIfAppropriate, TransportRequestSource origin = TRS_UI); void request_play_loop (bool yn, bool leave_rolling = false); bool get_play_loop () const { return play_loop; } diff --git a/libs/ardour/mtc_slave.cc b/libs/ardour/mtc_slave.cc index 22dda80cb1..9861cba418 100644 --- a/libs/ardour/mtc_slave.cc +++ b/libs/ardour/mtc_slave.cc @@ -407,7 +407,7 @@ MTC_TransportMaster::update_mtc_time (const MIDI::byte *msg, bool was_full, samp boost::shared_ptr c = TransportMasterManager::instance().current(); if (c && c.get() == this && _session->config.get_external_sync()) { _session->set_requested_return_sample (-1); - _session->request_locate (mtc_frame, MustStop, TRS_MTC); + _session->request_locate (mtc_frame, false, MustStop, TRS_MTC); } update_mtc_status (MIDI::MTC_Stopped); reset (false); diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index c2321873f3..a57f7d1d29 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -1566,7 +1566,7 @@ Session::auto_loop_changed (Location* location) */ loop_changing = true; - request_locate (location->start_sample(), MustRoll); + request_locate (location->start_sample(), false, MustRoll); } else { @@ -6441,7 +6441,7 @@ void Session::goto_end () { if (_session_range_location) { - request_locate (_session_range_location->end().samples(), MustStop); + request_locate (_session_range_location->end().samples(), false, MustStop); } else { request_locate (0, MustStop); } @@ -6451,9 +6451,9 @@ void Session::goto_start (bool and_roll) { if (_session_range_location) { - request_locate (_session_range_location->start().samples(), and_roll ? MustRoll : RollIfAppropriate); + request_locate (_session_range_location->start().samples(), false, and_roll ? MustRoll : RollIfAppropriate); } else { - request_locate (0, and_roll ? MustRoll : RollIfAppropriate); + request_locate (0, false, and_roll ? MustRoll : RollIfAppropriate); } } diff --git a/libs/ardour/session_export.cc b/libs/ardour/session_export.cc index 1a06583040..3eadd6259c 100644 --- a/libs/ardour/session_export.cc +++ b/libs/ardour/session_export.cc @@ -454,6 +454,6 @@ Session::finalize_audio_export (TransportRequestSource trs) if (post_export_sync) { config.set_external_sync (true); } else { - request_locate (post_export_position, MustStop, trs); + request_locate (post_export_position, false, MustStop, trs); } } diff --git a/libs/ardour/session_midi.cc b/libs/ardour/session_midi.cc index e9fdecdc55..a7bdd53547 100644 --- a/libs/ardour/session_midi.cc +++ b/libs/ardour/session_midi.cc @@ -306,7 +306,7 @@ Session::mmc_locate (MIDI::MachineControl &/*mmc*/, const MIDI::byte* mmc_tc) mtcs->handle_locate (mmc_tc); } else { // cerr << "Locate without MTC slave\n"; - request_locate (target_sample, MustStop); + request_locate (target_sample, false, MustStop); } } diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc index ac83c371b5..ffcf218b77 100644 --- a/libs/ardour/session_transport.cc +++ b/libs/ardour/session_transport.cc @@ -489,7 +489,7 @@ Session::start_transport (bool after_loop) /* jump to start and then roll from there */ - request_locate (location->start_sample(), MustRoll); + request_locate (location->start_sample(), false, MustRoll); return; } } @@ -907,7 +907,7 @@ Session::request_stop (bool abort, bool clear_state, TransportRequestSource orig } void -Session::request_locate (samplepos_t target_sample, LocateTransportDisposition ltd, TransportRequestSource origin) +Session::request_locate (samplepos_t target_sample, bool force, LocateTransportDisposition ltd, TransportRequestSource origin) { if (synced_to_engine()) { _engine.transport_locate (target_sample); @@ -936,7 +936,7 @@ Session::request_locate (samplepos_t target_sample, LocateTransportDisposition l break; } - SessionEvent *ev = new SessionEvent (type, SessionEvent::Add, SessionEvent::Immediate, target_sample, 0, false); + SessionEvent *ev = new SessionEvent (type, SessionEvent::Add, SessionEvent::Immediate, target_sample, 0, force); ev->locate_transport_disposition = ltd; DEBUG_TRACE (DEBUG::Transport, string_compose ("Request locate to %1 ltd = %2\n", target_sample, enum_2_string (ltd))); queue_event (ev); @@ -971,7 +971,7 @@ Session::request_preroll_record_trim (samplepos_t rec_in, samplecnt_t preroll) samplepos_t pos = std::max ((samplepos_t)0, rec_in - preroll); _preroll_record_trim_len = rec_in - pos; maybe_enable_record (); - request_locate (pos, MustRoll); + request_locate (pos, false, MustRoll); set_requested_return_sample (rec_in); if (pos < rec_in) { diff --git a/libs/surfaces/control_protocol/basic_ui.cc b/libs/surfaces/control_protocol/basic_ui.cc index 06603b4730..4e6a275360 100644 --- a/libs/surfaces/control_protocol/basic_ui.cc +++ b/libs/surfaces/control_protocol/basic_ui.cc @@ -521,13 +521,13 @@ BasicUI::transport_sample () void BasicUI::locate (samplepos_t where, LocateTransportDisposition ltd) { - session->request_locate (where, ltd); + session->request_locate (where, false, ltd); } void BasicUI::locate (samplepos_t where, bool roll) { - session->request_locate (where, roll ? MustRoll : RollIfAppropriate); + session->request_locate (where, false, roll ? MustRoll : RollIfAppropriate); } void @@ -542,7 +542,7 @@ BasicUI::jump_by_seconds (double secs, LocateTransportDisposition ltd) } s = s * session->nominal_sample_rate(); - session->request_locate (floor(s), ltd); + session->request_locate (floor(s), false, ltd); } void @@ -556,7 +556,7 @@ BasicUI::jump_by_bars (int bars, LocateTransportDisposition ltd) bbt.bars = 1; } - session->request_locate (tmap->sample_at (bbt), ltd); + session->request_locate (tmap->sample_at (bbt), false, ltd); } void @@ -678,7 +678,7 @@ BasicUI::toggle_roll (bool with_abort, bool roll_out_of_bounded_mode) } else { /* not rolling */ if (session->get_play_loop() && Config->get_loop_is_mode()) { - session->request_locate (session->locations()->auto_loop_location()->start().samples(), MustRoll); + session->request_locate (session->locations()->auto_loop_location()->start().samples(), false, MustRoll); } else { session->request_roll (TRS_UI); } diff --git a/libs/surfaces/faderport8/actions.cc b/libs/surfaces/faderport8/actions.cc index 0c7641b5a4..befb1fc1e7 100644 --- a/libs/surfaces/faderport8/actions.cc +++ b/libs/surfaces/faderport8/actions.cc @@ -309,7 +309,7 @@ FaderPort8::button_varispeed (bool ffw) // stop key-repeat dynamic_cast(&b_ffw)->stop_repeat(); dynamic_cast(&b_rew)->stop_repeat(); - session->request_locate (0, MustStop); + session->request_locate (0, false, MustStop); return; } diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc index 030c0451df..01e16ee1fe 100644 --- a/libs/surfaces/osc/osc.cc +++ b/libs/surfaces/osc/osc.cc @@ -1305,7 +1305,7 @@ OSC::osc_toggle_roll (bool ret2strt) } else { if (session->get_play_loop() && Config->get_loop_is_mode()) { - session->request_locate (session->locations()->auto_loop_location()->start().samples(), MustRoll); + session->request_locate (session->locations()->auto_loop_location()->start().samples(), false, MustRoll); } else { session->request_roll (TRS_UI); } @@ -3143,7 +3143,7 @@ OSC::set_marker (const char* types, lo_arg **argv, int argc, lo_message msg) for (Locations::LocationList::const_iterator l = ll.begin(); l != ll.end(); ++l) { if ((*l)->is_mark ()) { if (strcmp (&argv[0]->s, (*l)->name().c_str()) == 0) { - session->request_locate ((*l)->start_sample (), MustStop); + session->request_locate ((*l)->start_sample (), false, MustStop); return 0; } else if ((*l)->start () == session->transport_sample()) { cur_mark = (*l); @@ -3180,7 +3180,7 @@ OSC::set_marker (const char* types, lo_arg **argv, int argc, lo_message msg) std::sort (lm.begin(), lm.end(), location_marker_sort); // go there if (marker < lm.size()) { - session->request_locate (lm[marker].when, MustStop); + session->request_locate (lm[marker].when, false, MustStop); return 0; } // we were unable to deal with things @@ -5904,7 +5904,7 @@ OSC::periodic (void) if (diff > 120000) { scrub_speed = 0; // locate to the place PH was at last tick - session->request_locate (scrub_place, MustStop); + session->request_locate (scrub_place, false, MustStop); } } for (uint32_t it = 0; it < _surface.size(); it++) {