diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2020-03-10 11:39:39 -0600 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2020-03-10 11:39:39 -0600 |
commit | aad60e37b980e5c39d308f4dfb7c3092df95d30b (patch) | |
tree | e0df95c563707e0eaf81da7424f89944c70b8b6c | |
parent | 843907654c8bb694d58e6efb1d313c735eb4ec4d (diff) |
small adjustments to TransportMaster API to better accomodate the "ignore/accept commands" concept
-rw-r--r-- | libs/ardour/ardour/transport_master.h | 1 | ||||
-rw-r--r-- | libs/ardour/ardour/types.h | 7 | ||||
-rw-r--r-- | libs/ardour/enums.cc | 3 | ||||
-rw-r--r-- | libs/ardour/interpolation.cc | 2 | ||||
-rw-r--r-- | libs/ardour/session_transport.cc | 16 | ||||
-rw-r--r-- | libs/ardour/transport_master.cc | 21 |
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) { |