diff --git a/modules/gui/qt/player/player_controller.cpp b/modules/gui/qt/player/player_controller.cpp index 9f1de2b32b7e408200a4703a4b8e1e8ae82f000a..02cea2f0e657c4f37153696e08c79115ab17964d 100644 --- a/modules/gui/qt/player/player_controller.cpp +++ b/modules/gui/qt/player/player_controller.cpp @@ -1220,10 +1220,23 @@ void PlayerController::reverse() void PlayerController::setRate( float new_rate ) { Q_D(PlayerController); + + if (qFuzzyCompare(d->m_rate, new_rate)) + return; + msg_Dbg( d->p_intf, "setRate %f", new_rate); vlc_player_locker lock{ d->m_player }; if ( vlc_player_CanChangeRate( d->m_player ) ) + { vlc_player_ChangeRate( d->m_player, new_rate ); + + // Until the timer notifies the change, we need to still change + // the rate, because player timer update may take a long time. + // For position, it is supposed to be interpolated but for rate + // the new value can be taken as is: + d->m_rate = new_rate; + emit rateChanged(d->m_rate); + } } void PlayerController::slower()