mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-22 14:46:34 +01:00
fix bad transition problem in transportFSM when slowing to a stop that is then reversed
This commit is contained in:
parent
66bc15f8c5
commit
8b1df3e083
2 changed files with 18 additions and 9 deletions
|
|
@ -168,7 +168,7 @@ struct TransportFSM
|
||||||
void start_locate_while_stopped (Event const &) const;
|
void start_locate_while_stopped (Event const &) const;
|
||||||
void interrupt_locate (Event const &) const;
|
void interrupt_locate (Event const &) const;
|
||||||
void start_declick_for_locate (Event const &);
|
void start_declick_for_locate (Event const &);
|
||||||
void set_speed (Event const &);
|
bool set_speed (Event const &);
|
||||||
|
|
||||||
/* guards */
|
/* guards */
|
||||||
|
|
||||||
|
|
@ -216,7 +216,7 @@ struct TransportFSM
|
||||||
void set_roll_after (bool) const;
|
void set_roll_after (bool) const;
|
||||||
bool compute_should_roll (LocateTransportDisposition) const;
|
bool compute_should_roll (LocateTransportDisposition) const;
|
||||||
int compute_transport_speed () const;
|
int compute_transport_speed () const;
|
||||||
void maybe_reset_speed ();
|
bool maybe_reset_speed ();
|
||||||
};
|
};
|
||||||
|
|
||||||
} /* end namespace ARDOUR */
|
} /* end namespace ARDOUR */
|
||||||
|
|
|
||||||
|
|
@ -427,9 +427,10 @@ TransportFSM::process_event (Event& ev, bool already_deferred, bool& deferred)
|
||||||
start_locate_after_declick ();
|
start_locate_after_declick ();
|
||||||
break;
|
break;
|
||||||
case DeclickToStop:
|
case DeclickToStop:
|
||||||
maybe_reset_speed ();
|
if (!maybe_reset_speed ()) {
|
||||||
transition (Stopped);
|
transition (Stopped);
|
||||||
/* transport already stopped */
|
/* transport already stopped */
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
bad_transition (ev); return false;
|
bad_transition (ev); return false;
|
||||||
|
|
@ -497,13 +498,15 @@ TransportFSM::stop_playback (Event const & s)
|
||||||
api->stop_transport (s.abort_capture, s.clear_state);
|
api->stop_transport (s.abort_capture, s.clear_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
bool
|
||||||
TransportFSM::maybe_reset_speed ()
|
TransportFSM::maybe_reset_speed ()
|
||||||
{
|
{
|
||||||
|
bool state_changed = false;
|
||||||
|
|
||||||
if (Config->get_reset_default_speed_on_stop()) {
|
if (Config->get_reset_default_speed_on_stop()) {
|
||||||
|
|
||||||
if (most_recently_requested_speed != 1.0) {
|
if (most_recently_requested_speed != 1.0) {
|
||||||
set_speed (Event (1.0, false));
|
state_changed = set_speed (Event (1.0, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -516,9 +519,11 @@ TransportFSM::maybe_reset_speed ()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (most_recently_requested_speed != _default_speed) {
|
if (most_recently_requested_speed != _default_speed) {
|
||||||
set_speed (Event (_default_speed, false));
|
state_changed = set_speed (Event (_default_speed, false));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return state_changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -753,7 +758,7 @@ TransportFSM::compute_transport_speed () const
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
bool
|
||||||
TransportFSM::set_speed (Event const & ev)
|
TransportFSM::set_speed (Event const & ev)
|
||||||
{
|
{
|
||||||
assert (ev.speed != 0.0);
|
assert (ev.speed != 0.0);
|
||||||
|
|
@ -818,7 +823,11 @@ TransportFSM::set_speed (Event const & ev)
|
||||||
transition (WaitingForLocate);
|
transition (WaitingForLocate);
|
||||||
start_locate_while_stopped (lev);
|
start_locate_while_stopped (lev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue