small adjustments to TransportMaster API to better accomodate the "ignore/accept commands" concept

This commit is contained in:
Paul Davis 2020-03-10 11:39:39 -06:00
parent 843907654c
commit aad60e37b9
6 changed files with 36 additions and 14 deletions

View file

@ -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);

View file

@ -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 {

View file

@ -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);

View file

@ -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);

View file

@ -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;
}

View file

@ -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)
{