summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/session.h1
-rw-r--r--libs/ardour/ardour/session_event.h1
-rw-r--r--libs/ardour/enums.cc1
-rw-r--r--libs/ardour/session_process.cc4
-rw-r--r--libs/ardour/session_transport.cc8
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));