Fixed max FPS calculation

This commit is contained in:
Duilio Protti 2016-06-29 14:32:48 -03:00
parent 8d8d9f3ff1
commit 3033e05467
4 changed files with 23 additions and 21 deletions

View File

@ -3,8 +3,8 @@ Infinity
Visualization plugin for [Audacious](http://audacious-media-player.org/) music player.
It generates beautiful light effects. Supports full-screen mode, mouse resizing and preferences
saving.
It generates beautiful light effects. Supports full-screen mode, mouse resizing, preferences
saving and player control through keyboard.
**[Go to Downloads](https://github.com/dprotti/infinity-plugin/releases/latest/)**
@ -13,11 +13,11 @@ saving.
Requirements
------------
Audacious >= 3.5, 1.0.6 <= SDL < 2, Glib >= 2.8, Gtk+ >= 2.8
Audacious >= 3.5, 1.0.6 <= SDL < 2, Glib >= 2.28, Gtk+ >= 2.8
**Install deps in Ubuntu**
`sudo apt -y install audacious-dev libaudclient-dev libsdl1.2-dev libglib2.0-dev libgtk2.0-dev`
`sudo apt -y install audacious-dev libsdl1.2-dev libglib2.0-dev libgtk2.0-dev`
Install from tarball
-------

View File

@ -34,7 +34,7 @@ else
fi
# Check some dependencies
PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.8,,)
PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.28,,)
AC_SUBST(GLIB_LIBS)
AC_SUBST(GLIB_CFLAGS)

View File

@ -32,7 +32,7 @@ static const char about_text[] =
static const PreferencesWidget prefs_fps[] = {
WidgetLabel ("<b>Frames per second</b>"),
WidgetSpin ("Max. :", WidgetInt (CFGID, "max_fps"), {10, 120, 1, "fps"}),
WidgetSpin ("Max. :", WidgetInt (CFGID, "max_fps"), {15, 60, 1, "fps"}),
WidgetLabel ("<b>How often change effect</b>"),
WidgetSpin ("Every", WidgetInt (CFGID, "effect_time"), {50, 500, 5, "frames "}),
WidgetLabel ("<b>How often change colors</b>"),
@ -116,7 +116,7 @@ static const char * const defaults[] = {
"effect_time", "100",
"palette_time", "100",
"scale_factor", "1",
"max_fps", "15",
"max_fps", "30",
"show_title", "true"
};

View File

@ -399,22 +399,20 @@ static void check_events()
}
// log calling line to improve bug reports
static gint32 calculate_frame_length(gint32 fps, int line) {
gint32 frame_length = (gint32)(((1.0 / fps) * 1000));
static gint64 calculate_frame_length_usecs(gint32 fps, int line) {
gint64 frame_length = (gint64)(((1.0 / fps) * 1000000));
g_message("Infinity[%d]: setting maximum rate at ~%d frames/second", line, fps);
return frame_length;
}
static int renderer(void *arg)
{
gint32 render_time, now;
gint32 frame_length;
gint32 idle_time;
gint32 fps, new_fps;
gint32 t_between_effects, t_between_colors;
fps = aud_get_int(CFGID, "max_fps");
frame_length = calculate_frame_length(fps, __LINE__);
frame_length = calculate_frame_length_usecs(fps, __LINE__);
t_between_effects = aud_get_int(CFGID, "effect_time");
t_between_colors = aud_get_int(CFGID, "palette_time");
initializing = FALSE;
@ -438,7 +436,7 @@ static int renderer(void *arg)
resizing = FALSE;
g_return_val_if_fail(SDL_UnlockMutex(resizing_mutex) >= 0, -1);
}
render_time = (gint32)SDL_GetTicks();
auto t_begin = g_get_monotonic_time();
display_blur(scr_par.width * scr_par.height * current_effect.num_effect);
spectral(&current_effect);
curve(&current_effect);
@ -478,12 +476,14 @@ static int renderer(void *arg)
new_fps = aud_get_int(CFGID, "max_fps");
if (new_fps != fps) {
fps = new_fps;
frame_length = calculate_frame_length(fps, __LINE__);
frame_length = calculate_frame_length_usecs(fps, __LINE__);
}
now = (gint32)SDL_GetTicks();
if ((idle_time = (now - render_time)) < frame_length)
g_usleep(idle_time * 900);
auto now = g_get_monotonic_time();
auto render_time = now - t_begin;
if (render_time < frame_length) {
g_usleep(frame_length - render_time);
}
}
return 0;
@ -523,7 +523,7 @@ static int renderer_mmx(void *arg)
resizing = FALSE;
g_return_val_if_fail(SDL_UnlockMutex(resizing_mutex) >= 0, -1);
}
render_time = SDL_GetTicks();
auto t_begin = g_get_monotonic_time();
display_blur_mmx(scr_par.width * scr_par.height * current_effect.num_effect);
spectral(&current_effect);
curve(&current_effect);
@ -566,9 +566,11 @@ static int renderer_mmx(void *arg)
frame_length = calculate_frame_length(fps, __LINE__);
}
now = SDL_GetTicks();
if ((idle_time = (now - render_time)) < frame_length)
g_usleep(idle_time * 900);
auto now = g_get_monotonic_time();
auto render_time = now - t_begin;
if (render_time < frame_length) {
g_usleep(frame_length - render_time);
}
}
return 0;