summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2020-03-10 11:39:39 -0600
committerPaul Davis <paul@linuxaudiosystems.com>2020-03-10 11:39:39 -0600
commitaad60e37b980e5c39d308f4dfb7c3092df95d30b (patch)
treee0df95c563707e0eaf81da7424f89944c70b8b6c /libs
parent843907654c8bb694d58e6efb1d313c735eb4ec4d (diff)
small adjustments to TransportMaster API to better accomodate the "ignore/accept commands" concept
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/transport_master.h1
-rw-r--r--libs/ardour/ardour/types.h7
-rw-r--r--libs/ardour/enums.cc3
-rw-r--r--libs/ardour/interpolation.cc2
-rw-r--r--libs/ardour/session_transport.cc16
-rw-r--r--libs/ardour/transport_master.cc21
6 files changed, 36 insertions, 14 deletions
diff --git a/libs/ardour/ardour/transport_master.h b/libs/ardour/ardour/transport_master.h
index 12180a5027..5b23d08f1f 100644
--- a/libs/ardour/ardour/transport_master.h
+++ b/libs/ardour/ardour/transport_master.h
@@ -345,6 +345,7 @@ class LIBARDOUR_API TransportMaster : public PBD::Stateful {
virtual void check_backend() {}
virtual bool allow_request (TransportRequestSource, TransportRequestType) const;
+ std::string allowed_request_string () const;
TransportRequestType request_mask() const { return _request_mask; }
void set_request_mask (TransportRequestType);
diff --git a/libs/ardour/ardour/types.h b/libs/ardour/ardour/types.h
index 3a991aa81a..6d9d0a9f47 100644
--- a/libs/ardour/ardour/types.h
+++ b/libs/ardour/ardour/types.h
@@ -598,10 +598,9 @@ enum TransportRequestSource {
};
enum TransportRequestType {
- TR_Stop = 0x1,
- TR_Start = 0x2,
- TR_Speed = 0x4,
- TR_Locate = 0x8
+ TR_StartStop = 0x1,
+ TR_Speed = 0x2,
+ TR_Locate = 0x4
};
enum ShuttleBehaviour {
diff --git a/libs/ardour/enums.cc b/libs/ardour/enums.cc
index e8cb1976ad..c01b519e0c 100644
--- a/libs/ardour/enums.cc
+++ b/libs/ardour/enums.cc
@@ -418,8 +418,7 @@ setup_enum_writer ()
REGISTER_ENUM (LTC);
REGISTER (_SyncSource);
- REGISTER_ENUM (TR_Stop);
- REGISTER_ENUM (TR_Start);
+ REGISTER_ENUM (TR_StartStop);
REGISTER_ENUM (TR_Speed);
REGISTER_ENUM (TR_Locate);
REGISTER (_TransportRequestType);
diff --git a/libs/ardour/interpolation.cc b/libs/ardour/interpolation.cc
index 3cf4b796d6..f0400a951d 100644
--- a/libs/ardour/interpolation.cc
+++ b/libs/ardour/interpolation.cc
@@ -44,7 +44,7 @@ CubicInterpolation::interpolate (int channel, samplecnt_t input_samples, Sample
assert (output_samples > 0);
assert (input);
assert (output);
- assert (phase.size () > channel);
+ assert (phase.size () > std::vector<double>::size_type (channel));
_speed = fabs (_speed);
diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc
index db3469b93f..bafde46674 100644
--- a/libs/ardour/session_transport.cc
+++ b/libs/ardour/session_transport.cc
@@ -864,8 +864,14 @@ Session::request_transport_speed (double speed, bool as_default, TransportReques
return;
}
- if (should_ignore_transport_request (origin, TR_Speed)) {
- return;
+ if (speed == 1. || speed == 0. || speed == -1.) {
+ if (should_ignore_transport_request (origin, TR_StartStop)) {
+ return;
+ }
+ } else {
+ if (should_ignore_transport_request (origin, TR_Speed)) {
+ return;
+ }
}
SessionEvent* ev = new SessionEvent (SessionEvent::SetTransportSpeed, SessionEvent::Add, SessionEvent::Immediate, 0, speed);
@@ -881,10 +887,6 @@ Session::request_transport_speed (double speed, bool as_default, TransportReques
void
Session::request_transport_speed_nonzero (double speed, bool as_default, TransportRequestSource origin)
{
- if (should_ignore_transport_request (origin, TransportRequestType (TR_Speed|TR_Start))) {
- return;
- }
-
if (speed == 0) {
speed = DBL_EPSILON;
}
@@ -900,7 +902,7 @@ Session::request_stop (bool abort, bool clear_state, TransportRequestSource orig
return;
}
- if (should_ignore_transport_request (origin, TR_Stop)) {
+ if (should_ignore_transport_request (origin, TR_StartStop)) {
return;
}
diff --git a/libs/ardour/transport_master.cc b/libs/ardour/transport_master.cc
index 4d3aa82053..e68f52e373 100644
--- a/libs/ardour/transport_master.cc
+++ b/libs/ardour/transport_master.cc
@@ -482,6 +482,27 @@ TransportMaster::allow_request (TransportRequestSource src, TransportRequestType
return _request_mask & type;
}
+std::string
+TransportMaster::allowed_request_string () const
+{
+ std::string s;
+ if (_request_mask == TransportRequestType (TR_StartStop|TR_Speed|TR_Locate)) {
+ s = _("All");
+ } else if (_request_mask == TransportRequestType (0)) {
+ s = _("None");
+ } else if (_request_mask == TR_StartStop) {
+ s = _("Start/Stop");
+ } else if (_request_mask == TR_Speed) {
+ s = _("Speed");
+ } else if (_request_mask == TR_Locate) {
+ s = _("Locate");
+ } else {
+ s = _("Complex");
+ }
+
+ return s;
+}
+
void
TransportMaster::set_request_mask (TransportRequestType t)
{