[vlc-devel] commit: Fixed fine rate control (hotkeys). (Laurent Aimar )
git version control
git at videolan.org
Mon Dec 21 18:46:59 CET 2009
vlc | branch: master | Laurent Aimar <fenrir at videolan.org> | Mon Dec 21 11:07:14 2009 +0100| [f12ce3792413ddb2705c1460097eaf74a29f8f59] | committer: Laurent Aimar
Fixed fine rate control (hotkeys).
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=f12ce3792413ddb2705c1460097eaf74a29f8f59
---
modules/control/hotkeys.c | 33 +++++++++++++--------------------
1 files changed, 13 insertions(+), 20 deletions(-)
diff --git a/modules/control/hotkeys.c b/modules/control/hotkeys.c
index 81b2ed2..bdd6b7f 100644
--- a/modules/control/hotkeys.c
+++ b/modules/control/hotkeys.c
@@ -719,31 +719,24 @@ static int PutAction( intf_thread_t *p_intf, int i_action )
else if( i_action == ACTIONID_RATE_FASTER_FINE ||
i_action == ACTIONID_RATE_SLOWER_FINE )
{
- /* The playback rate is defined by INPUT_RATE_DEFAULT / "rate"
- * and we want to increase/decrease it by 0.1 while making sure
- * that the resulting playback rate is a multiple of 0.1
- */
- int i_rate = 1. * INPUT_RATE_DEFAULT
- / var_GetFloat( p_input, "rate" );
- if( i_rate < INPUT_RATE_MIN )
- i_rate = INPUT_RATE_MIN;
- else if( i_rate > INPUT_RATE_MAX )
- i_rate = INPUT_RATE_MAX;
- int i_sign = i_rate < 0 ? -1 : 1;
- const int i_dir = i_action == ACTIONID_RATE_FASTER_FINE ? 1 : -1;
+ const double f_rate_min = (double)INPUT_RATE_DEFAULT / INPUT_RATE_MAX;
+ const double f_rate_max = (double)INPUT_RATE_DEFAULT / INPUT_RATE_MIN;
+ double f_rate = var_GetFloat( p_input, "rate" );
- const double f_speed = floor( ( (double)INPUT_RATE_DEFAULT / abs(i_rate) + 0.05 ) / 0.1 + i_dir ) * 0.1;
- if( f_speed <= (double)INPUT_RATE_DEFAULT / INPUT_RATE_MAX ) /* Needed to avoid infinity */
- i_rate = INPUT_RATE_MAX;
- else
- i_rate = INPUT_RATE_DEFAULT / f_speed + 0.5;
+ int i_sign = f_rate < 0 ? -1 : 1;
+ const int i_dir = i_action == ACTIONID_RATE_FASTER_FINE ? 1 : -1;
- i_rate = i_sign * __MIN( __MAX( i_rate, INPUT_RATE_MIN ), INPUT_RATE_MAX );
+ f_rate = floor( fabs(f_rate) / 0.1 + i_dir ) * 0.1;
+ if( f_rate < f_rate_min )
+ f_rate = f_rate_min;
+ else if( f_rate > f_rate_max )
+ f_rate = f_rate_max;
+ f_rate *= i_sign;
- var_SetFloat( p_input, "rate", i_rate );
+ var_SetFloat( p_input, "rate", f_rate );
char psz_msg[7+1];
- snprintf( psz_msg, sizeof(psz_msg), _("%.2fx"), (double)INPUT_RATE_DEFAULT / i_rate );
+ snprintf( psz_msg, sizeof(psz_msg), _("%.2fx"), f_rate );
vout_OSDMessage( VLC_OBJECT(p_input), DEFAULT_CHAN, "%s", psz_msg );
}
else if( i_action == ACTIONID_POSITION && b_seekable )
More information about the vlc-devel
mailing list