diff options
Diffstat (limited to 'libs')
-rw-r--r-- | libs/ardour/ardour/session.h | 1 | ||||
-rw-r--r-- | libs/ardour/ardour/session_event.h | 1 | ||||
-rw-r--r-- | libs/ardour/enums.cc | 1 | ||||
-rw-r--r-- | libs/ardour/session_process.cc | 4 | ||||
-rw-r--r-- | libs/ardour/session_transport.cc | 8 |
5 files changed, 15 insertions, 0 deletions
diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index 03eccd40a3..de2dc6189e 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -763,6 +763,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop /* ranges */ void request_play_range (std::list<AudioRange>*, bool leave_rolling = false); + void request_cancel_play_range (); bool get_play_range () const { return _play_range; } void maybe_update_session_range (framepos_t, framepos_t); diff --git a/libs/ardour/ardour/session_event.h b/libs/ardour/ardour/session_event.h index 1283f32004..1772b53c3d 100644 --- a/libs/ardour/ardour/session_event.h +++ b/libs/ardour/ardour/session_event.h @@ -54,6 +54,7 @@ public: Audition, InputConfigurationChange, SetPlayAudioRange, + CancelPlayAudioRange, RealTimeOperation, AdjustPlaybackBuffering, AdjustCaptureBuffering, diff --git a/libs/ardour/enums.cc b/libs/ardour/enums.cc index 54f1e602be..9d6d37b5f8 100644 --- a/libs/ardour/enums.cc +++ b/libs/ardour/enums.cc @@ -369,6 +369,7 @@ setup_enum_writer () REGISTER_CLASS_ENUM (SessionEvent, Audition); REGISTER_CLASS_ENUM (SessionEvent, InputConfigurationChange); REGISTER_CLASS_ENUM (SessionEvent, SetPlayAudioRange); + REGISTER_CLASS_ENUM (SessionEvent, CancelPlayAudioRange); REGISTER_CLASS_ENUM (SessionEvent, StopOnce); REGISTER_CLASS_ENUM (SessionEvent, AutoLoop); REGISTER (_SessionEvent_Type); diff --git a/libs/ardour/session_process.cc b/libs/ardour/session_process.cc index 680f2861de..b1e336c373 100644 --- a/libs/ardour/session_process.cc +++ b/libs/ardour/session_process.cc @@ -1142,6 +1142,10 @@ Session::process_event (SessionEvent* ev) set_play_range (ev->audio_range, (ev->speed == 1.0f)); break; + case SessionEvent::CancelPlayAudioRange: + unset_play_range(); + break; + case SessionEvent::RealTimeOperation: process_rtop (ev); del = false; // other side of RT request needs to clean up diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc index 85b36e5a66..19f86eb2b3 100644 --- a/libs/ardour/session_transport.cc +++ b/libs/ardour/session_transport.cc @@ -228,6 +228,14 @@ Session::request_play_range (list<AudioRange>* range, bool leave_rolling) } void +Session::request_cancel_play_range () +{ + SessionEvent* ev = new SessionEvent (SessionEvent::CancelPlayAudioRange, SessionEvent::Add, SessionEvent::Immediate, 0, 0); + queue_event (ev); +} + + +void Session::realtime_stop (bool abort, bool clear_state) { DEBUG_TRACE (DEBUG::Transport, string_compose ("realtime stop @ %1\n", _transport_frame)); |